diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c index eca05e0eab3..94fb9a366a5 100644 --- a/src/compiler/nir/nir_validate.c +++ b/src/compiler/nir/nir_validate.c @@ -899,6 +899,31 @@ validate_tex_instr(nir_tex_instr *instr, validate_state *state) 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: + break; + case nir_texop_lod: + validate_assert(state, nir_alu_type_get_base_type(instr->dest_type) == nir_type_float); + break; + case nir_texop_samples_identical: + 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; }