nir: create validate_tex_src_texture_deref() helper
Will be used in a following patch. Acked-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30315>
This commit is contained in:

committed by
Marge Bot

parent
3631196414
commit
ef13ff00d1
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user