Mesa (main): nir: Validate newly documented texture restrictions
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jul 23 16:25:51 UTC 2021
Module: Mesa
Branch: main
Commit: 1431f6c7655f9aa2a7700f003ca6cf1f2d0dd198
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1431f6c7655f9aa2a7700f003ca6cf1f2d0dd198
Author: Jason Ekstrand <jason at jlekstrand.net>
Date: Fri Jul 9 08:09:46 2021 -0500
nir: Validate newly documented texture restrictions
Reviewed-by: Alyssa Rosenzweig <alyssa at collabora.com>
Acked-by: Adam Jackson <ajax at redhat.com>
Reviewed-by: Connor Abbott <cwabbott0 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11775>
---
src/compiler/nir/nir_validate.c | 81 ++++++++++++++++++++++++++++++++++++++---
1 file changed, 76 insertions(+), 5 deletions(-)
diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c
index 8791ed3b050..648e5af7a1a 100644
--- a/src/compiler/nir/nir_validate.c
+++ b/src/compiler/nir/nir_validate.c
@@ -835,17 +835,88 @@ validate_tex_instr(nir_tex_instr *instr, validate_state *state)
0, nir_tex_instr_src_size(instr, i));
switch (instr->src[i].src_type) {
- case nir_tex_src_texture_deref:
- case nir_tex_src_sampler_deref:
- validate_assert(state, instr->src[i].src.is_ssa);
- validate_assert(state,
- instr->src[i].src.ssa->parent_instr->type == nir_instr_type_deref);
+ case nir_tex_src_coord:
+ validate_assert(state, nir_src_num_components(instr->src[i].src) ==
+ instr->coord_components);
+ break;
+
+ case nir_tex_src_projector:
+ validate_assert(state, nir_src_num_components(instr->src[i].src) == 1);
+ break;
+
+ case nir_tex_src_comparator:
+ validate_assert(state, instr->is_shadow);
+ validate_assert(state, nir_src_num_components(instr->src[i].src) == 1);
+ break;
+
+ case nir_tex_src_offset:
+ validate_assert(state, nir_src_num_components(instr->src[i].src) ==
+ instr->coord_components - instr->is_array);
+ break;
+
+ case nir_tex_src_bias:
+ validate_assert(state, instr->op == nir_texop_txb ||
+ instr->op == nir_texop_tg4);
+ validate_assert(state, nir_src_num_components(instr->src[i].src) == 1);
+ break;
+
+ case nir_tex_src_lod:
+ validate_assert(state, instr->op != nir_texop_tex &&
+ instr->op != nir_texop_txb &&
+ instr->op != nir_texop_txd &&
+ instr->op != nir_texop_lod);
+ validate_assert(state, nir_src_num_components(instr->src[i].src) == 1);
+ break;
+
+ case nir_tex_src_min_lod:
+ case nir_tex_src_ms_index:
+ validate_assert(state, nir_src_num_components(instr->src[i].src) == 1);
+ break;
+
+ case nir_tex_src_ddx:
+ case nir_tex_src_ddy:
+ validate_assert(state, instr->op == nir_texop_txd);
+ validate_assert(state, nir_src_num_components(instr->src[i].src) ==
+ instr->coord_components - instr->is_array);
break;
+
+ case nir_tex_src_texture_deref: {
+ nir_deref_instr *deref = nir_src_as_deref(instr->src[i].src);
+ if (!validate_assert(state, deref))
+ break;
+
+ validate_assert(state, glsl_type_is_image(deref->type) ||
+ glsl_type_is_sampler(deref->type));
+ break;
+ }
+
+ case nir_tex_src_sampler_deref: {
+ nir_deref_instr *deref = nir_src_as_deref(instr->src[i].src);
+ if (!validate_assert(state, deref))
+ break;
+
+ validate_assert(state, glsl_type_is_sampler(deref->type));
+ break;
+ }
+
+ case nir_tex_src_texture_offset:
+ case nir_tex_src_sampler_offset:
+ case nir_tex_src_plane:
+ validate_assert(state, nir_src_num_components(instr->src[i].src) == 1);
+ break;
+
+ case nir_tex_src_texture_handle:
+ case nir_tex_src_sampler_handle:
+ break;
+
default:
break;
}
}
+ if (instr->op != nir_texop_tg4)
+ validate_assert(state, instr->component == 0);
+
if (nir_tex_instr_has_explicit_tg4_offsets(instr)) {
validate_assert(state, instr->op == nir_texop_tg4);
validate_assert(state, !src_type_seen[nir_tex_src_offset]);
More information about the mesa-commit
mailing list