From 89abfbeb7ac53e29573e4412241c0b6a5f20637d Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Fri, 30 Oct 2020 15:03:23 -0500 Subject: [PATCH] nir: Disallow writes to system values and mem_constant Reviewed-by: Jesse Natalie Part-of: --- src/compiler/nir/nir.h | 2 ++ src/compiler/nir/nir_validate.c | 6 ++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index f782253d911..43ee5a979aa 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -130,6 +130,8 @@ typedef enum { nir_var_mem_global = (1 << 9), nir_var_mem_push_const = (1 << 10), /* not actually used for variables */ nir_var_mem_constant = (1 << 11), + nir_var_read_only_modes = nir_var_shader_in | nir_var_uniform | + nir_var_system_value | nir_var_mem_constant, nir_num_variable_modes = 12, nir_var_all = (1 << nir_num_variable_modes) - 1, } nir_variable_mode; diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c index 83d7e846c7b..f0f1d7d81fa 100644 --- a/src/compiler/nir/nir_validate.c +++ b/src/compiler/nir/nir_validate.c @@ -591,8 +591,7 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state) /* Also allow 32-bit boolean store operations */ if (glsl_type_is_boolean(dst->type)) src_bit_sizes[1] |= 32; - validate_assert(state, (dst->mode & (nir_var_shader_in | - nir_var_uniform)) == 0); + validate_assert(state, (dst->mode & nir_var_read_only_modes) == 0); validate_assert(state, (nir_intrinsic_write_mask(instr) & ~((1 << instr->num_components) - 1)) == 0); break; } @@ -602,8 +601,7 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state) nir_deref_instr *src = nir_src_as_deref(instr->src[1]); validate_assert(state, glsl_get_bare_type(dst->type) == glsl_get_bare_type(src->type)); - validate_assert(state, (dst->mode & (nir_var_shader_in | - nir_var_uniform)) == 0); + validate_assert(state, (dst->mode & nir_var_read_only_modes) == 0); break; }