Skip to content

MSL: RayQuery implementation is incomplete  #2115

Description

@Try

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature to SPIRV-Cross is desired.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions