113 lines
3.0 KiB
Plaintext
113 lines
3.0 KiB
Plaintext
#!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
|