summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/final/shaders/chroma_aberration.wgsl10
-rw-r--r--assets/final/shaders/circle_mask_compute.wgsl10
-rw-r--r--assets/final/shaders/circle_mask_render.wgsl10
-rw-r--r--assets/final/shaders/distort.wgsl10
-rw-r--r--assets/final/shaders/ellipse.wgsl10
-rw-r--r--assets/final/shaders/gaussian_blur.wgsl10
-rw-r--r--assets/final/shaders/main_shader.wgsl10
-rw-r--r--assets/final/shaders/particle_compute.wgsl10
-rw-r--r--assets/final/shaders/particle_render.wgsl10
-rw-r--r--assets/final/shaders/particle_spray_compute.wgsl10
-rw-r--r--assets/final/shaders/passthrough.wgsl10
-rw-r--r--assets/final/shaders/solarize.wgsl10
-rw-r--r--assets/final/shaders/vignette.wgsl12
-rw-r--r--src/gpu/effects/post_process_helper.cc5
-rw-r--r--src/gpu/gpu.cc11
-rw-r--r--src/tests/test_demo_effects.cc3
-rw-r--r--src/tests/test_effect_base.cc3
-rw-r--r--src/tests/test_shader_compilation.cc7
18 files changed, 39 insertions, 122 deletions
diff --git a/assets/final/shaders/chroma_aberration.wgsl b/assets/final/shaders/chroma_aberration.wgsl
index f84a393..6c942b7 100644
--- a/assets/final/shaders/chroma_aberration.wgsl
+++ b/assets/final/shaders/chroma_aberration.wgsl
@@ -1,15 +1,7 @@
@group(0) @binding(0) var smplr: sampler;
@group(0) @binding(1) var txt: texture_2d<f32>;
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
struct ChromaAberrationParams {
offset_scale: f32,
angle: f32,
diff --git a/assets/final/shaders/circle_mask_compute.wgsl b/assets/final/shaders/circle_mask_compute.wgsl
index fefb287..484d3dd 100644
--- a/assets/final/shaders/circle_mask_compute.wgsl
+++ b/assets/final/shaders/circle_mask_compute.wgsl
@@ -1,15 +1,7 @@
// Circle mask compute shader
// Generates a circular mask (1.0 inside, 0.0 outside)
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
struct CircleMaskParams {
radius: f32,
_pad0: f32,
diff --git a/assets/final/shaders/circle_mask_render.wgsl b/assets/final/shaders/circle_mask_render.wgsl
index ce98f9c..cfa002e 100644
--- a/assets/final/shaders/circle_mask_render.wgsl
+++ b/assets/final/shaders/circle_mask_render.wgsl
@@ -4,15 +4,7 @@
@group(0) @binding(0) var mask_tex: texture_2d<f32>;
@group(0) @binding(1) var mask_sampler: sampler;
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
@group(0) @binding(2) var<uniform> uniforms: CommonUniforms;
diff --git a/assets/final/shaders/distort.wgsl b/assets/final/shaders/distort.wgsl
index 4de8441..5d35129 100644
--- a/assets/final/shaders/distort.wgsl
+++ b/assets/final/shaders/distort.wgsl
@@ -1,15 +1,7 @@
@group(0) @binding(0) var smplr: sampler;
@group(0) @binding(1) var txt: texture_2d<f32>;
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
struct DistortParams {
strength: f32,
diff --git a/assets/final/shaders/ellipse.wgsl b/assets/final/shaders/ellipse.wgsl
index 9c6b0d9..05dfcfc 100644
--- a/assets/final/shaders/ellipse.wgsl
+++ b/assets/final/shaders/ellipse.wgsl
@@ -1,12 +1,4 @@
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
@group(0) @binding(0) var<uniform> uniforms: CommonUniforms;
diff --git a/assets/final/shaders/gaussian_blur.wgsl b/assets/final/shaders/gaussian_blur.wgsl
index 2a887a4..02156f7 100644
--- a/assets/final/shaders/gaussian_blur.wgsl
+++ b/assets/final/shaders/gaussian_blur.wgsl
@@ -1,15 +1,7 @@
@group(0) @binding(0) var smplr: sampler;
@group(0) @binding(1) var txt: texture_2d<f32>;
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
struct GaussianBlurParams {
strength: f32,
_pad: f32,
diff --git a/assets/final/shaders/main_shader.wgsl b/assets/final/shaders/main_shader.wgsl
index 7155a6d..ab0278c 100644
--- a/assets/final/shaders/main_shader.wgsl
+++ b/assets/final/shaders/main_shader.wgsl
@@ -1,12 +1,4 @@
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
@group(0) @binding(0) var<uniform> uniforms: CommonUniforms;
diff --git a/assets/final/shaders/particle_compute.wgsl b/assets/final/shaders/particle_compute.wgsl
index 38a95e1..ae513c8 100644
--- a/assets/final/shaders/particle_compute.wgsl
+++ b/assets/final/shaders/particle_compute.wgsl
@@ -5,15 +5,7 @@ struct Particle {
color: vec4<f32>,
};
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
@group(0) @binding(0) var<storage, read_write> particles: array<Particle>;
@group(0) @binding(1) var<uniform> uniforms: CommonUniforms;
diff --git a/assets/final/shaders/particle_render.wgsl b/assets/final/shaders/particle_render.wgsl
index 9030a3a..6a2b636 100644
--- a/assets/final/shaders/particle_render.wgsl
+++ b/assets/final/shaders/particle_render.wgsl
@@ -5,15 +5,7 @@ struct Particle {
color: vec4<f32>,
};
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
@group(0) @binding(0) var<storage, read> particles: array<Particle>;
@group(0) @binding(1) var<uniform> uniforms: CommonUniforms;
diff --git a/assets/final/shaders/particle_spray_compute.wgsl b/assets/final/shaders/particle_spray_compute.wgsl
index b165971..a4041f2 100644
--- a/assets/final/shaders/particle_spray_compute.wgsl
+++ b/assets/final/shaders/particle_spray_compute.wgsl
@@ -5,15 +5,7 @@ struct Particle {
color: vec4<f32>,
};
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
@group(0) @binding(0) var<storage, read_write> particles: array<Particle>;
@group(0) @binding(1) var<uniform> uniforms: CommonUniforms;
diff --git a/assets/final/shaders/passthrough.wgsl b/assets/final/shaders/passthrough.wgsl
index dfdacf4..266e231 100644
--- a/assets/final/shaders/passthrough.wgsl
+++ b/assets/final/shaders/passthrough.wgsl
@@ -1,15 +1,7 @@
@group(0) @binding(0) var smplr: sampler;
@group(0) @binding(1) var txt: texture_2d<f32>;
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
@group(0) @binding(2) var<uniform> uniforms: CommonUniforms;
@vertex fn vs_main(@builtin(vertex_index) i: u32) -> @builtin(position) vec4<f32> {
diff --git a/assets/final/shaders/solarize.wgsl b/assets/final/shaders/solarize.wgsl
index 645fb9a..de15dfc 100644
--- a/assets/final/shaders/solarize.wgsl
+++ b/assets/final/shaders/solarize.wgsl
@@ -1,15 +1,7 @@
@group(0) @binding(0) var smplr: sampler;
@group(0) @binding(1) var txt: texture_2d<f32>;
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};
+#include "common_uniforms"
@group(0) @binding(2) var<uniform> uniforms: CommonUniforms;
diff --git a/assets/final/shaders/vignette.wgsl b/assets/final/shaders/vignette.wgsl
index 93e8a8c..b129883 100644
--- a/assets/final/shaders/vignette.wgsl
+++ b/assets/final/shaders/vignette.wgsl
@@ -1,14 +1,8 @@
@group(0) @binding(0) var input_sampler: sampler;
@group(0) @binding(1) var input_tex: texture_2d<f32>;
-struct CommonUniforms {
- resolution: vec2<f32>,
- _pad0: f32,
- _pad1: f32,
- aspect_ratio: f32,
- time: f32,
- beat: f32,
- audio_intensity: f32,
-};struct VignetteParams {
+#include "common_uniforms"
+
+struct VignetteParams {
radius: f32,
softness: f32,
};
diff --git a/src/gpu/effects/post_process_helper.cc b/src/gpu/effects/post_process_helper.cc
index bc66448..e99467f 100644
--- a/src/gpu/effects/post_process_helper.cc
+++ b/src/gpu/effects/post_process_helper.cc
@@ -4,16 +4,19 @@
#include "post_process_helper.h"
#include "../demo_effects.h"
#include "gpu/gpu.h"
+#include "gpu/effects/shader_composer.h"
#include <cstring>
// Helper to create a standard post-processing pipeline
WGPURenderPipeline create_post_process_pipeline(WGPUDevice device,
WGPUTextureFormat format,
const char* shader_code) {
+ std::string composed_shader = ShaderComposer::Get().Compose({}, shader_code);
+
WGPUShaderModuleDescriptor shader_desc = {};
WGPUShaderSourceWGSL wgsl_src = {};
wgsl_src.chain.sType = WGPUSType_ShaderSourceWGSL;
- wgsl_src.code = str_view(shader_code);
+ wgsl_src.code = str_view(composed_shader.c_str());
shader_desc.nextInChain = &wgsl_src.chain;
WGPUShaderModule shader_module =
wgpuDeviceCreateShaderModule(device, &shader_desc);
diff --git a/src/gpu/gpu.cc b/src/gpu/gpu.cc
index fde241d..e89a2f0 100644
--- a/src/gpu/gpu.cc
+++ b/src/gpu/gpu.cc
@@ -5,6 +5,7 @@
#include "gpu.h"
#include "effect.h"
#include "gpu/effects/shaders.h"
+#include "gpu/effects/shader_composer.h"
#include "platform/platform.h"
#include <cassert>
@@ -55,10 +56,13 @@ RenderPass gpu_create_render_pass(WGPUDevice device, WGPUTextureFormat format,
ResourceBinding* bindings, int num_bindings) {
RenderPass pass = {};
+ // Compose shader to resolve #include directives
+ std::string composed_shader = ShaderComposer::Get().Compose({}, shader_code);
+
// Create Shader Module
WGPUShaderSourceWGSL wgsl_src = {};
wgsl_src.chain.sType = WGPUSType_ShaderSourceWGSL;
- wgsl_src.code = str_view(shader_code);
+ wgsl_src.code = str_view(composed_shader.c_str());
WGPUShaderModuleDescriptor shader_desc = {};
shader_desc.nextInChain = &wgsl_src.chain;
WGPUShaderModule shader_module =
@@ -156,9 +160,12 @@ ComputePass gpu_create_compute_pass(WGPUDevice device, const char* shader_code,
int num_bindings) {
ComputePass pass = {};
+ // Compose shader to resolve #include directives
+ std::string composed_shader = ShaderComposer::Get().Compose({}, shader_code);
+
WGPUShaderSourceWGSL wgsl_src = {};
wgsl_src.chain.sType = WGPUSType_ShaderSourceWGSL;
- wgsl_src.code = str_view(shader_code);
+ wgsl_src.code = str_view(composed_shader.c_str());
WGPUShaderModuleDescriptor shader_desc = {};
shader_desc.nextInChain = &wgsl_src.chain;
WGPUShaderModule shader_module =
diff --git a/src/tests/test_demo_effects.cc b/src/tests/test_demo_effects.cc
index d0163c2..0d2b09a 100644
--- a/src/tests/test_demo_effects.cc
+++ b/src/tests/test_demo_effects.cc
@@ -197,6 +197,9 @@ static void test_effect_type_classification() {
int main() {
fprintf(stdout, "=== Demo Effects Tests ===\n");
+ extern void InitShaderComposer();
+ InitShaderComposer();
+
test_post_process_effects();
test_scene_effects();
test_effect_type_classification();
diff --git a/src/tests/test_effect_base.cc b/src/tests/test_effect_base.cc
index e280e05..612e9da 100644
--- a/src/tests/test_effect_base.cc
+++ b/src/tests/test_effect_base.cc
@@ -249,6 +249,9 @@ static void test_pixel_helpers() {
int main() {
fprintf(stdout, "=== Effect Base Tests ===\n");
+ extern void InitShaderComposer();
+ InitShaderComposer();
+
test_webgpu_fixture();
test_offscreen_render_target();
test_effect_construction();
diff --git a/src/tests/test_shader_compilation.cc b/src/tests/test_shader_compilation.cc
index e2c0adc..a322e8a 100644
--- a/src/tests/test_shader_compilation.cc
+++ b/src/tests/test_shader_compilation.cc
@@ -115,16 +115,19 @@ static bool test_shader_compilation(const char* name, const char* shader_code) {
return true; // Not a failure, just skipped
}
+ // Compose shader to resolve #include directives
+ std::string composed_shader = ShaderComposer::Get().Compose({}, shader_code);
+
#if defined(DEMO_CROSS_COMPILE_WIN32)
WGPUShaderModuleWGSLDescriptor wgsl_desc = {};
wgsl_desc.chain.sType = WGPUSType_ShaderModuleWGSLDescriptor;
- wgsl_desc.code = shader_code;
+ wgsl_desc.code = composed_shader.c_str();
WGPUShaderModuleDescriptor shader_desc = {};
shader_desc.nextInChain = (const WGPUChainedStruct*)&wgsl_desc.chain;
#else
WGPUShaderSourceWGSL wgsl_desc = {};
wgsl_desc.chain.sType = WGPUSType_ShaderSourceWGSL;
- wgsl_desc.code = str_view(shader_code);
+ wgsl_desc.code = str_view(composed_shader.c_str());
WGPUShaderModuleDescriptor shader_desc = {};
shader_desc.nextInChain = (const WGPUChainedStruct*)&wgsl_desc.chain;
#endif