mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 19:20:08 +01:00
nir/lower_io: Don't use variable to get deref mode
Drivers only use lower_io for modes where pointers don't have a
meaningful value, and dereferences can always be traced back to a
variable. But there can be other modes, like global mode with
VK_EXT_buffer_device_address, where pointers cannot be traced back to a
variable, and lower_io would segfault on loads/stores of these since
nir_deref_instr_get_variable() would return NULL.
Just use the mode on the deref itself to filter out these modes before
we try to get the variable.
Fixes: 118a66df99 ("radv: Use NIR barycentric coordinates")
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
f18b8a1174
commit
133273aa22
1 changed files with 3 additions and 2 deletions
|
|
@ -461,8 +461,7 @@ nir_lower_io_block(nir_block *block,
|
|||
|
||||
nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]);
|
||||
|
||||
nir_variable *var = nir_deref_instr_get_variable(deref);
|
||||
nir_variable_mode mode = var->data.mode;
|
||||
nir_variable_mode mode = deref->mode;
|
||||
|
||||
if ((state->modes & mode) == 0)
|
||||
continue;
|
||||
|
|
@ -473,6 +472,8 @@ nir_lower_io_block(nir_block *block,
|
|||
mode != nir_var_uniform)
|
||||
continue;
|
||||
|
||||
nir_variable *var = nir_deref_instr_get_variable(deref);
|
||||
|
||||
b->cursor = nir_before_instr(instr);
|
||||
|
||||
const bool per_vertex = nir_is_per_vertex_io(var, b->shader->info.stage);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue