summaryrefslogtreecommitdiff
path: root/src/compiler/nir/nir_validate.c
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2024-04-13 15:28:57 -0400
committerMarge Bot <emma+marge@anholt.net>2024-05-01 19:41:35 +0000
commit1632948a7640e0acb569be7c61e0840451daca2e (patch)
treeabd60b618e8a9ec1bc86c52243095dc3b819116a /src/compiler/nir/nir_validate.c
parent0217a7c00722932a58f0bd659230443e4236cb65 (diff)
nir: validate src_type of store_output intrinsics, require bit_size >= 16
Reviewed-by: Georg Lehmann <dadschoorse@gmail.com> Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28845>
Diffstat (limited to 'src/compiler/nir/nir_validate.c')
-rw-r--r--src/compiler/nir/nir_validate.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c
index 2d0db485401..f67ce47f223 100644
--- a/src/compiler/nir/nir_validate.c
+++ b/src/compiler/nir/nir_validate.c
@@ -645,12 +645,19 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state)
util_is_power_of_two_nonzero(nir_intrinsic_align_mul(instr)));
validate_assert(state, nir_intrinsic_align_offset(instr) <
nir_intrinsic_align_mul(instr));
- FALLTHROUGH;
+ /* All memory store operations must store at least a byte */
+ validate_assert(state, nir_src_bit_size(instr->src[0]) >= 8);
+ break;
case nir_intrinsic_store_output:
case nir_intrinsic_store_per_vertex_output:
- /* All memory store operations must store at least a byte */
- validate_assert(state, nir_src_bit_size(instr->src[0]) >= 8);
+ if (state->shader->info.stage == MESA_SHADER_FRAGMENT)
+ validate_assert(state, nir_src_bit_size(instr->src[0]) >= 8);
+ else
+ validate_assert(state, nir_src_bit_size(instr->src[0]) >= 16);
+ validate_assert(state,
+ nir_src_bit_size(instr->src[0]) ==
+ nir_alu_type_get_type_size(nir_intrinsic_src_type(instr)));
break;
case nir_intrinsic_deref_mode_is: