break;
case nir_intrinsic_rq_load:
new_dest = lower_rq_load(&builder, index, vars, intrinsic->src[1].ssa,
- (nir_ray_query_value)nir_intrinsic_base(intrinsic),
+ nir_intrinsic_ray_query_value(intrinsic),
nir_intrinsic_column(intrinsic));
break;
case nir_intrinsic_rq_proceed:
nir_rounding_mode_rtz = 4, /* round towards zero */
} nir_rounding_mode;
+/**
+ * Ray query values that can read from a RayQueryKHR object.
+ */
+typedef enum {
+ nir_ray_query_value_intersection_type,
+ nir_ray_query_value_intersection_t,
+ nir_ray_query_value_intersection_instance_custom_index,
+ nir_ray_query_value_intersection_instance_id,
+ nir_ray_query_value_intersection_instance_sbt_index,
+ nir_ray_query_value_intersection_geometry_index,
+ nir_ray_query_value_intersection_primitive_index,
+ nir_ray_query_value_intersection_barycentrics,
+ nir_ray_query_value_intersection_front_face,
+ nir_ray_query_value_intersection_object_ray_direction,
+ nir_ray_query_value_intersection_object_ray_origin,
+ nir_ray_query_value_intersection_object_to_world,
+ nir_ray_query_value_intersection_world_to_object,
+ nir_ray_query_value_intersection_candidate_aabb_opaque,
+ nir_ray_query_value_tmin,
+ nir_ray_query_value_flags,
+ nir_ray_query_value_world_ray_direction,
+ nir_ray_query_value_world_ray_origin,
+} nir_ray_query_value;
+
typedef union {
bool b;
float f32;
nir_ssa_scalar ssa, unsigned const_val,
const nir_unsigned_upper_bound_config *config);
-typedef enum {
- nir_ray_query_value_intersection_type,
- nir_ray_query_value_intersection_t,
- nir_ray_query_value_intersection_instance_custom_index,
- nir_ray_query_value_intersection_instance_id,
- nir_ray_query_value_intersection_instance_sbt_index,
- nir_ray_query_value_intersection_geometry_index,
- nir_ray_query_value_intersection_primitive_index,
- nir_ray_query_value_intersection_barycentrics,
- nir_ray_query_value_intersection_front_face,
- nir_ray_query_value_intersection_object_ray_direction,
- nir_ray_query_value_intersection_object_ray_origin,
- nir_ray_query_value_intersection_object_to_world,
- nir_ray_query_value_intersection_world_to_object,
- nir_ray_query_value_intersection_candidate_aabb_opaque,
- nir_ray_query_value_tmin,
- nir_ray_query_value_flags,
- nir_ray_query_value_world_ray_direction,
- nir_ray_query_value_world_ray_origin,
-} nir_ray_query_value;
-
typedef struct {
/* True if gl_DrawID is considered uniform, i.e. if the preamble is run
* at least once per "internal" draw rather than per user-visible draw.
index("struct nir_io_xfb", "io_xfb")
index("struct nir_io_xfb", "io_xfb2")
+# Ray query values accessible from the RayQueryKHR object
+index("nir_ray_query_value", "ray_query_value")
+
# Rounding mode for conversions
index("nir_rounding_mode", "rounding_mode")
intrinsic("rq_generate_intersection", src_comp=[-1, 1])
# src[] = { query }
intrinsic("rq_confirm_intersection", src_comp=[-1])
-# src[] = { query, committed } BASE=nir_ray_query_value
-intrinsic("rq_load", src_comp=[-1, 1], dest_comp=0, indices=[BASE,COLUMN])
+# src[] = { query, committed }
+intrinsic("rq_load", src_comp=[-1, 1], dest_comp=0, indices=[RAY_QUERY_VALUE,COLUMN])
# Driver independent raytracing helpers
break;
}
+ case NIR_INTRINSIC_RAY_QUERY_VALUE: {
+ fprintf(fp, "ray_query_value=");
+ switch (nir_intrinsic_ray_query_value(instr)) {
+#define VAL(_name) case nir_ray_query_value_##_name: fprintf(fp, #_name); break
+ VAL(intersection_type);
+ VAL(intersection_t);
+ VAL(intersection_instance_custom_index);
+ VAL(intersection_instance_id);
+ VAL(intersection_instance_sbt_index);
+ VAL(intersection_geometry_index);
+ VAL(intersection_primitive_index);
+ VAL(intersection_barycentrics);
+ VAL(intersection_front_face);
+ VAL(intersection_object_ray_direction);
+ VAL(intersection_object_ray_origin);
+ VAL(intersection_object_to_world);
+ VAL(intersection_world_to_object);
+ VAL(intersection_candidate_aabb_opaque);
+ VAL(tmin);
+ VAL(flags);
+ VAL(world_ray_direction);
+ VAL(world_ray_origin);
+#undef VAL
+ default: fprintf(fp, "unknown"); break;
+ }
+ break;
+ }
+
default: {
unsigned off = info->index_map[idx] - 1;
fprintf(fp, "%s=%d", nir_intrinsic_index_names[idx], instr->const_index[off]);
glsl_get_vector_elements(elem_type),
glsl_get_bit_size(elem_type),
src0, src1,
- .base = value.nir_value,
+ .ray_query_value = value.nir_value,
.column = i);
}
glsl_get_vector_elements(value.glsl_type),
glsl_get_bit_size(value.glsl_type),
src0, src1,
- .base = value.nir_value));
+ .ray_query_value = value.nir_value));
}
}
brw_nir_rt_load_mem_hit_from_addr(b, &hit_in, stack_addr, committed);
nir_ssa_def *sysval = NULL;
- switch (nir_intrinsic_base(intrin)) {
+ switch (nir_intrinsic_ray_query_value(intrin)) {
case nir_ray_query_value_intersection_type:
if (committed) {
/* Values we want to generate :