#!amber DEVICE_EXTENSION VK_KHR_acceleration_structure DEVICE_EXTENSION VK_KHR_ray_tracing_pipeline DEVICE_EXTENSION VK_KHR_buffer_device_address DEVICE_FEATURE RayTracingPipelineFeaturesKHR.rayTracingPipeline DEVICE_FEATURE AccelerationStructureFeaturesKHR.accelerationStructure DEVICE_FEATURE BufferDeviceAddressFeatures.bufferDeviceAddress SHADER ray_generation raygeneration1 GLSL #version 460 core #extension GL_EXT_ray_tracing : require layout(location = 0) rayPayloadEXT int payload; layout(set = 0, binding = 0) uniform accelerationStructureEXT gScene; void main() { float TMin = 0.1; float TMax = 10; vec3 Origin; vec3 Direction = vec3(0, 0, 1); // Ray origin at -1, 0: front facing opaque first (at z = 1) Origin = vec3(-1, 0, -2); payload = 0; traceRayEXT(gScene, gl_RayFlagsNoneEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0); payload = 1; traceRayEXT(gScene, gl_RayFlagsCullFrontFacingTrianglesEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0); payload = 2; traceRayEXT(gScene, gl_RayFlagsCullOpaqueEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0); Origin = vec3(1, 0, -2); payload = 3; traceRayEXT(gScene, gl_RayFlagsNoneEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0); payload = 4; traceRayEXT(gScene, gl_RayFlagsCullBackFacingTrianglesEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0); payload = 5; traceRayEXT(gScene, gl_RayFlagsCullNoOpaqueEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0); } END SHADER closest_hit closesthit1 GLSL #version 460 core #extension GL_EXT_ray_tracing : require layout(location = 0) rayPayloadInEXT int payload; layout(set = 0, binding = 1, r32f) uniform image1D result; void main() { imageStore(result, payload, vec4(round(gl_HitTEXT), 0, 0, 0)); } END ACCELERATION_STRUCTURE BOTTOM_LEVEL triangle_blas # Front facing opaque triangle at -1, 0, 1 GEOMETRY TRIANGLES FLAGS OPAQUE -1.0 -0.75 1.0 -1.75 0.75 1.0 -0.25 0.75 1.0 END # Back facing triangle at -1, 0, 2 GEOMETRY TRIANGLES -1.0 -0.75 2.0 -0.25 0.75 2.0 -1.75 0.75 2.0 END # Back facing triangle at 1, 0, 1 GEOMETRY TRIANGLES 1.0 -0.75 1.0 1.75 0.75 1.0 0.25 0.75 1.0 END # Front facing opaque triangle at 1, 0, 2 GEOMETRY TRIANGLES FLAGS OPAQUE 1.0 -0.75 2.0 0.25 0.75 2.0 1.75 0.75 2.0 END END ACCELERATION_STRUCTURE TOP_LEVEL triangle_tlas BOTTOM_LEVEL_INSTANCE triangle_blas END END IMAGE outbuf FORMAT R32_SFLOAT DIM_1D WIDTH 6 FILL 0 PIPELINE raytracing my_rtpipeline MAX_RAY_PAYLOAD_SIZE 16 MAX_RAY_HIT_ATTRIBUTE_SIZE 8 MAX_RAY_RECURSION_DEPTH 1 BIND ACCELERATION_STRUCTURE triangle_tlas DESCRIPTOR_SET 0 BINDING 0 BIND BUFFER outbuf AS storage_image DESCRIPTOR_SET 0 BINDING 1 SHADER_GROUP group_rgen raygeneration1 SHADER_GROUP group_hits closesthit1 SHADER_BINDING_TABLE sbt_raygen group_rgen END SHADER_BINDING_TABLE sbt_hit group_hits END END RUN my_rtpipeline RAYGEN sbt_raygen HIT sbt_hit 1 1 1 EXPECT outbuf IDX 0 EQ 3 4 4 3 4 4