yum-mirror/slang

Making it easier to work with shaders

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

ArielG-NVMove SPIRV global variables into a context variable (#4741)04e7327a2

master
2.1 KiB78 linesraw
1//TEST:SIMPLE(filecheck=CHECK): -allow-glsl -target spirv -emit-spirv-directly -stage raygeneration -entry main -enable-experimental-passes
2
3// Check to ensure we make global ray-tracing objects. Ensure we store into these variables directly and not through a context-pointer.
4
5// CHECK-DAG: %[[RAYTRACING_AS_TYPE:[A-Za-z0-9_]+]] = OpTypeAccelerationStructureKHR
6// CHECK-DAG: %[[RAYTRACING_AS_PTR_TYPE:[A-Za-z0-9_]+]] = OpTypePointer UniformConstant %[[RAYTRACING_AS_TYPE]]
7// CHECK-DAG: %[[RAYTRACING_AS:[A-Za-z0-9_]+]] = OpVariable %[[RAYTRACING_AS_PTR_TYPE]] UniformConstant
8
9// CHECK-DAG: %[[RAY_PAYLOAD:[A-Za-z0-9_]+]] = OpVariable %{{.*}} RayPayloadKHR
10// CHECK-DAG: %[[HIT_ATTR:[A-Za-z0-9_]+]] = OpVariable %{{.*}} HitObjectAttributeNV
11// CHECK-DAG: %[[CALL_DATA:[A-Za-z0-9_]+]] = OpVariable %{{.*}} CallableDataKHR
12
13
14// CHECK: OpLoad {{.*}} %[[RAYTRACING_AS]]
15// CHECK: OpStore %[[RAY_PAYLOAD]]
16// CHECK: OpStore %[[HIT_ATTR]]
17// CHECK: OpStore %[[CALL_DATA]]
18
19layout(binding = 0) uniform accelerationStructureEXT as;
20
21buffer MyBlockName
22{
23    uint data[];
24} outputBuffer;
25layout(location = 2) rayPayloadEXT vec4 payload;
26layout(location = 2) hitObjectAttributeNV vec4 attrMain;
27layout(location = 0) callableDataEXT vec4 outcall;
28
29bool testHitObjectTraceRay() {
30    hitObjectNV hit;
31
32
33    hitObjectTraceRayNV(hit, as, gl_RayFlagsNoneEXT, 0xff, 0, 0, 0, vec3(0.1, 0.1, 0.0), 0.01f, vec3(0, 0, 1), 1e4f, 2);
34    return true
35        && hitObjectIsHitNV(hit) == true
36        ;
37}
38
39
40bool testPayloadReadWrite() {
41    payload = vec4(2);
42    vec4 read = payload;
43    return true
44        && read != vec4(0)
45        ;
46}
47
48bool testAttributeReadWrite() {
49    attrMain = vec4(2);
50    vec4 read = attrMain;
51    return true
52        && read != vec4(0)
53        ;
54}
55
56bool testCallableReadWrite() {
57    outcall = vec4(2);
58    vec4 read = outcall;
59    return true
60        && read != vec4(0)
61        ;
62}
63
64bool testReadWriteOfObjects(){
65    return true
66        && testPayloadReadWrite()
67        && testAttributeReadWrite()
68        && testCallableReadWrite();
69        ;       
70}
71
72void main()
73{
74    outputBuffer.data[0] = true
75        && testHitObjectTraceRay()
76        && testReadWriteOfObjects()
77        ;
78}