yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Yong HeDefer immutable buffer loads when emitting spirv. (#7579)c701ec00c

master
2.4 KiB63 linesraw
1// closesthit.slang
2//TEST:SIMPLE(filecheck=CHECK): -profile glsl_460+GL_EXT_ray_tracing -stage closesthit -entry main -target spirv-assembly
3//TEST:SIMPLE(filecheck=CHECK): -stage closesthit -entry main -target spirv-assembly -emit-spirv-directly
4
5struct ReflectionRay
6{
7    float4 color;
8    float3 dummyOut;
9};
10
11StructuredBuffer<float4> colors;
12
13layout(shaderRecordNV)
14cbuffer ShaderRecord
15{
16   uint shaderRecordID;
17}
18
19void main(
20   BuiltInTriangleIntersectionAttributes attributes,
21   in out ReflectionRay                  ioPayload)
22{
23   uint materialID = (InstanceIndex() << 1)
24      + InstanceID()
25      + PrimitiveIndex()
26      + HitKind()
27      + shaderRecordID;
28
29   float4 color = colors[materialID];
30
31   color *= RayTCurrent() - RayTMin();
32
33   ioPayload.color = color;
34
35   uint index = 0U;
36   ioPayload.dummyOut = HitTriangleVertexPosition(index);
37
38   index = 1U;
39   ioPayload.dummyOut += HitTriangleVertexPosition(index);
40
41   index = 2U;
42   ioPayload.dummyOut += HitTriangleVertexPosition(index);
43}
44
45// CHECK: OpCapability RayTracing
46// CHECK: OpCapability RayTracingPositionFetchKHR
47// CHECK: OpEntryPoint ClosestHit{{NV|KHR}} %main "main"
48// CHECK-DAG: OpDecorate %[[INSTANCE_ID:[A-Za-z0-9_]+]] BuiltIn InstanceId
49// CHECK-DAG: OpDecorate %[[INSTANCE_INDEX:[A-Za-z0-9_]+]] BuiltIn InstanceCustomIndex{{NV|KHR}}
50// CHECK-DAG: OpDecorate %{{.*}} BuiltIn PrimitiveId
51// CHECK-DAG: OpDecorate %{{.*}} BuiltIn HitKind{{NV|KHR}}
52// CHECK-DAG: OpDecorate %{{.*}} BuiltIn RayTmax{{NV|KHR}}
53// CHECK-DAG: OpDecorate %{{.*}} BuiltIn RayTmin{{NV|KHR}}
54// CHECK-DAG: OpDecorate %{{.*}} BuiltIn HitTriangleVertexPositionsKHR
55// CHECK-DAG: %ShaderRecord{{.*}} = OpVariable %_ptr_ShaderRecordBuffer{{.*}} ShaderRecordBuffer{{NV|KHR}}
56// CHECK-DAG: %{{.*}} = OpVariable %_ptr_IncomingRayPayload{{NV|KHR}}_ReflectionRay{{.*}} IncomingRayPayload{{NV|KHR}}
57// CHECK-DAG: %{{.*}} = OpLoad %{{u?}}int %[[INSTANCE_ID]]
58// CHECK-DAG: %{{.*}} = OpLoad %{{u?}}int %[[INSTANCE_INDEX]]
59// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %_ptr_ShaderRecordBuffer{{NV|KHR}}_uint %ShaderRecord{{.*}} %int_0
60// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %_ptr_IncomingRayPayload{{NV|KHR}}_v4float %{{.*}} %int_0
61// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %_ptr_Input_v3float %{{.*}} %{{u?}}int_0
62// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %_ptr_Input_v3float %{{.*}} %{{u?}}int_1
63// CHECK-DAG: %{{.*}} = Op{{.*}}AccessChain %_ptr_Input_v3float %{{.*}} %{{u?}}int_2