[Mesa-dev] [PATCH] radeonsi: don't ignore pitch for imported textures

Marek Olšák maraeo at gmail.com
Fri Jan 19 03:52:32 UTC 2018


I know. It's not been formally reviewed yet though.

marek

On Fri, Jan 19, 2018 at 4:34 AM, Dieter Nützel <Dieter at nuetzel-hh.de> wrote:
> Ping!
>
>
> Am 11.01.2018 04:45, schrieb Dieter Nützel:
>>
>> Tested-by: Dieter Nützel <Dieter at nuetzel-hh.de>
>>
>> on RX580 with UH, UV, glmark2 and Blender 2.79 with and without nir.
>>
>> Dieter
>>
>> Am 10.01.2018 20:49, schrieb Marek Olšák:
>>>
>>> From: Marek Olšák <marek.olsak at amd.com>
>>>
>>> Cc: 17.2 17.3 <mesa-stable at lists.freedesktop.org>
>>> ---
>>>  src/gallium/drivers/radeon/r600_texture.c | 14 ++++++++++++--
>>>  1 file changed, 12 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/src/gallium/drivers/radeon/r600_texture.c
>>> b/src/gallium/drivers/radeon/r600_texture.c
>>> index 34b3ab0..36eff40 100644
>>> --- a/src/gallium/drivers/radeon/r600_texture.c
>>> +++ b/src/gallium/drivers/radeon/r600_texture.c
>>> @@ -291,25 +291,35 @@ static int r600_init_surface(struct si_screen
>>> *sscreen,
>>>                 flags |= RADEON_SURF_IMPORTED | RADEON_SURF_SHAREABLE;
>>>         if (!(ptex->flags & R600_RESOURCE_FLAG_FORCE_TILING))
>>>                 flags |= RADEON_SURF_OPTIMIZE_FOR_SPACE;
>>>
>>>         r = sscreen->ws->surface_init(sscreen->ws, ptex, flags, bpe,
>>>                                       array_mode, surface);
>>>         if (r) {
>>>                 return r;
>>>         }
>>>
>>> +       unsigned pitch = pitch_in_bytes_override / bpe;
>>> +
>>>         if (sscreen->info.chip_class >= GFX9) {
>>> -               assert(!pitch_in_bytes_override ||
>>> -                      pitch_in_bytes_override ==
>>> surface->u.gfx9.surf_pitch * bpe);
>>> +               if (pitch) {
>>> +                       surface->u.gfx9.surf_pitch = pitch;
>>> +                       surface->u.gfx9.surf_slice_size =
>>> +                               (uint64_t)pitch *
>>> surface->u.gfx9.surf_height * bpe;
>>> +               }
>>>                 surface->u.gfx9.surf_offset = offset;
>>>         } else {
>>> +               if (pitch) {
>>> +                       surface->u.legacy.level[0].nblk_x = pitch;
>>> +                       surface->u.legacy.level[0].slice_size_dw =
>>> +                               ((uint64_t)pitch *
>>> surface->u.legacy.level[0].nblk_y * bpe) / 4;
>>> +               }
>>>                 if (offset) {
>>>                         for (i = 0; i <
>>> ARRAY_SIZE(surface->u.legacy.level); ++i)
>>>                                 surface->u.legacy.level[i].offset +=
>>> offset;
>>>                 }
>>>         }
>>>         return 0;
>>>  }
>>>
>>>  static void r600_texture_init_metadata(struct si_screen *sscreen,
>>>                                        struct r600_texture *rtex,
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list