compiler/glsl: avoid null-pointer deref
When we encounter a bindless image here, lower_deref returns a
NULL-pointer, and calling record_images_used will try to dereference
that NULL-pointer.
So let's dig out the var from the source instruction instead of the
result of the lowering.
Fixes: 5910c938a2
("nir/glsl: gather bitmask of images used by program")
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9895>
This commit is contained in:

committed by
Marge Bot

parent
cb580af02a
commit
89a04a54c4
@@ -120,9 +120,10 @@ remove_struct_derefs_prep(nir_deref_instr **p, char **name,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
record_images_used(struct shader_info *info,
|
record_images_used(struct shader_info *info,
|
||||||
nir_deref_instr *deref)
|
nir_intrinsic_instr *instr)
|
||||||
{
|
{
|
||||||
nir_variable *var = nir_deref_instr_get_variable(deref);
|
nir_variable *var =
|
||||||
|
nir_deref_instr_get_variable(nir_src_as_deref(instr->src[0]));
|
||||||
|
|
||||||
/* Structs have been lowered already, so get_aoa_size is sufficient. */
|
/* Structs have been lowered already, so get_aoa_size is sufficient. */
|
||||||
const unsigned size =
|
const unsigned size =
|
||||||
@@ -301,7 +302,7 @@ lower_intrinsic(nir_intrinsic_instr *instr,
|
|||||||
nir_deref_instr *deref =
|
nir_deref_instr *deref =
|
||||||
lower_deref(b, state, nir_src_as_deref(instr->src[0]));
|
lower_deref(b, state, nir_src_as_deref(instr->src[0]));
|
||||||
|
|
||||||
record_images_used(&state->shader->info, deref);
|
record_images_used(&state->shader->info, instr);
|
||||||
|
|
||||||
/* don't lower bindless: */
|
/* don't lower bindless: */
|
||||||
if (!deref)
|
if (!deref)
|
||||||
|
Reference in New Issue
Block a user