aboutsummaryrefslogtreecommitdiffstats
path: root/shaders/compute.comp
diff options
context:
space:
mode:
Diffstat (limited to 'shaders/compute.comp')
-rw-r--r--shaders/compute.comp22
1 files changed, 12 insertions, 10 deletions
diff --git a/shaders/compute.comp b/shaders/compute.comp
index 1e903b0..01a0f71 100644
--- a/shaders/compute.comp
+++ b/shaders/compute.comp
@@ -62,9 +62,12 @@ layout(set = 0, binding = 0) buffer Inputs {
uint samples_per_pixel;
uint width;
uint height;
+
+ uint sample_index;
+ uint[3] padding;
};
-layout(set = 0, binding = 1, rgba8) uniform writeonly image2D output_image;
+layout(set = 0, binding = 1, rgba8) uniform image2D output_image;
vec3 at(ray r, float t) {
return r.origin + r.direction * t;
@@ -214,16 +217,15 @@ void main() {
vec4 out_color = vec4(0.0);
- for (uint sample_index = 0; sample_index < samples_per_pixel; sample_index++) {
- vec2 jittered_uvs = uv + vec2(random_disk[sample_index].x / (width - 1), random_disk[sample_index].y / (height - 1));
- vec2 lens_disk = random_disk[sample_index] * cam.lens_radius;
- vec3 offset = lens_disk.x * cam.right.xyz + lens_disk.y * cam.up.xyz;
- vec4 proj_plane_pos = cam.first_pixel + jittered_uvs.x * cam.horizontal + jittered_uvs.y * cam.vertical;
- ray r = ray(cam.position.xyz + offset, proj_plane_pos.xyz - cam.position.xyz - offset);
+ vec2 jittered_uvs = uv + vec2(random_disk[sample_index].x / (width - 1), random_disk[sample_index].y / (height - 1));
+ vec2 lens_disk = random_disk[sample_index] * cam.lens_radius;
+ vec3 offset = lens_disk.x * cam.right.xyz + lens_disk.y * cam.up.xyz;
+ vec4 proj_plane_pos = cam.first_pixel + jittered_uvs.x * cam.horizontal + jittered_uvs.y * cam.vertical;
+ ray r = ray(cam.position.xyz + offset, proj_plane_pos.xyz - cam.position.xyz - offset);
- out_color += ray_color(r, sample_index);
- }
+ out_color += ray_color(r, sample_index);
float spp_scale = (1.0 / samples_per_pixel);
- imageStore(output_image, ivec2(x, y), sqrt(out_color * spp_scale));
+ vec4 acc_color = imageLoad(output_image, ivec2(x, y));
+ imageStore(output_image, ivec2(x, y), acc_color + (out_color * spp_scale));
}