Merge pull request #2891 from dneto0/hlsl-namespace
[platform/upstream/glslang.git] / Test / rayQuery-allOps.rgen
1 #version 460
2 #extension GL_NV_ray_tracing : enable
3 #extension GL_EXT_ray_query : enable
4
5 struct Ray
6 {
7     vec3 pos;
8     float tmin;
9     vec3 dir;
10     float tmax;
11 };
12
13 layout(std430, set = 0, binding = 0) buffer Log
14 {
15     uint x;
16     uint y;
17 };
18
19 layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas;
20 layout(std430, set = 0, binding = 2) buffer Rays { Ray rays[]; };
21
22 void doSomething()
23 {
24     x = 0;
25     y = 0;
26 }
27
28 Ray makeRayDesc()
29 {
30     Ray ray;
31     ray.pos= vec3(0,0,0);
32     ray.dir = vec3(1,0,0);
33     ray.tmin = 0.0f;
34     ray.tmax = 9999.0;
35     return ray;
36 }
37
38 void main()
39 {
40     Ray ray = makeRayDesc();
41     rayQueryEXT rayQuery;
42     rayQueryInitializeEXT(rayQuery, rtas, gl_RayFlagsNoneEXT, 0xFF, ray.pos, ray.tmin, ray.dir, ray.tmax);
43
44     mat4x3 _mat4x3;
45     mat3x4 _mat3x4;
46
47     while (rayQueryProceedEXT(rayQuery))
48     {
49         uint candidateType = rayQueryGetIntersectionTypeEXT(rayQuery, false);
50         switch(candidateType)
51         {
52             case gl_RayQueryCandidateIntersectionTriangleEXT:
53
54                 rayQueryTerminateEXT(rayQuery);
55                 _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
56                 _mat3x4 = transpose(_mat4x3);
57                 rayQueryConfirmIntersectionEXT(rayQuery);
58
59                 if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
60                 {
61                     doSomething();
62                 }
63
64                 if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).x == 0)
65                 {
66                     doSomething();
67                 }
68
69                 if (rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
70                 {
71                     doSomething();
72                 }
73
74                 if (rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
75                 {
76                     doSomething();
77                 }
78
79                 if (rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).x > 0)
80                 {
81                     doSomething();
82                 }
83
84                 if (rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
85                 {
86                     doSomething();
87                 }
88
89                 if (rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
90                 {
91                     doSomething();
92                 }
93
94                 if (rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
95                 {
96                     doSomething();
97                 }
98
99                 if (rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, true) > 0)
100                 {
101                     doSomething();
102                 }
103                 break;
104
105             case gl_RayQueryCandidateIntersectionAABBEXT:
106             {
107                 _mat4x3 = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, false);
108                 _mat3x4 = transpose(_mat4x3);
109                 if (rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQuery))
110                 {
111                     doSomething();
112                 }
113
114                 float t = 0.5;
115                 rayQueryGenerateIntersectionEXT(rayQuery, t);
116                 rayQueryTerminateEXT(rayQuery);
117                 break;
118             }
119         }
120     }
121
122     if(_mat3x4[0][0] == _mat4x3[0][0])
123     {
124         doSomething();
125     }
126
127     uint committedStatus = rayQueryGetIntersectionTypeEXT(rayQuery, true);
128
129     switch(committedStatus)
130     {
131         case gl_RayQueryCommittedIntersectionNoneEXT :
132             _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, false);
133             _mat3x4 = transpose(_mat4x3);
134             break;
135
136         case gl_RayQueryCommittedIntersectionTriangleEXT :
137             _mat4x3 = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, true);
138             _mat3x4 = transpose(_mat4x3);
139
140             if (rayQueryGetIntersectionFrontFaceEXT(rayQuery, true))
141             {
142                 doSomething();
143             }
144
145             if (rayQueryGetIntersectionBarycentricsEXT(rayQuery, true).y == 0)
146             {
147                 doSomething();
148             }
149             break;
150
151         case gl_RayQueryCommittedIntersectionGeneratedEXT :
152
153             if(rayQueryGetIntersectionGeometryIndexEXT(rayQuery, true) > 0)
154             {
155                 doSomething();
156             }
157
158             if(rayQueryGetIntersectionInstanceIdEXT(rayQuery, true) > 0)
159             {
160                 doSomething();
161             }
162
163             if(rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true) > 0)
164             {
165                 doSomething();
166             }
167
168             if(rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true).z > 0)
169             {
170                 doSomething();
171             }
172
173             if(rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true).x > 0)
174             {
175                 doSomething();
176             }
177
178             if(rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true) > 0)
179             {
180                 doSomething();
181             }
182
183             if(rayQueryGetIntersectionTEXT(rayQuery, true) > 0.f)
184             {
185                 doSomething();
186             }
187             break;
188     }
189
190     if (_mat3x4[0][0] == _mat4x3[0][0])
191     {
192         doSomething();
193     }
194
195     if (rayQueryGetRayFlagsEXT(rayQuery) > 0)
196     {
197         doSomething();
198     }
199
200     if (rayQueryGetRayTMinEXT(rayQuery) > 0.0)
201     {
202         doSomething();
203     }
204
205     vec3 o = rayQueryGetWorldRayOriginEXT(rayQuery);
206     vec3 d = rayQueryGetWorldRayDirectionEXT(rayQuery);
207
208     if (o.x == d.z)
209     {
210         doSomething();
211     }
212 }