nouveau/nir: image_samples/size don't have coordinates
Without this, it treats the src[1] as a coordinate (it's actually LOD) and may try to read more than one component. I don't think this usually hurts anything as the coordinate should get ignored later but it can result in OOB memory reads while translating NIR. Reviewed-by: Karol Herbst <kherbst@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22834>
This commit is contained in:

committed by
Marge Bot

parent
f4be2e3437
commit
d1e565a8eb
@@ -2301,6 +2301,7 @@ Converter::visit(nir_intrinsic_instr *insn)
|
|||||||
mask = 0x8;
|
mask = 0x8;
|
||||||
FALLTHROUGH;
|
FALLTHROUGH;
|
||||||
case nir_intrinsic_image_samples:
|
case nir_intrinsic_image_samples:
|
||||||
|
argCount = 0; /* No coordinates */
|
||||||
ty = TYPE_U32;
|
ty = TYPE_U32;
|
||||||
bindless = op == nir_intrinsic_bindless_image_samples;
|
bindless = op == nir_intrinsic_bindless_image_samples;
|
||||||
mask = 0x8;
|
mask = 0x8;
|
||||||
@@ -2308,6 +2309,7 @@ Converter::visit(nir_intrinsic_instr *insn)
|
|||||||
case nir_intrinsic_bindless_image_size:
|
case nir_intrinsic_bindless_image_size:
|
||||||
case nir_intrinsic_image_size:
|
case nir_intrinsic_image_size:
|
||||||
assert(nir_src_as_uint(insn->src[1]) == 0);
|
assert(nir_src_as_uint(insn->src[1]) == 0);
|
||||||
|
argCount = 0; /* No coordinates */
|
||||||
ty = TYPE_U32;
|
ty = TYPE_U32;
|
||||||
bindless = op == nir_intrinsic_bindless_image_size;
|
bindless = op == nir_intrinsic_bindless_image_size;
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user