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