49 lines
2.1 KiB
Plaintext
49 lines
2.1 KiB
Plaintext
#version 460 core
|
|
#extension GL_GOOGLE_include_directive : require
|
|
#extension GL_EXT_ray_tracing: require
|
|
|
|
#include "ray_primary_common.glsl"
|
|
|
|
layout(set = 0, binding = 1) uniform accelerationStructureEXT tlas;
|
|
layout(set = 0, binding = 2) uniform UBO { UniformBuffer ubo; } ubo;
|
|
|
|
layout(set = 0, binding = 10, rgba8) uniform writeonly image2D out_base_color_a;
|
|
layout(set = 0, binding = 11, rgba32f) uniform writeonly image2D out_position_t;
|
|
layout(set = 0, binding = 12, rgba16f) uniform writeonly image2D out_normals_gs;
|
|
layout(set = 0, binding = 13, rgba8) uniform writeonly image2D out_material_rmxx;
|
|
layout(set = 0, binding = 14, rgba16f) uniform writeonly image2D out_emissive;
|
|
layout(set = 0, binding = 15, rgba32f) uniform writeonly image2D out_geometry_prev_position;
|
|
|
|
layout(location = PAYLOAD_LOCATION_PRIMARY) rayPayloadEXT RayPayloadPrimary payload;
|
|
|
|
void main() {
|
|
const vec2 uv = (gl_LaunchIDEXT.xy + .5) / gl_LaunchSizeEXT.xy * 2. - 1.;
|
|
|
|
// FIXME start on a near plane
|
|
const vec3 origin = (ubo.ubo.inv_view * vec4(0, 0, 0, 1)).xyz;
|
|
const vec4 target = ubo.ubo.inv_proj * vec4(uv.x, uv.y, 1, 1);
|
|
const vec3 direction = normalize((ubo.ubo.inv_view * vec4(target.xyz, 0)).xyz);
|
|
|
|
payload.hit_t = vec4(0.);
|
|
payload.base_color_a = vec4(0.);
|
|
payload.normals_gs = vec4(0.);
|
|
payload.material_rmxx = vec4(0.);
|
|
payload.emissive = vec4(0.);
|
|
|
|
const uint flags = gl_RayFlagsCullFrontFacingTrianglesEXT;
|
|
const uint sbt_offset = 0;
|
|
const uint sbt_stride = 0;
|
|
const float L = 10000.; // TODO Why 10k?
|
|
traceRayEXT(tlas, flags, GEOMETRY_BIT_OPAQUE, // | GEOMETRY_BIT_REFRACTIVE,
|
|
sbt_offset, sbt_stride, SHADER_OFFSET_MISS_REGULAR,
|
|
origin, 0., direction, L,
|
|
PAYLOAD_LOCATION_PRIMARY);
|
|
|
|
imageStore(out_position_t, ivec2(gl_LaunchIDEXT.xy), payload.hit_t);
|
|
imageStore(out_base_color_a, ivec2(gl_LaunchIDEXT.xy), payload.base_color_a);
|
|
imageStore(out_normals_gs, ivec2(gl_LaunchIDEXT.xy), payload.normals_gs);
|
|
imageStore(out_material_rmxx, ivec2(gl_LaunchIDEXT.xy), payload.material_rmxx);
|
|
imageStore(out_emissive, ivec2(gl_LaunchIDEXT.xy), payload.emissive);
|
|
imageStore(out_geometry_prev_position, ivec2(gl_LaunchIDEXT.xy), payload.prev_pos_t);
|
|
}
|