nir: Disallow writes to system values and mem_constant
Reviewed-by: Jesse Natalie <jenatali@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6332>
This commit is contained in:

committed by
Marge Bot

parent
bb5d5029b7
commit
89abfbeb7a
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user