#!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 r1 GLSL #version 460 core #extension GL_EXT_ray_tracing : require layout(set = 0, binding = 0, r32i) uniform iimage2D result; void main() { ivec2 p = ivec2(gl_LaunchIDEXT); ivec3 v = ivec3(gl_LaunchIDEXT); int r = v.x + 256 * (v.y + 256 * v.z) + 1; ivec4 c = ivec4(r,0,0,1); imageStore(result, p, c); } END SHADER intersection i1 GLSL #version 460 core #extension GL_EXT_ray_tracing : require hitAttributeEXT vec3 hitAttribute; void main() { reportIntersectionEXT(0.95f, 0x7Eu); } END SHADER miss m1 GLSL #version 460 core #extension GL_EXT_ray_tracing : require layout(location = 0) rayPayloadInEXT uvec4 hitValue; void main() { hitValue = uvec4(1,0,0,1); } END SHADER closest_hit c1 GLSL #version 460 core #extension GL_EXT_ray_tracing : require hitAttributeEXT vec3 attribs; layout(location = 0) rayPayloadInEXT vec3 hitValue; void main() { } END SHADER any_hit a1 GLSL #version 460 core #extension GL_EXT_ray_tracing : require hitAttributeEXT vec3 attribs; layout(location = 0) rayPayloadInEXT vec3 hitValue; void main() { } END ACCELERATION_STRUCTURE BOTTOM_LEVEL blas1 GEOMETRY AABBS 0.0 0.0 -0.1 1.0 1.0 0.1 END END ACCELERATION_STRUCTURE BOTTOM_LEVEL blas2 GEOMETRY TRIANGLES -1.0 1.0 0.1 1.0 1.0 0.1 -1.0 -1.0 0.1 1.0 -1.0 0.1 -1.0 -1.0 0.1 1.0 1.0 0.1 END END ACCELERATION_STRUCTURE TOP_LEVEL tlas1 BOTTOM_LEVEL_INSTANCE blas2 END END IMAGE img1 FORMAT R32_SINT DIM_2D WIDTH 2 HEIGHT 2 FILL 0 PIPELINE raytracing my_rtpipeline BIND BUFFER img1 AS storage_image DESCRIPTOR_SET 0 BINDING 0 BIND ACCELERATION_STRUCTURE tlas1 DESCRIPTOR_SET 0 BINDING 1 SHADER_GROUP g1 r1 SHADER_GROUP g2 m1 SHADER_GROUP g3 a1 c1 i1 SHADER_BINDING_TABLE raygen_sbt g1 END SHADER_BINDING_TABLE miss_sbt g2 END SHADER_BINDING_TABLE hit_sbt g3 END END RUN my_rtpipeline RAYGEN raygen_sbt 2 2 1 EXPECT img1 IDX 0 EQ 1 2 257 258 #EXPECT img1 IDX 0 EQ 1