From fdef2f0fd19ac6f2715a802d1e14b8ddfa094f11 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 17 Aug 2017 23:24:00 +0200 Subject: [PATCH] radeonsi/gfx9: properly handle imported textures with unexpected swizzle mode MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Cc: 17.2 Reviewed-by: Nicolai Hähnle --- src/amd/common/ac_surface.c | 5 +++++ src/gallium/drivers/radeon/r600_texture.c | 9 +++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c index 823a65d..610071a 100644 --- a/src/amd/common/ac_surface.c +++ b/src/amd/common/ac_surface.c @@ -1044,6 +1044,11 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib, case RADEON_SURF_MODE_1D: case RADEON_SURF_MODE_2D: + if (surf->flags & RADEON_SURF_IMPORTED) { + AddrSurfInfoIn.swizzleMode = surf->u.gfx9.surf.swizzle_mode; + break; + } + r = gfx9_get_preferred_swizzle_mode(addrlib, &AddrSurfInfoIn, false, &AddrSurfInfoIn.swizzleMode); if (r) diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c index 22850e0..47fd56f 100644 --- a/src/gallium/drivers/radeon/r600_texture.c +++ b/src/gallium/drivers/radeon/r600_texture.c @@ -356,7 +356,9 @@ static void r600_surface_import_metadata(struct r600_common_screen *rscreen, *array_mode = RADEON_SURF_MODE_LINEAR_ALIGNED; *is_scanout = metadata->u.gfx9.swizzle_mode == 0 || - metadata->u.gfx9.swizzle_mode % 4 == 2; + metadata->u.gfx9.swizzle_mode % 4 == 2; + + surf->u.gfx9.surf.swizzle_mode = metadata->u.gfx9.swizzle_mode; } else { surf->u.legacy.pipe_config = metadata->u.legacy.pipe_config; surf->u.legacy.bankw = metadata->u.legacy.bankw; @@ -1521,11 +1523,6 @@ static struct pipe_resource *r600_texture_from_handle(struct pipe_screen *screen if (rscreen->apply_opaque_metadata) rscreen->apply_opaque_metadata(rscreen, rtex, &metadata); - /* Validate that addrlib arrived at the same surface parameters. */ - if (rscreen->chip_class >= GFX9) { - assert(metadata.u.gfx9.swizzle_mode == surface.u.gfx9.surf.swizzle_mode); - } - assert(rtex->surface.tile_swizzle == 0); return &rtex->resource.b.b; } -- 2.7.4