From: Lionel Landwerlin Date: Thu, 10 Nov 2022 10:20:00 +0000 (+0200) Subject: nir: make ray query load values visible in NIR prints X-Git-Tag: upstream/23.3.3~17171 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b499a27d74c28e81707731b0e723ce35879d5c96;p=platform%2Fupstream%2Fmesa.git nir: make ray query load values visible in NIR prints Signed-off-by: Lionel Landwerlin Reviewed-by: Konstantin Seurer Part-of: --- diff --git a/src/amd/vulkan/radv_nir_lower_ray_queries.c b/src/amd/vulkan/radv_nir_lower_ray_queries.c index 06645ec..5945c1a 100644 --- a/src/amd/vulkan/radv_nir_lower_ray_queries.c +++ b/src/amd/vulkan/radv_nir_lower_ray_queries.c @@ -781,7 +781,7 @@ radv_nir_lower_ray_queries(struct nir_shader *shader, struct radv_device *device 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: diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 1c6e3e3..349c8fa 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -227,6 +227,30 @@ typedef enum { 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; @@ -5703,27 +5727,6 @@ nir_addition_might_overflow(nir_shader *shader, struct hash_table *range_ht, 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. diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index c5ab952..be0e7dd 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -263,6 +263,9 @@ index("struct nir_io_semantics", "io_semantics") 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") @@ -550,8 +553,8 @@ intrinsic("rq_proceed", src_comp=[-1], dest_comp=1) 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 diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c index d3d6280..ace4467 100644 --- a/src/compiler/nir/nir_print.c +++ b/src/compiler/nir/nir_print.c @@ -1134,6 +1134,34 @@ print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state) 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]); diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 7390490..d8e071d 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -5739,7 +5739,7 @@ ray_query_load_intrinsic_create(struct vtn_builder *b, SpvOp opcode, 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); } @@ -5752,7 +5752,7 @@ ray_query_load_intrinsic_create(struct vtn_builder *b, SpvOp opcode, 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)); } } diff --git a/src/intel/compiler/brw_nir_lower_ray_queries.c b/src/intel/compiler/brw_nir_lower_ray_queries.c index c25f32b..30d30de 100644 --- a/src/intel/compiler/brw_nir_lower_ray_queries.c +++ b/src/intel/compiler/brw_nir_lower_ray_queries.c @@ -360,7 +360,7 @@ lower_ray_query_intrinsic(nir_builder *b, 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 :