[Mesa-dev] [Mesa-stable] [PATCH] radeonsi: Fix crash on shaders using MSAA image load/store

Marek Olšák maraeo at gmail.com
Thu May 31 18:56:51 UTC 2018


Yes, I'm OK with pushing this.

Marek

On Thu, May 31, 2018 at 3:53 AM, Alex Smith <asmith at feralinteractive.com>
wrote:

> Hmm, the crash I was seeing is in RenderDoc from one of its own shaders.
> Maybe it's missing some support checks? I'll look into it.
>
> If you're happy with this though, I'll push it.
>
> Thanks,
> Alex
>
> On 30 May 2018 at 21:17, Marek Olšák <maraeo at gmail.com> wrote:
>
>> Reviewed-by: Marek Olšák <marek.olsak at amd.com>
>>
>> Note that radeonsi doesn't support MSAA images.
>>
>> Marek
>>
>> On Wed, May 30, 2018 at 4:48 AM, Alex Smith <asmith at feralinteractive.com>
>> wrote:
>>
>>> 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 <asmith at feralinteractive.com>
>>> Cc: "18.1" <mesa-stable at lists.freedesktop.org>
>>> ---
>>>  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_di
>>> m(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);
>>> --
>>> 2.14.3
>>>
>>> _______________________________________________
>>> mesa-stable mailing list
>>> mesa-stable at lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/mesa-stable
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180531/7fe90c2f/attachment.html>


More information about the mesa-dev mailing list