2 #extension GL_EXT_ray_query : require
4 layout(local_size_x = 16, local_size_y = 8, local_size_z = 1) in;
6 layout(binding = 0, set = 0) uniform accelerationStructureEXT tlas;
11 rayQueryInitializeEXT(rayQuery, // Ray query
12 tlas, // Top-level acceleration structure
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
20 // yes this is silly, just want to verify the return types
21 bool rq_proceed = rayQueryProceedEXT(rayQuery);
24 rq_proceed = rayQueryProceedEXT(rayQuery);
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);