On 10.01.2018 20:49, Marek Olšák wrote:
From: Marek Olšák <marek.ol...@amd.com>

Please add a bug report or reference to what fails without it.

It does make sense though, so

Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>



Cc: 17.2 17.3 <mesa-sta...@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,



--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to