From bd939acdf750181ef0e1a612b445da4c15077c85 Mon Sep 17 00:00:00 2001 From: skal Date: Sat, 7 Feb 2026 17:04:56 +0100 Subject: refactor: Bundle GPU context into GpuContext struct - Created GpuContext struct {device, queue, format} - Updated Effect/PostProcessEffect to take const GpuContext& - Updated all 19 effect implementations - Updated MainSequence.init() and LoadTimeline() signatures - Updated generated timeline files - Updated all test files - Added gpu_get_context() accessor and fixture.ctx() helper Fixes test_mesh.cc compilation error from g_device/g_queue/g_format conflicts. All targets build successfully. --- src/tests/test_demo_effects.cc | 52 ++++++++++++++++------------------------- src/tests/test_effect_base.cc | 14 +++++------ src/tests/test_sequence.cc | 19 +++++++-------- src/tests/webgpu_test_fixture.h | 2 ++ 4 files changed, 38 insertions(+), 49 deletions(-) (limited to 'src/tests') diff --git a/src/tests/test_demo_effects.cc b/src/tests/test_demo_effects.cc index 3292c9c..ec1d68c 100644 --- a/src/tests/test_demo_effects.cc +++ b/src/tests/test_demo_effects.cc @@ -79,34 +79,28 @@ static void test_post_process_effects() { } MainSequence main_seq; - main_seq.init_test(fixture.device(), fixture.queue(), fixture.format()); + main_seq.init_test(fixture.ctx()); // Test each post-process effect std::vector>> effects = { {"FlashEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, {"PassthroughEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, {"GaussianBlurEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, {"ChromaAberrationEffect", std::make_shared( - fixture.device(), fixture.queue(), fixture.format())}, + fixture.ctx())}, {"DistortEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, {"SolarizeEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, {"FadeEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, {"ThemeModulationEffect", std::make_shared( - fixture.device(), fixture.queue(), fixture.format())}, + fixture.ctx())}, }; int passed = 0; @@ -146,28 +140,22 @@ static void test_scene_effects() { } MainSequence main_seq; - main_seq.init_test(fixture.device(), fixture.queue(), fixture.format()); + main_seq.init_test(fixture.ctx()); // Test each scene effect std::vector>> effects = { {"HeptagonEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, {"ParticlesEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, {"ParticleSprayEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, {"MovingEllipseEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, {"FlashCubeEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, {"Hybrid3DEffect", - std::make_shared(fixture.device(), fixture.queue(), - fixture.format())}, + std::make_shared(fixture.ctx())}, }; int passed = 0; @@ -215,20 +203,20 @@ static void test_effect_type_classification() { // Post-process effects should return true auto flash = std::make_shared( - fixture.device(), fixture.queue(), fixture.format()); + fixture.ctx()); assert(flash->is_post_process() && "FlashEffect should be post-process"); auto blur = std::make_shared( - fixture.device(), fixture.queue(), fixture.format()); + fixture.ctx()); assert(blur->is_post_process() && "GaussianBlurEffect should be post-process"); // Scene effects should return false auto heptagon = std::make_shared( - fixture.device(), fixture.queue(), fixture.format()); + fixture.ctx()); assert(!heptagon->is_post_process() && "HeptagonEffect should NOT be post-process"); auto particles = std::make_shared( - fixture.device(), fixture.queue(), fixture.format()); + fixture.ctx()); assert(!particles->is_post_process() && "ParticlesEffect should NOT be post-process"); diff --git a/src/tests/test_effect_base.cc b/src/tests/test_effect_base.cc index bc837be..8180535 100644 --- a/src/tests/test_effect_base.cc +++ b/src/tests/test_effect_base.cc @@ -73,7 +73,7 @@ static void test_effect_construction() { // Create FlashEffect (simple post-process effect) auto effect = std::make_shared( - fixture.device(), fixture.queue(), fixture.format()); + fixture.ctx()); assert(!effect->is_initialized && "Effect should not be initialized yet"); @@ -92,11 +92,11 @@ static void test_effect_initialization() { // Create MainSequence (use init_test for test environment) MainSequence main_seq; - main_seq.init_test(fixture.device(), fixture.queue(), fixture.format()); + main_seq.init_test(fixture.ctx()); // Create FlashEffect auto effect = std::make_shared( - fixture.device(), fixture.queue(), fixture.format()); + fixture.ctx()); assert(!effect->is_initialized && "Effect should not be initialized yet"); @@ -123,14 +123,14 @@ static void test_sequence_add_effect() { } MainSequence main_seq; - main_seq.init_test(fixture.device(), fixture.queue(), fixture.format()); + main_seq.init_test(fixture.ctx()); // Create sequence auto seq = std::make_shared(); // Create effect auto effect = std::make_shared( - fixture.device(), fixture.queue(), fixture.format()); + fixture.ctx()); assert(!effect->is_initialized && "Effect should not be initialized before Sequence::init()"); @@ -156,11 +156,11 @@ static void test_sequence_activation() { } MainSequence main_seq; - main_seq.init_test(fixture.device(), fixture.queue(), fixture.format()); + main_seq.init_test(fixture.ctx()); auto seq = std::make_shared(); auto effect = std::make_shared( - fixture.device(), fixture.queue(), fixture.format()); + fixture.ctx()); // Effect active from 5.0 to 10.0 seconds seq->add_effect(effect, 5.0f, 10.0f, 0); diff --git a/src/tests/test_sequence.cc b/src/tests/test_sequence.cc index 788e0b1..e00e606 100644 --- a/src/tests/test_sequence.cc +++ b/src/tests/test_sequence.cc @@ -12,6 +12,7 @@ static WGPUDevice dummy_device = (WGPUDevice)1; static WGPUQueue dummy_queue = (WGPUQueue)1; static WGPUTextureFormat dummy_format = (WGPUTextureFormat)1; +static const GpuContext dummy_ctx = {dummy_device, dummy_queue, dummy_format}; static WGPUSurface dummy_surface = (WGPUSurface)1; static WGPUCommandEncoder dummy_encoder = (WGPUCommandEncoder)1; static WGPURenderPassEncoder dummy_render_pass_encoder = @@ -26,8 +27,8 @@ class DummyEffect : public Effect { int end_calls = 0; bool is_pp = false; - DummyEffect(WGPUDevice device, WGPUQueue queue, bool post_process = false) - : Effect(device, queue), is_pp(post_process) { + DummyEffect(const GpuContext& ctx, bool post_process = false) + : Effect(ctx), is_pp(post_process) { } void init(MainSequence* demo) override { @@ -69,10 +70,8 @@ class DummyPostProcessEffect : public PostProcessEffect { int render_calls = 0; int update_bind_group_calls = 0; - DummyPostProcessEffect(WGPUDevice device, WGPUQueue queue, - WGPUTextureFormat format) - : PostProcessEffect(device, queue) { - (void)format; + DummyPostProcessEffect(const GpuContext& ctx) + : PostProcessEffect(ctx) { } void init(MainSequence* demo) override { @@ -99,9 +98,9 @@ class DummyPostProcessEffect : public PostProcessEffect { void test_effect_lifecycle() { printf(" test_effect_lifecycle...\n"); MainSequence main_seq; - main_seq.init_test(dummy_device, dummy_queue, dummy_format); + main_seq.init_test(dummy_ctx); - auto effect1 = std::make_shared(dummy_device, dummy_queue); + auto effect1 = std::make_shared(dummy_ctx); auto seq1 = std::make_shared(); seq1->add_effect(effect1, 1.0f, 3.0f); main_seq.add_sequence(seq1, 0.0f, 0); @@ -145,9 +144,9 @@ void test_simulate_until() { #if !defined(STRIP_ALL) printf(" test_simulate_until...\n"); MainSequence main_seq; - main_seq.init_test(dummy_device, dummy_queue, dummy_format); + main_seq.init_test(dummy_ctx); - auto effect1 = std::make_shared(dummy_device, dummy_queue); + auto effect1 = std::make_shared(dummy_ctx); auto seq1 = std::make_shared(); seq1->add_effect(effect1, 1.0f, 3.0f); main_seq.add_sequence(seq1, 0.0f, 0); diff --git a/src/tests/webgpu_test_fixture.h b/src/tests/webgpu_test_fixture.h index 2c700a4..fd08276 100644 --- a/src/tests/webgpu_test_fixture.h +++ b/src/tests/webgpu_test_fixture.h @@ -4,6 +4,7 @@ #pragma once +#include "gpu/gpu.h" #include "platform/platform.h" // Shared test fixture for WebGPU tests @@ -25,6 +26,7 @@ class WebGPUTestFixture { WGPUDevice device() const { return device_; } WGPUQueue queue() const { return queue_; } WGPUTextureFormat format() const { return WGPUTextureFormat_BGRA8Unorm; } + GpuContext ctx() const { return {device_, queue_, format()}; } // Check if fixture is ready bool is_initialized() const { return device_ != nullptr; } -- cgit v1.2.3