aboutsummaryrefslogtreecommitdiffstats
path: root/shaders/tonemapping.comp
diff options
context:
space:
mode:
Diffstat (limited to 'shaders/tonemapping.comp')
-rw-r--r--shaders/tonemapping.comp30
1 files changed, 24 insertions, 6 deletions
diff --git a/shaders/tonemapping.comp b/shaders/tonemapping.comp
index dde91b8..5613d55 100644
--- a/shaders/tonemapping.comp
+++ b/shaders/tonemapping.comp
@@ -1,12 +1,30 @@
+#extension GL_EXT_buffer_reference : require
+#extension GL_EXT_nonuniform_qualifier : require
+
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
-layout(set = 0, binding = 0, rgba8) uniform writeonly image2D output_image;
-layout(set = 0, binding = 1, rgba8) uniform readonly image2D accumulation_image;
+layout(buffer_reference) readonly buffer scene_metadata {
+ uint[39] unused;
+ uint downscale_factor;
+};
+
+layout(set = 0, binding = 0, rgba32f) uniform image2D images[];
+
+layout(push_constant) uniform constants {
+ scene_metadata scene;
+ uint output_image_index;
+ uint accumulation_image_index;
+} consts;
void main() {
- uint x = gl_GlobalInvocationID.x;
- uint y = gl_GlobalInvocationID.y;
+ uint x = gl_GlobalInvocationID.x * consts.scene.downscale_factor;
+ uint y = gl_GlobalInvocationID.y * consts.scene.downscale_factor;
- vec4 color = imageLoad(accumulation_image, ivec2(x, y));
- imageStore(output_image, ivec2(x, y), sqrt(color));
+ vec4 color = imageLoad(images[nonuniformEXT(consts.accumulation_image_index)], ivec2(x, y));
+ vec4 out_color = sqrt(color);
+ for (uint i = 0; i < consts.scene.downscale_factor; i++) {
+ for (uint j = 0; j < consts.scene.downscale_factor; j++) {
+ imageStore(images[nonuniformEXT(consts.output_image_index)], ivec2(x + i, y + j), out_color);
+ }
+ }
}