Module: Mesa Branch: master Commit: 01a2414045bd819267821423dbf77c3655cc214d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=01a2414045bd819267821423dbf77c3655cc214d
Author: Alex Smith <[email protected]> Date: Wed May 30 09:39:27 2018 +0100 radeonsi: Fix crash on shaders using MSAA image load/store The value returned by tgsi_util_get_texture_coord_dim() does not account for the sample index. This means image_fetch_coords() will not fetch it, leading to a null deref in ac_build_image_opcode() which expects it to be present (the return value of ac_num_coords() *does* include the sample index). Signed-off-by: Alex Smith <[email protected]> Cc: "18.1" <[email protected]> Reviewed-by: Marek Olšák <[email protected]> --- src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c index 1c244fa3c0..d0dd4e7cab 100644 --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c @@ -276,10 +276,16 @@ static void image_fetch_coords( struct si_shader_context *ctx = si_shader_context(bld_base); LLVMBuilderRef builder = ctx->ac.builder; unsigned target = inst->Memory.Texture; - const unsigned num_coords = tgsi_util_get_texture_coord_dim(target); + unsigned num_coords = tgsi_util_get_texture_coord_dim(target); LLVMValueRef tmp; int chan; + if (target == TGSI_TEXTURE_2D_MSAA || + target == TGSI_TEXTURE_2D_ARRAY_MSAA) { + /* Need the sample index as well. */ + num_coords++; + } + for (chan = 0; chan < num_coords; ++chan) { tmp = lp_build_emit_fetch(bld_base, inst, src, chan); tmp = ac_to_integer(&ctx->ac, tmp); _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
