blob: fba72ad0d2dbf60b89eb1857cfc1f45c9c9c8674 [file] [log] [blame]
#version 460
#extension GL_EXT_ray_query : require
#extension GL_EXT_ray_tracing : require
#extension GL_EXT_ray_flags_primitive_culling : require
layout(primitive_culling);
layout(set = 0, binding = 0) uniform accelerationStructureEXT AS0;
layout(set = 0, binding = 1) uniform accelerationStructureEXT AS1;
layout(set = 0, binding = 2) uniform Params
{
uint ray_flags;
uint cull_mask;
vec3 origin;
float tmin;
vec3 dir;
float tmax;
float thit;
};
rayQueryEXT q2[2];
void main()
{
rayQueryEXT q;
bool res;
uint type;
float fval;
vec3 fvals;
int ival;
mat4x3 matrices;
rayQueryInitializeEXT(q, AS0, ray_flags, cull_mask, origin, tmin, dir, tmax);
rayQueryInitializeEXT(q2[1], AS1, ray_flags, cull_mask, origin, tmin, dir, tmax);
res = rayQueryProceedEXT(q);
rayQueryTerminateEXT(q2[0]);
rayQueryGenerateIntersectionEXT(q, thit);
rayQueryConfirmIntersectionEXT(q2[1]);
fval = rayQueryGetRayTMinEXT(q);
fvals = rayQueryGetWorldRayDirectionEXT(q);
fvals = rayQueryGetWorldRayOriginEXT(q);
type = rayQueryGetIntersectionTypeEXT(q2[1], true);
type = rayQueryGetIntersectionTypeEXT(q2[0], false);
res = rayQueryGetIntersectionCandidateAABBOpaqueEXT(q2[1]);
fval = rayQueryGetIntersectionTEXT(q2[1], true);
fval = rayQueryGetIntersectionTEXT(q2[1], false);
ival = rayQueryGetIntersectionInstanceCustomIndexEXT(q, true);
ival = rayQueryGetIntersectionInstanceIdEXT(q2[0], false);
ival = rayQueryGetIntersectionGeometryIndexEXT(q2[1], false);
ival = rayQueryGetIntersectionPrimitiveIndexEXT(q, true);
fvals.xy = rayQueryGetIntersectionBarycentricsEXT(q2[0], false);
res = rayQueryGetIntersectionFrontFaceEXT(q, true);
fvals = rayQueryGetIntersectionObjectRayDirectionEXT(q, false);
fvals = rayQueryGetIntersectionObjectRayOriginEXT(q2[0], true);
matrices = rayQueryGetIntersectionObjectToWorldEXT(q, false);
matrices = rayQueryGetIntersectionWorldToObjectEXT(q2[1], true);
}