From 03fdcb0341d35bb99fccb2e155ee967f932c9961 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Sun, 8 Aug 2021 23:01:44 +0200 Subject: Bindless compute pipelines --- shaders/tonemapping.comp | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'shaders/tonemapping.comp') 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); + } + } } -- cgit v1.3