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
|
static void
|
||||||
validate_tex_instr(nir_tex_instr *instr, validate_state *state)
|
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))
|
if (!validate_assert(state, deref))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
validate_assert(state, glsl_type_is_image(deref->type) ||
|
validate_tex_src_texture_deref(instr, state, deref);
|
||||||
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));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user