From ef13ff00d1b9a6ac05374a396f045d359c18f5a9 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Tue, 23 Jul 2024 12:57:38 +1000 Subject: [PATCH] nir: create validate_tex_src_texture_deref() helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Will be used in a following patch. Acked-by: Marek Olšák Part-of: --- src/compiler/nir/nir_validate.c | 71 ++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c index 16e75fabb3b..8e931031405 100644 --- a/src/compiler/nir/nir_validate.c +++ b/src/compiler/nir/nir_validate.c @@ -805,6 +805,44 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state) } } +static void +validate_tex_src_texture_deref(nir_tex_instr *instr, validate_state *state, + nir_deref_instr *deref) +{ + validate_assert(state, glsl_type_is_image(deref->type) || + glsl_type_is_texture(deref->type) || + glsl_type_is_sampler(deref->type)); + + switch (instr->op) { + case nir_texop_descriptor_amd: + case nir_texop_sampler_descriptor_amd: + case nir_texop_custom_border_color_agx: + break; + case nir_texop_lod: + case nir_texop_lod_bias_agx: + validate_assert(state, nir_alu_type_get_base_type(instr->dest_type) == nir_type_float); + break; + case nir_texop_samples_identical: + case nir_texop_has_custom_border_color_agx: + validate_assert(state, nir_alu_type_get_base_type(instr->dest_type) == nir_type_bool); + break; + case nir_texop_txs: + case nir_texop_texture_samples: + case nir_texop_query_levels: + case nir_texop_fragment_mask_fetch_amd: + case nir_texop_txf_ms_mcs_intel: + validate_assert(state, nir_alu_type_get_base_type(instr->dest_type) == nir_type_int || + nir_alu_type_get_base_type(instr->dest_type) == nir_type_uint); + break; + default: + validate_assert(state, + glsl_get_sampler_result_type(deref->type) == GLSL_TYPE_VOID || + glsl_base_type_is_integer(glsl_get_sampler_result_type(deref->type)) == + (nir_alu_type_get_base_type(instr->dest_type) == nir_type_int || + nir_alu_type_get_base_type(instr->dest_type) == nir_type_uint)); + } +} + static void validate_tex_instr(nir_tex_instr *instr, validate_state *state) { @@ -847,38 +885,7 @@ validate_tex_instr(nir_tex_instr *instr, validate_state *state) if (!validate_assert(state, deref)) break; - validate_assert(state, glsl_type_is_image(deref->type) || - glsl_type_is_texture(deref->type) || - glsl_type_is_sampler(deref->type)); - switch (instr->op) { - case nir_texop_descriptor_amd: - case nir_texop_sampler_descriptor_amd: - case nir_texop_custom_border_color_agx: - break; - case nir_texop_lod: - case nir_texop_lod_bias_agx: - validate_assert(state, nir_alu_type_get_base_type(instr->dest_type) == nir_type_float); - break; - case nir_texop_samples_identical: - case nir_texop_has_custom_border_color_agx: - validate_assert(state, nir_alu_type_get_base_type(instr->dest_type) == nir_type_bool); - break; - case nir_texop_txs: - case nir_texop_texture_samples: - case nir_texop_query_levels: - case nir_texop_fragment_mask_fetch_amd: - case nir_texop_txf_ms_mcs_intel: - validate_assert(state, nir_alu_type_get_base_type(instr->dest_type) == nir_type_int || - nir_alu_type_get_base_type(instr->dest_type) == nir_type_uint); - - break; - default: - validate_assert(state, - glsl_get_sampler_result_type(deref->type) == GLSL_TYPE_VOID || - glsl_base_type_is_integer(glsl_get_sampler_result_type(deref->type)) == - (nir_alu_type_get_base_type(instr->dest_type) == nir_type_int || - nir_alu_type_get_base_type(instr->dest_type) == nir_type_uint)); - } + validate_tex_src_texture_deref(instr, state, deref); break; }