diff --git a/Makefile b/Makefile index 0b0f5fa..8e5eab3 100644 --- a/Makefile +++ b/Makefile @@ -21,8 +21,10 @@ PERF_FRAME_SPRITES ?= 128 PERF_FRAME_FRAMES ?= 400 PERF_FRAME_WARMUP ?= 100 PERF_FRAME_TRIALS ?= 10 -# 0=visible, 1=half offscreen, 2=alternating textures +# 0=visible, 1=half offscreen, 2=alternating textures, 3=stacked PERF_FRAME_SCENARIO ?= 0 +PERF_FRAME_WIDTH ?= 800 +PERF_FRAME_HEIGHT ?= 600 help: @echo "Targets:" @@ -44,7 +46,7 @@ help: @echo " flame-svg Convert perf.data -> $(FLAME_PREFIX).svg/.jpg" @echo " flame-report Convert perf.data -> $(FLAME_PREFIX)-report.txt" @echo " perf-draw Deterministic CPU draw benchmark" - @echo " perf-frame Deterministic SDL GPU frame benchmark (scenario 0/1/2)" + @echo " perf-frame Deterministic SDL GPU frame benchmark (scenario 0/1/2/3)" bake: ./scripts/bake_all.sh @@ -89,7 +91,9 @@ perf-frame: -define:PERF_FRAMES=$(PERF_FRAME_FRAMES) \ -define:PERF_WARMUP_FRAMES=$(PERF_FRAME_WARMUP) \ -define:PERF_TRIALS=$(PERF_FRAME_TRIALS) \ - -define:PERF_SCENARIO=$(PERF_FRAME_SCENARIO) + -define:PERF_SCENARIO=$(PERF_FRAME_SCENARIO) \ + -define:PERF_WIDTH=$(PERF_FRAME_WIDTH) \ + -define:PERF_HEIGHT=$(PERF_FRAME_HEIGHT) toad: odin run examples/toad -collection:pkg=. diff --git a/benchmarks/sprite_frame/main.odin b/benchmarks/sprite_frame/main.odin index 01cf372..dd6fbe8 100644 --- a/benchmarks/sprite_frame/main.odin +++ b/benchmarks/sprite_frame/main.odin @@ -9,14 +9,14 @@ PERF_FRAMES :: #config(PERF_FRAMES, 400) PERF_WARMUP_FRAMES :: #config(PERF_WARMUP_FRAMES, 100) PERF_TRIALS :: #config(PERF_TRIALS, 10) PERF_SCENARIO :: #config(PERF_SCENARIO, 0) - -WINDOW_WIDTH :: 800 -WINDOW_HEIGHT :: 600 +PERF_WIDTH :: #config(PERF_WIDTH, 800) +PERF_HEIGHT :: #config(PERF_HEIGHT, 600) Scenario :: enum { Visible, Half_Offscreen, Alternating_Textures, + Stacked, } @(private) @@ -46,6 +46,8 @@ scenario_name :: proc(scenario: Scenario) -> string { return "half_offscreen" case .Alternating_Textures: return "alternating_textures" + case .Stacked: + return "stacked" } return "unknown" } @@ -80,12 +82,14 @@ main :: proc() { #assert(PERF_FRAMES > 0) #assert(PERF_WARMUP_FRAMES > 0) #assert(PERF_TRIALS > 0) - #assert(PERF_SCENARIO >= 0 && PERF_SCENARIO <= 2) + #assert(PERF_SCENARIO >= 0 && PERF_SCENARIO <= 3) + #assert(PERF_WIDTH > 0) + #assert(PERF_HEIGHT > 0) scenario := Scenario(PERF_SCENARIO) app: eng.App - if !eng.init(&app, "sprite frame benchmark", WINDOW_WIDTH, WINDOW_HEIGHT) { + if !eng.init(&app, "sprite frame benchmark", PERF_WIDTH, PERF_HEIGHT) { return } defer eng.shutdown(&app) @@ -113,6 +117,8 @@ main :: proc() { } if scenario == .Half_Offscreen && (i & 1) == 1 { position = {-10_000, -10_000} + } else if scenario == .Stacked { + position = {f32(PERF_WIDTH / 2), f32(PERF_HEIGHT / 2)} } sprites[i] = eng.spawn_sprite(data, position, "walk", i % 17) } @@ -129,8 +135,8 @@ main :: proc() { "benchmark=sprite_frame scenario=%s sprites=%d resolution=%dx%d frames=%d warmup=%d trials=%d backend=%v driver=%s present=%s", scenario_name(scenario), PERF_SPRITES, - WINDOW_WIDTH, - WINDOW_HEIGHT, + PERF_WIDTH, + PERF_HEIGHT, PERF_FRAMES, PERF_WARMUP_FRAMES, PERF_TRIALS,