radeonsi: don't ignore pitch for imported textures
authorMarek Olšák <marek.olsak@amd.com>
Wed, 10 Jan 2018 12:37:08 +0000 (13:37 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 24 Jan 2018 20:08:45 +0000 (21:08 +0100)
Cc: 17.2 17.3 <mesa-stable@lists.freedesktop.org>
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeon/r600_texture.c

index 34b3ab0cdeb6f577dddc932448637d8cadc37591..36eff40949f975a61d31ddee6f36f2c5a00768ad 100644 (file)
@@ -298,11 +298,21 @@ static int r600_init_surface(struct si_screen *sscreen,
                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;