yes
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user