This commit is contained in:
2026-05-06 23:44:13 +02:00
parent a5f787d80f
commit fd7038b853
1574 changed files with 365439 additions and 0 deletions
+111
View File
@@ -0,0 +1,111 @@
#!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(push_constant) uniform block1 {
uint width;
};
layout(location = 0) rayPayloadEXT float payload;
layout(set = 0, binding = 0) uniform accelerationStructureEXT gScene;
layout(set = 0, binding = 1, r32f) uniform image1D result;
// Launch a set of rays 0.0...1.0 in screen space
void main()
{
uvec2 dims = gl_LaunchSizeEXT.xy;
uvec2 index = gl_LaunchIDEXT.xy;
payload = -1.0;
// Screen position for the ray
vec2 fragCoord = ((index.xy + vec2(0.5f)) / dims) * 2.0f - 1.0f;
// Should show part of the triangle. Trianlge should be centered at 0, 0, 1.0s
float TMin = 1.0e-4f;
float TMax = 1.0e+38f;
vec3 Origin = vec3(fragCoord.x, fragCoord.y, 0.0);
vec3 Direction = vec3(0, 0, 1);
traceRayEXT(gScene, gl_RayFlagsNoneEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0);
imageStore(result, int(index.y * width + index.x), vec4(payload, 0, 0, 0));
}
END
SHADER miss miss1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) rayPayloadInEXT float payload;
void main() {
payload = 0.0; // Miss is 0.0
}
END
SHADER closest_hit closesthit1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
hitAttributeEXT vec2 barycentrics;
layout(location = 0) rayPayloadInEXT float payload;
void main()
{
// Hit is 1.0
// First two digits of the x barycentrics
payload = round(barycentrics.x * 100);
}
END
ACCELERATION_STRUCTURE BOTTOM_LEVEL triangle_blas
GEOMETRY TRIANGLES
0.0 -0.75 1.0
-0.75 0.75 1.0
0.75 0.75 1.0
END
END
ACCELERATION_STRUCTURE TOP_LEVEL triangle_tlas
BOTTOM_LEVEL_INSTANCE triangle_blas END
END
# Buffer to hold output
IMAGE outbuf FORMAT R32_SFLOAT DIM_1D WIDTH 64 FILL 0
BUFFER push_const_buf DATA_TYPE uint32 DATA 8 END
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
BIND BUFFER push_const_buf AS push_constant
SHADER_GROUP group_rgen raygeneration1
SHADER_GROUP group_miss1 miss1
SHADER_GROUP group_hits closesthit1
# Build shader tables
SHADER_BINDING_TABLE sbt_raygen
group_rgen
END
SHADER_BINDING_TABLE sbt_miss
group_miss1
END
SHADER_BINDING_TABLE sbt_hit
group_hits
END
END
RUN my_rtpipeline RAYGEN sbt_raygen MISS sbt_miss HIT sbt_hit 8 8 1
EXPECT outbuf IDX 0 TOLERANCE 1 EQ 0 0 0 0 0 0 0 0
EXPECT outbuf IDX 32 TOLERANCE 1 EQ 0 0 0 0 0 0 0 0
EXPECT outbuf IDX 64 TOLERANCE 1 EQ 0 0 0 21 4 0 0 0
EXPECT outbuf IDX 96 TOLERANCE 1 EQ 0 0 0 29 12 0 0 0
EXPECT outbuf IDX 128 TOLERANCE 1 EQ 0 0 54 38 21 4 0 0
EXPECT outbuf IDX 160 TOLERANCE 1 EQ 0 0 62 46 29 12 0 0
EXPECT outbuf IDX 192 TOLERANCE 1 EQ 0 88 71 54 38 21 4 0
EXPECT outbuf IDX 224 TOLERANCE 1 EQ 0 0 0 0 0 0 0 0
+110
View File
@@ -0,0 +1,110 @@
#!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
+202
View File
@@ -0,0 +1,202 @@
#!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 raygen1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) rayPayloadEXT vec3 hitValue;
layout(set = 0, binding = 0) uniform accelerationStructureEXT topLevelAS;
void main()
{
traceRayEXT(topLevelAS, 0u, 0xFFu, 0, 0, 0, vec3(0.5, 0.5, 0.0), 0.0, vec3(0.0, 0.0, -1.0), 9.0, 0);
}
END
SHADER ray_generation raygen2 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) rayPayloadEXT vec3 hitValue;
layout(set = 0, binding = 0) uniform accelerationStructureEXT topLevelAS;
void main()
{
traceRayEXT(topLevelAS, 0u, 0xFFu, 0, 0, 0, vec3(0.5, 0.5, 0.0), 0.0, vec3(0.0, 0.0, -1.0), 9.0, 0);
}
END
SHADER miss miss1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) rayPayloadInEXT vec3 hitValue;
void main()
{
hitValue = vec3(1,0,0);
}
END
SHADER miss miss2 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) rayPayloadInEXT vec3 hitValue;
void main()
{
hitValue = vec3(1,0,0);
}
END
SHADER closest_hit closesthit1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
hitAttributeEXT vec3 attribs;
layout(location = 0) rayPayloadInEXT vec3 hitValue;
void main()
{
}
END
SHADER closest_hit closesthit2 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 anyhit1 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 anyhit2 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
hitAttributeEXT vec3 attribs;
layout(location = 0) rayPayloadInEXT vec3 hitValue;
void main()
{
}
END
SHADER intersection intersection1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
hitAttributeEXT vec3 hitAttribute;
void main()
{
reportIntersectionEXT(0.95f, 0x7Eu);
}
END
SHADER intersection intersection2 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
hitAttributeEXT vec3 hitAttribute;
void main()
{
reportIntersectionEXT(0.95f, 0x7Eu);
}
END
SHADER callable call1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) callableDataInEXT float dummy;
void main()
{
}
END
SHADER callable call2 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) callableDataInEXT float dummy;
void main()
{
}
END
ACCELERATION_STRUCTURE BOTTOM_LEVEL triangles
GEOMETRY TRIANGLES
0.0 -0.75 1.0
-0.75 0.75 1.0
0.75 0.75 1.0
END
GEOMETRY TRIANGLES
0.0 -0.75 1.0
-0.75 0.75 1.0
0.75 0.75 1.0
END
END
ACCELERATION_STRUCTURE BOTTOM_LEVEL aabbs
GEOMETRY AABBS
-0.5 -0.75 -1.0 0.50 0.75 1.0
-0.33 -0.75 -1.0 0.33 0.75 1.0
END
GEOMETRY AABBS
-1.50 -1.75 -1.0 1.50 1.75 1.0
-2.33 -2.75 -2.0 2.33 2.75 2.0
-3.50 -3.75 -3.0 3.50 3.75 3.0
END
END
ACCELERATION_STRUCTURE TOP_LEVEL tlas1
BOTTOM_LEVEL_INSTANCE triangles
END
BOTTOM_LEVEL_INSTANCE triangles
INDEX 0
OFFSET 1
FLAGS TRIANGLE_FACING_CULL_DISABLE TRIANGLE_FLIP_FACING FORCE_OPAQUE FORCE_OPACITY_MICROMAP_2_STATE
TRANSFORM
1 0 0 0.5
0 1 0 0.5
0 0 1 0.3
END
END
BOTTOM_LEVEL_INSTANCE aabbs
INDEX 0
OFFSET 1
MASK 0x0F
FLAGS
FORCE_NO_OPAQUE
DISABLE_OPACITY_MICROMAPS
1
END
END
END
PIPELINE raytracing my_rtpipeline
BIND ACCELERATION_STRUCTURE tlas1 DESCRIPTOR_SET 0 BINDING 0
SHADER_GROUP g1 raygen1
SHADER_GROUP g2 miss1
SHADER_GROUP g3 anyhit1 closesthit1 intersection1
SHADER_GROUP g4 raygen2
SHADER_GROUP g5 miss2
SHADER_GROUP g6 anyhit2 closesthit2 intersection2
SHADER_GROUP g7 call1
SHADER_GROUP g8 call2
SHADER_BINDING_TABLE sbt1
g1
END
SHADER_BINDING_TABLE sbt2
g2
g5
END
SHADER_BINDING_TABLE sbt3
g3
g6
END
END
RUN my_rtpipeline RAYGEN sbt1 MISS sbt2 HIT sbt3 1920 1080 1
+156
View File
@@ -0,0 +1,156 @@
#!amber
DEVICE_EXTENSION VK_KHR_acceleration_structure
DEVICE_EXTENSION VK_KHR_ray_tracing_pipeline
DEVICE_EXTENSION VK_KHR_buffer_device_address
DEVICE_EXTENSION VK_KHR_pipeline_library
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(set = 0, binding = 1, r32ui) uniform uimage2D result;
void main()
{
for (uint i = 0; i < 3; i++)
{
payload = 0;
// Set origin to trigger miss
traceRayEXT(
topLevelAS, // accelerationStructureEXT topLevel,
0u, // uint rayFlags
0xFFu, // uint cullMask,
0, // uint sbtRecordOffset,
0, // uint sbtRecordStride,
i, // uint missIndex,
vec3(0.0, 0.0, 0.0), // vec3 origin,
0.0, // float Tmin,
vec3(0.0, 0.0, -1.0), // vec3 direction,
0.25, // float Tmax,
0 // int payload
);
imageStore(result, ivec2(i, 0), 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 = 1;
}
END
SHADER miss miss2 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) rayPayloadInEXT uint payload;
void main()
{
payload = 2;
}
END
SHADER miss miss3 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) rayPayloadInEXT uint payload;
void main()
{
payload = 3;
}
END
SHADER closest_hit closesthit1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
hitAttributeEXT vec3 attribs;
layout(location = 0) rayPayloadInEXT uint payload;
void main()
{
}
END
SHADER any_hit anyhit1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
hitAttributeEXT vec3 attribs;
layout(location = 0) rayPayloadInEXT uint payload;
void main()
{
}
END
ACCELERATION_STRUCTURE BOTTOM_LEVEL triangles
GEOMETRY TRIANGLES
-1 -1 1
-1 1 1
1 1 1
END
GEOMETRY TRIANGLES
1 1 1
1 -1 1
-1 -1 1
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_rtlib_bottom
MAX_RAY_PAYLOAD_SIZE 16
MAX_RAY_HIT_ATTRIBUTE_SIZE 16
BIND ACCELERATION_STRUCTURE tlas1 DESCRIPTOR_SET 0 BINDING 0
BIND BUFFER img1 AS storage_image DESCRIPTOR_SET 0 BINDING 1
FLAGS LIBRARY
SHADER_GROUP g_miss3 miss3
END
PIPELINE raytracing my_rtlib
USE_LIBRARY my_rtlib_bottom
MAX_RAY_PAYLOAD_SIZE 16
MAX_RAY_HIT_ATTRIBUTE_SIZE 16
BIND ACCELERATION_STRUCTURE tlas1 DESCRIPTOR_SET 0 BINDING 0
BIND BUFFER img1 AS storage_image DESCRIPTOR_SET 0 BINDING 1
FLAGS LIBRARY
SHADER_GROUP g_miss2 miss2
END
PIPELINE raytracing my_rtpipeline
USE_LIBRARY my_rtlib
MAX_RAY_PAYLOAD_SIZE 16
MAX_RAY_HIT_ATTRIBUTE_SIZE 16
BIND ACCELERATION_STRUCTURE tlas1 DESCRIPTOR_SET 0 BINDING 0
BIND BUFFER img1 AS storage_image DESCRIPTOR_SET 0 BINDING 1
SHADER_GROUP g_rgen raygen1
SHADER_GROUP g_miss1 miss1
SHADER_GROUP g_hits anyhit1 closesthit1
SHADER_BINDING_TABLE sbt_raygen
g_rgen
END
SHADER_BINDING_TABLE sbt_miss
g_miss1
g_miss2
g_miss3
END
SHADER_BINDING_TABLE sbt_hit
g_hits
END
END
RUN my_rtpipeline RAYGEN sbt_raygen MISS sbt_miss HIT sbt_hit 1 1 1
EXPECT img1 IDX 0 EQ 1 2 3
@@ -0,0 +1,87 @@
#!amber
DEVICE_EXTENSION VK_KHR_acceleration_structure
DEVICE_EXTENSION VK_KHR_ray_tracing_pipeline
DEVICE_EXTENSION VK_KHR_buffer_device_address
DEVICE_EXTENSION VK_KHR_pipeline_library
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 payload0;
layout(location = 1) rayPayloadEXT uvec4 payload1;
layout(set = 0, binding = 0) uniform accelerationStructureEXT topLevelAS;
layout(set = 0, binding = 1, r32ui) uniform uimage2D result;
void main()
{
float TMin = 0.1;
float TMax = 10;
uint flags = gl_RayFlagsNoneEXT;
uint mask = 0xFF;
vec3 Origin = vec3(0, 0, 0); // Set origin to trigger miss
vec3 Direction = vec3(0, 0, -1);
payload0 = 100;
traceRayEXT(topLevelAS, flags, mask, 0, 0, 0, Origin, TMin, Direction, TMax, 0);
imageStore(result, ivec2(0, 0), uvec4(payload0, 0u, 0u, 0u));
payload1 = uvec4(200);
traceRayEXT(topLevelAS, flags, mask, 0, 0, 1, Origin, TMin, Direction, TMax, 1);
imageStore(result, ivec2(1, 0), uvec4(payload1.x, 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 = 1;
}
END
SHADER miss miss2 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 1) rayPayloadInEXT uvec4 payload;
void main()
{
payload.x = 2;
}
END
ACCELERATION_STRUCTURE BOTTOM_LEVEL triangle_blas
GEOMETRY TRIANGLES
0.0 -0.75 1.0
-0.75 0.75 1.0
0.75 0.75 1.0
END
END
ACCELERATION_STRUCTURE TOP_LEVEL triangle_tlas
BOTTOM_LEVEL_INSTANCE triangle_blas END
END
IMAGE img1 FORMAT R32_UINT DIM_2D WIDTH 2 HEIGHT 1 FILL 0
PIPELINE raytracing my_rtpipeline
BIND ACCELERATION_STRUCTURE triangle_tlas DESCRIPTOR_SET 0 BINDING 0
BIND BUFFER img1 AS storage_image DESCRIPTOR_SET 0 BINDING 1
SHADER_GROUP g_rgen raygen1
SHADER_GROUP g_miss1 miss1
SHADER_GROUP g_miss2 miss2
SHADER_BINDING_TABLE sbt_raygen
g_rgen
END
SHADER_BINDING_TABLE sbt_miss
g_miss1
g_miss2
END
END
RUN my_rtpipeline RAYGEN sbt_raygen MISS sbt_miss 1 1 1
EXPECT img1 IDX 0 EQ 1 2
+102
View File
@@ -0,0 +1,102 @@
#!amber
DEVICE_EXTENSION VK_KHR_acceleration_structure
DEVICE_EXTENSION VK_KHR_ray_tracing_pipeline
DEVICE_EXTENSION VK_KHR_buffer_device_address
DEVICE_EXTENSION VK_KHR_pipeline_library
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 int payload;
layout(set = 0, binding = 0) uniform accelerationStructureEXT topLevelAS1;
layout(set = 0, binding = 1) uniform accelerationStructureEXT topLevelAS2;
layout(set = 0, binding = 2, r32i) uniform iimage1D result;
void main()
{
float TMin = 0.1;
float TMax = 10;
uint flags = gl_RayFlagsNoneEXT;
uint mask = 0xFF;
int index = int(gl_LaunchIDEXT.x);
vec3 Origin = vec3(0, 0, 0);
vec3 Direction = vec3(0, 0, 1);
payload = -1;
if (index % 3 == 0) {
traceRayEXT(topLevelAS1, flags, mask, 0, 0, 0, Origin, TMin, Direction, TMax, 0);
} else {
traceRayEXT(topLevelAS2, flags, mask, 0, 0, 0, Origin, TMin, Direction, TMax, 0);
}
imageStore(result, index, ivec4(payload + index, 0u, 0u, 0u));
}
END
SHADER miss miss1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) rayPayloadInEXT int payload;
void main()
{
payload = 10;
}
END
SHADER closest_hit closesthit1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) rayPayloadInEXT int payload;
void main()
{
payload = 20;
}
END
ACCELERATION_STRUCTURE BOTTOM_LEVEL triangle_blas
GEOMETRY TRIANGLES
0.0 -0.75 1.0
-0.75 0.75 1.0
0.75 0.75 1.0
END
END
ACCELERATION_STRUCTURE TOP_LEVEL triangle_tlas
BOTTOM_LEVEL_INSTANCE triangle_blas END
END
ACCELERATION_STRUCTURE TOP_LEVEL triangle_tlas2
BOTTOM_LEVEL_INSTANCE triangle_blas
TRANSFORM
1 0 0 0.0
0 1 0 0.0
0 0 1 -2.0
END
END
END
IMAGE outbuf FORMAT R32_SINT DIM_1D WIDTH 6 FILL 0
PIPELINE raytracing my_rtpipeline
BIND ACCELERATION_STRUCTURE triangle_tlas DESCRIPTOR_SET 0 BINDING 0
BIND ACCELERATION_STRUCTURE triangle_tlas2 DESCRIPTOR_SET 0 BINDING 1
BIND BUFFER outbuf AS storage_image DESCRIPTOR_SET 0 BINDING 2
SHADER_GROUP g_rgen raygen1
SHADER_GROUP g_miss miss1
SHADER_GROUP g_hits closesthit1
SHADER_BINDING_TABLE sbt_raygen
g_rgen
END
SHADER_BINDING_TABLE sbt_miss
g_miss
END
SHADER_BINDING_TABLE sbt_hit
g_hits
END
END
RUN my_rtpipeline RAYGEN sbt_raygen MISS sbt_miss HIT sbt_hit 6 1 1
EXPECT outbuf IDX 0 EQ 20 11 12 23 14 15
@@ -0,0 +1,89 @@
#!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(0, 0, -3);
vec3 Direction = vec3(0, 0, 1);
payload = 0;
traceRayEXT(gScene, gl_RayFlagsNoneEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0);
payload = 1;
traceRayEXT(gScene, gl_RayFlagsTerminateOnFirstHitEXT , 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0);
}
END
SHADER intersection intersection1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
hitAttributeEXT float hitAttribute;
void main()
{
reportIntersectionEXT(0.6f, gl_HitKindFrontFacingTriangleEXT);
// In case of gl_RayFlagsTerminateOnFirstHitEXT, we should never reach this part of the code,
// even though this would be the closest hit
reportIntersectionEXT(0.5f, gl_HitKindFrontFacingTriangleEXT);
}
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;
hitAttributeEXT float hitAttribute;
void main()
{
imageStore(result, payload, vec4(gl_HitTEXT, 0, 0, 0));
}
END
ACCELERATION_STRUCTURE BOTTOM_LEVEL proc_blas
GEOMETRY AABBS
-2.0 -2.0 -2.0 2.0 2.0 2.0
END
END
ACCELERATION_STRUCTURE TOP_LEVEL proc_tlas
BOTTOM_LEVEL_INSTANCE proc_blas
END
END
IMAGE outbuf FORMAT R32_SFLOAT DIM_1D WIDTH 2 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 proc_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 intersection1 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 2 1 1
EXPECT outbuf IDX 0 EQ 0.5 0.6
@@ -0,0 +1,114 @@
#!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
@@ -0,0 +1,80 @@
#!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(0, 0, -2);
vec3 Direction = vec3(0, 0, 1);
// Geometry below is explicitly marked opaque
// Since we force none opaque, we will call AHS
payload = 0;
traceRayEXT(gScene, gl_RayFlagsNoOpaqueEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0);
// In this case instead, we will not call AHS
payload = 1;
traceRayEXT(gScene, gl_RayFlagsNoneEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0);
}
END
SHADER any_hit anyhit1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) rayPayloadInEXT int payload;
layout(set = 0, binding = 1, r32i) uniform iimage1D result;
void main()
{
imageStore(result, payload, ivec4(1, 0, 0, 0));
}
END
ACCELERATION_STRUCTURE BOTTOM_LEVEL triangle_blas
GEOMETRY TRIANGLES
0.0 -0.75 1.0
-0.75 0.75 1.0
0.75 0.75 1.0
END
END
ACCELERATION_STRUCTURE TOP_LEVEL triangle_tlas
BOTTOM_LEVEL_INSTANCE triangle_blas
FLAGS FORCE_OPAQUE
END
END
IMAGE outbuf FORMAT R32_SINT DIM_1D WIDTH 2 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 anyhit1
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 2 1 1
EXPECT outbuf IDX 0 EQ 1 0
@@ -0,0 +1,76 @@
#!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(0, 0, -2);
vec3 Direction = vec3(0, 0, 1);
// Since we force opaque, we should never call AHS
payload = 0;
traceRayEXT(gScene, gl_RayFlagsOpaqueEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0);
// In this case instead, we will call AHS
payload = 1;
traceRayEXT(gScene, gl_RayFlagsNoneEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0);
}
END
SHADER any_hit anyhit1 GLSL
#version 460 core
#extension GL_EXT_ray_tracing : require
layout(location = 0) rayPayloadInEXT int payload;
layout(set = 0, binding = 1, r32i) uniform iimage1D result;
void main()
{
imageStore(result, payload, ivec4(1, 0, 0, 0));
}
END
ACCELERATION_STRUCTURE BOTTOM_LEVEL triangle_blas
GEOMETRY TRIANGLES
0.0 -0.75 1.0
-0.75 0.75 1.0
0.75 0.75 1.0
END
END
ACCELERATION_STRUCTURE TOP_LEVEL triangle_tlas
BOTTOM_LEVEL_INSTANCE triangle_blas END
END
IMAGE outbuf FORMAT R32_SINT DIM_1D WIDTH 2 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 anyhit1
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 2 1 1
EXPECT outbuf IDX 0 EQ 0 1
@@ -0,0 +1,74 @@
#!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(0, 0, -2);
vec3 Direction = vec3(0, 0, 1);
payload = 0;
traceRayEXT(gScene, gl_RayFlagsNoneEXT, 0xff, 0, 0, 0, Origin, TMin, Direction, TMax, 0);
payload = 1;
traceRayEXT(gScene, gl_RayFlagsSkipClosestHitShaderEXT, 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, r32i) uniform iimage1D result;
void main()
{
imageStore(result, payload, ivec4(1, 0, 0, 0));
}
END
ACCELERATION_STRUCTURE BOTTOM_LEVEL triangle_blas
GEOMETRY TRIANGLES
0.0 -0.75 1.0
-0.75 0.75 1.0
0.75 0.75 1.0
END
END
ACCELERATION_STRUCTURE TOP_LEVEL triangle_tlas
BOTTOM_LEVEL_INSTANCE triangle_blas END
END
IMAGE outbuf FORMAT R32_SINT DIM_1D WIDTH 2 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 2 1 1
EXPECT outbuf IDX 0 EQ 1 0
+112
View File
@@ -0,0 +1,112 @@
#!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