#!amber DEVICE_EXTENSION VK_KHR_deferred_host_operations 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 raygen1 GLSL #version 460 core #extension GL_EXT_ray_tracing : require layout(location = 0) rayPayloadEXT uint payload; layout(set = 0, binding = 0) uniform accelerationStructureEXT topLevelAS; layout(r32ui, set = 0, binding = 1) uniform uimage2D result; void main() { payload = 1u; traceRayEXT( topLevelAS, gl_RayFlagsNoneEXT, /* rayFlags */ 0xFFu, /* cullMask */ 0, /* sbtRecordOffset */ 0, /* sbtRecordStride */ 0, /* missIndex */ vec3(gl_LaunchIDEXT.x + 0.4, 0.4, 0.0), /* origin */ 0.0, /* Tmin */ vec3(0.0, 0.0, 1.0), /* direction */ 3.5, /* Tmax */ 0 /* payload */); imageStore(result, ivec2(gl_LaunchIDEXT.xy), uvec4(payload, 0u, 0u, 0u)); } END SHADER miss miss1 GLSL #version 460 core #extension GL_EXT_ray_tracing : require layout(location = 0) rayPayloadInEXT uint payload; void main() { payload += 1000; } END SHADER closest_hit closesthit1 GLSL #version 460 core #extension GL_EXT_ray_tracing : require layout(location = 0) rayPayloadInEXT uint payload; void main() { payload += 100; } END SHADER any_hit anyhit1 GLSL #version 460 core #extension GL_EXT_ray_tracing : require layout(location = 0) rayPayloadInEXT uint payload; void main() { payload += 10 * gl_PrimitiveID; } END ACCELERATION_STRUCTURE BOTTOM_LEVEL triangles GEOMETRY TRIANGLES 0.0 0.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 1.0 0.0 2.0 2.0 0.0 2.0 1.0 1.0 2.0 2.0 0.0 3.0 3.0 0.0 3.0 2.0 1.0 3.0 3.0 0.0 4.0 4.0 0.0 4.0 3.0 1.0 4.0 END END ACCELERATION_STRUCTURE TOP_LEVEL tlas1 BOTTOM_LEVEL_INSTANCE triangles END END IMAGE img1 FORMAT R32_UINT DIM_2D WIDTH 4 HEIGHT 1 FILL 0 PIPELINE raytracing my_rtpipeline BIND ACCELERATION_STRUCTURE tlas1 DESCRIPTOR_SET 0 BINDING 0 BIND BUFFER img1 AS storage_image DESCRIPTOR_SET 0 BINDING 1 SHADER_GROUP rgen_group raygen1 SHADER_GROUP miss_group miss1 SHADER_GROUP tri_group anyhit1 closesthit1 SHADER_BINDING_TABLE sbt1 rgen_group END SHADER_BINDING_TABLE sbt2 miss_group END SHADER_BINDING_TABLE sbt3 tri_group END END RUN my_rtpipeline RAYGEN sbt1 MISS sbt2 HIT sbt3 4 1 1 EXPECT img1 IDX 0 EQ 101 111 121 1001