yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
c701ec00c
master
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