yum-mirror/slang

Making it easier to work with shaders

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

Mukund KeshavaAdd LSS intrinsics (#7200)f570e109c

master
1.2 KiB45 linesraw
1//TEST:SIMPLE(filecheck=HLSL): -target hlsl
2//TEST:SIMPLE(filecheck=SPIRV): -target spirv-asm
3//HLSL: NvRtSphereObjectPositionAndRadius
4//HLSL: NvRtLssObjectPositionsAndRadii
5//HLSL: NvRtIsSphereHit
6//HLSL: NvRtIsLssHit
7
8//SPIRV: HitSpherePositionNV
9//SPIRV: HitSphereRadiusNV
10//SPIRV: HitLSSPositionsNV
11//SPIRV: HitIsSphereNV
12//SPIRV: HitIsLSSNV
13
14// Hit object variants
15//SPIRV: OpHitObjectGetSpherePositionNV
16//SPIRV: OpHitObjectGetSphereRadiusNV
17//SPIRV: OpHitObjectGetLSSPositionsNV
18//SPIRV: OpHitObjectGetLSSRadiiNV
19//SPIRV: OpHitObjectIsSphereHitNV
20//SPIRV: OpHitObjectIsLSSHitNV
21
22struct RayPayload
23{
24    float4 color;
25    float2x4 lssData;
26    bool isSphere;
27    bool isLss;
28};
29
30[shader("closesthit")]
31void closestHitShaderLss(inout RayPayload payload, in BuiltInTriangleIntersectionAttributes attr)
32{
33    // Test TraceRay API functions
34    payload.color = GetSpherePositionAndRadius();
35    payload.lssData = GetLssPositionsAndRadii();
36    payload.isSphere = IsSphereHit();
37    payload.isLss = IsLssHit();
38    
39    // Test HitObject API functions
40    HitObject hitObj;
41    float4 sphereData = hitObj.GetSpherePositionAndRadius();
42    float2x4 lssData = hitObj.GetLssPositionsAndRadii();
43    bool isSphereHit = hitObj.IsSphereHit();
44    bool isLssHit = hitObj.IsLssHit();
45}