yum-mirror/slang

Making it easier to work with shaders

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

Harsh Aggarwal (NVIDIA)Add Optix Intrinsics Coverage (#8159) (#8310)f5fae0108

master
1.9 KiB50 linesraw
1//TEST:SIMPLE(filecheck=CHECK): -target cuda -entry closestHitShader -stage closesthit
2//TEST:SIMPLE(filecheck=CHECK_PTX): -target ptx -entry closestHitShader -stage closesthit
3
4//CHECK: optixGetAttribute_0()
5//CHECK: __int_as_float(optixGetAttribute_1())
6//CHECK: optixGetAttribute_2()
7//CHECK: __int_as_float(optixGetAttribute_3())
8//CHECK: optixGetAttribute_4()
9//CHECK: __int_as_float(optixGetAttribute_5())
10//CHECK: optixGetAttribute_6()
11//CHECK: __int_as_float(optixGetAttribute_7())
12//CHECK_PTX: _optix_get_attribute_0
13//CHECK_PTX: _optix_get_attribute_1
14//CHECK_PTX: _optix_get_attribute_2
15//CHECK_PTX: _optix_get_attribute_3
16//CHECK_PTX: _optix_get_attribute_4
17//CHECK_PTX: _optix_get_attribute_5
18//CHECK_PTX: _optix_get_attribute_6
19//CHECK_PTX: _optix_get_attribute_7
20
21struct CustomIntersectionAttributes
22{
23    uint attr0;   // Will use index 0 - integer
24    float attr1;  // Will use index 1 - float
25    uint attr2;   // Will use index 2 - integer
26    float attr3;  // Will use index 3 - float
27    int attr4;    // Will use index 4 - integer
28    float attr5;  // Will use index 5 - float
29    uint attr6;   // Will use index 6 - integer
30    float attr7;  // Will use index 7 - float
31};
32
33struct RayPayload
34{
35    uint uintValues[4];
36    float floatValues[4];
37};
38
39[shader("closesthit")]
40void closestHitShader(inout RayPayload payload, in CustomIntersectionAttributes attr)
41{
42    payload.uintValues[0] = attr.attr0;   // optixGetAttribute_0()
43    payload.floatValues[0] = attr.attr1;  // __int_as_float(optixGetAttribute_1())
44    payload.uintValues[1] = attr.attr2;   // optixGetAttribute_2()
45    payload.floatValues[1] = attr.attr3;  // __int_as_float(optixGetAttribute_3())
46    payload.uintValues[2] = uint(attr.attr4);  // optixGetAttribute_4()
47    payload.floatValues[2] = attr.attr5;  // __int_as_float(optixGetAttribute_5())
48    payload.uintValues[3] = attr.attr6;   // optixGetAttribute_6()
49    payload.floatValues[3] = attr.attr7;  // __int_as_float(optixGetAttribute_7())
50}