Merge pull request #2892 from greg-lunarg/mb
[platform/upstream/glslang.git] / Test / rayQuery-types.comp
1 #version 460
2 #extension GL_EXT_ray_query : require
3
4 layout(local_size_x = 16, local_size_y = 8, local_size_z = 1) in;
5
6 layout(binding = 0, set = 0) uniform accelerationStructureEXT tlas;
7
8 void main()
9 {
10   rayQueryEXT rayQuery;
11   rayQueryInitializeEXT(rayQuery,       // Ray query
12                         tlas,           // Top-level acceleration structure
13                         0,              // Ray flags
14                         0xFF,           // 8-bit instance mask
15                         vec3(0),        // Ray origin
16                         0.0,            // Minimum t-value
17                         vec3(1, 0, 0),  // Ray direction
18                         10000.0);       // Maximum t-value
19
20   // yes this is silly, just want to verify the return types
21   bool rq_proceed = rayQueryProceedEXT(rayQuery);
22   while(rq_proceed)
23   {
24     rq_proceed = rayQueryProceedEXT(rayQuery);
25   }
26
27   const uint intersectionType = rayQueryGetIntersectionTypeEXT(rayQuery, true);
28   const float rayTMin = rayQueryGetRayTMinEXT(rayQuery);
29   const uint rayFlags = rayQueryGetRayFlagsEXT(rayQuery);
30   const vec3 worldRayOrigin = rayQueryGetWorldRayOriginEXT(rayQuery);
31   const vec3 worldDirection = rayQueryGetWorldRayDirectionEXT(rayQuery);
32   const float intersectionT = rayQueryGetIntersectionTEXT(rayQuery, true);
33   const int customIndex = rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true);
34   const int instanceId = rayQueryGetIntersectionInstanceIdEXT(rayQuery, true);
35   const uint sbtOffset = rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, true);
36   const int geometryIndex = rayQueryGetIntersectionGeometryIndexEXT(rayQuery, true);
37   const int primitiveIndex = rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true);
38   const vec2 barys = rayQueryGetIntersectionBarycentricsEXT(rayQuery, true);
39   const bool frontface = rayQueryGetIntersectionFrontFaceEXT(rayQuery, true);
40   const bool aabbOpaque = rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQuery);
41   const vec3 objRayDirection = rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true);
42   const vec3 objRayOrigin = rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true);
43   const mat4x3 objToWorld = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, true);
44   const mat4x3 worldToObj = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, true);
45 }