For function
void rayQueryInitializeEXT(rayQueryEXT rayQuery,
accelerationStructureEXT topLevel,
uint rayFlags, uint cullMask, vec3 origin,
float tMin, vec3 direction, float tMax);
uint rayFlags appear to be fully ignored. In translated MSL-shader, there is:
rayQuery.reset(ray(rayOrigin, rayDirection, 0.0, rayDistance), topLevelAS, intersection_params());
Proposed solution:
rayFlags can be mapped to intersection_params properties. spirv-cross should emit helper function that constructs intersection_params object.
intersection_params spvMakeIntersectionParams(uint flags) {
intersection_params ip;
...
return ip;
}
// GL_EXT_ray_tracing
gl_RayFlagsNoneEXT -> (no actions needed)
gl_RayFlagsOpaqueEXT -> ip.force_opacity(forced_opacity::opaque)
gl_RayFlagsNoOpaqueEXT -> ip.force_opacity(forced_opacity::non_opaque)
gl_RayFlagsTerminateOnFirstHitEXT -> ip.accept_any_intersection(true)
gl_RayFlagsSkipClosestHitShaderEXT -> N/A
gl_RayFlagsCullBackFacingTrianglesEXT -> ip.set_triangle_cull_mode(triangle_cull_mode::back)
gl_RayFlagsCullFrontFacingTrianglesEXT -> ip.set_triangle_cull_mode(triangle_cull_mode::front)
gl_RayFlagsCullOpaqueEXT -> ip.set_opacity_cull_mode(opacity_cull_mode::opaque)
gl_RayFlagsCullNoOpaqueEXT -> ip.set_opacity_cull_mode(opacity_cull_mode::non_opaque)
// GL_EXT_ray_flags_primitive_culling
gl_RayFlagsSkipTrianglesEXT -> ip.set_geometry_cull_mode(geometry_cull_mode::triangle)
gl_RayFlagsSkipAABBEXT -> ip.set_geometry_cull_mode(geometry_cull_mode::bounding_box)
For function
uint rayFlagsappear to be fully ignored. In translated MSL-shader, there is:rayQuery.reset(ray(rayOrigin, rayDirection, 0.0, rayDistance), topLevelAS, intersection_params());Proposed solution:
rayFlagscan be mapped tointersection_paramsproperties. spirv-cross should emit helper function that constructsintersection_paramsobject.