From e50db1721f67a6c1b565b0ac151ba32fcae21cbf Mon Sep 17 00:00:00 2001 From: skal Date: Mon, 9 Feb 2026 10:34:01 +0100 Subject: fix: Resolve WebGPU uniform buffer alignment issues (Task #74) Fixed multiple WGSL/C++ struct alignment mismatches causing validation errors: Padding fixes: - fade_effect.cc: Changed EffectParams padding from vec3 to _pad0/1/2 - theme_modulation_effect.cc: Same padding fix for EffectParams - Root cause: WGSL vec3 has 16-byte alignment, creating 32-byte structs ODR violation fix: - demo_effects.h: Added includes for fade_effect.h, theme_modulation_effect.h - Removed incomplete forward declarations (88 bytes) conflicting with complete definitions (96 bytes), causing heap buffer overflow in make_shared Member shadowing cleanup: - Renamed Effect::uniforms_ shadowing members to descriptive names: - FadeEffect: uniforms_ -> common_uniforms_ - FlashEffect: uniforms_ -> flash_uniforms_ - ThemeModulationEffect: uniforms_ -> common_uniforms_ Results: - demo64k runs without crashes - 33/33 tests passing (100%) - Added Task #75: WGSL uniform validation tool handoff(Claude): Uniform buffer alignment debugged and fixed --- src/gpu/demo_effects.h | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) (limited to 'src/gpu/demo_effects.h') diff --git a/src/gpu/demo_effects.h b/src/gpu/demo_effects.h index 7ad8261..54bf657 100644 --- a/src/gpu/demo_effects.h +++ b/src/gpu/demo_effects.h @@ -7,10 +7,12 @@ #include "3d/scene.h" #include "effect.h" #include "gpu/effects/circle_mask_effect.h" +#include "gpu/effects/fade_effect.h" // FadeEffect with full definition #include "gpu/effects/flash_effect.h" // FlashEffect with params support #include "gpu/effects/post_process_helper.h" #include "gpu/effects/rotating_cube_effect.h" #include "gpu/effects/shaders.h" +#include "gpu/effects/theme_modulation_effect.h" // ThemeModulationEffect with full definition #include "gpu/gpu.h" #include "gpu/texture_manager.h" #include "gpu/uniform_helper.h" @@ -197,22 +199,8 @@ class FlashCubeEffect : public Effect { float flash_intensity_; }; -class ThemeModulationEffect : public PostProcessEffect { - public: - ThemeModulationEffect(const GpuContext& ctx); - void render(WGPURenderPassEncoder pass, float time, float beat, - float intensity, float aspect_ratio) override; - void update_bind_group(WGPUTextureView input_view) override; -}; - -class FadeEffect : public PostProcessEffect { - public: - FadeEffect(const GpuContext& ctx); - void render(WGPURenderPassEncoder pass, float time, float beat, - float intensity, float aspect_ratio) override; - void update_bind_group(WGPUTextureView input_view) override; -}; - +// ThemeModulationEffect now defined in gpu/effects/theme_modulation_effect.h (included above) +// FadeEffect now defined in gpu/effects/fade_effect.h (included above) // FlashEffect now defined in gpu/effects/flash_effect.h (included above) // Auto-generated functions -- cgit v1.2.3