summaryrefslogtreecommitdiffstats
path: root/tests/cuda/optix-get-attributes-mixed.slang
blob: 9892f41389ee11fe51a20091f27565b551b1566e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//TEST:SIMPLE(filecheck=CHECK): -target cuda -entry closestHitShader -stage closesthit
//TEST:SIMPLE(filecheck=CHECK_PTX): -target ptx -entry closestHitShader -stage closesthit

//CHECK: optixGetAttribute_0()
//CHECK: __int_as_float(optixGetAttribute_1())
//CHECK: optixGetAttribute_2()
//CHECK: __int_as_float(optixGetAttribute_3())
//CHECK: optixGetAttribute_4()
//CHECK: __int_as_float(optixGetAttribute_5())
//CHECK: optixGetAttribute_6()
//CHECK: __int_as_float(optixGetAttribute_7())
//CHECK_PTX: _optix_get_attribute_0
//CHECK_PTX: _optix_get_attribute_1
//CHECK_PTX: _optix_get_attribute_2
//CHECK_PTX: _optix_get_attribute_3
//CHECK_PTX: _optix_get_attribute_4
//CHECK_PTX: _optix_get_attribute_5
//CHECK_PTX: _optix_get_attribute_6
//CHECK_PTX: _optix_get_attribute_7

struct CustomIntersectionAttributes
{
    uint attr0;   // Will use index 0 - integer
    float attr1;  // Will use index 1 - float
    uint attr2;   // Will use index 2 - integer
    float attr3;  // Will use index 3 - float
    int attr4;    // Will use index 4 - integer
    float attr5;  // Will use index 5 - float
    uint attr6;   // Will use index 6 - integer
    float attr7;  // Will use index 7 - float
};

struct RayPayload
{
    uint uintValues[4];
    float floatValues[4];
};

[shader("closesthit")]
void closestHitShader(inout RayPayload payload, in CustomIntersectionAttributes attr)
{
    payload.uintValues[0] = attr.attr0;   // optixGetAttribute_0()
    payload.floatValues[0] = attr.attr1;  // __int_as_float(optixGetAttribute_1())
    payload.uintValues[1] = attr.attr2;   // optixGetAttribute_2()
    payload.floatValues[1] = attr.attr3;  // __int_as_float(optixGetAttribute_3())
    payload.uintValues[2] = uint(attr.attr4);  // optixGetAttribute_4()
    payload.floatValues[2] = attr.attr5;  // __int_as_float(optixGetAttribute_5())
    payload.uintValues[3] = attr.attr6;   // optixGetAttribute_6()
    payload.floatValues[3] = attr.attr7;  // __int_as_float(optixGetAttribute_7())
}