From 5d785f99b75c92220205862e7d6d4d4a2f503143 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 17 Apr 2020 20:19:26 -0400 Subject: [PATCH] ac/surface: match get_display_flag() with expectations for is_displayable Acked-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/amd/common/ac_surface.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c index 943a9e13708..d455a0f12e3 100644 --- a/src/amd/common/ac_surface.c +++ b/src/amd/common/ac_surface.c @@ -413,7 +413,9 @@ static bool get_display_flag(const struct ac_surf_config *config, unsigned num_channels = config->info.num_channels; unsigned bpe = surf->bpe; - if (!(surf->flags & RADEON_SURF_Z_OR_SBUFFER) && + if (!config->is_3d && + !config->is_cube && + !(surf->flags & RADEON_SURF_Z_OR_SBUFFER) && surf->flags & RADEON_SURF_SCANOUT && config->info.samples <= 1 && surf->blk_w <= 2 && surf->blk_h == 1) { @@ -1612,6 +1614,7 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib, surf->tc_compatible_htile_allowed = surf->htile_size != 0; /* Query whether the surface is displayable. */ + /* This is only useful for surfaces that are allocated without SCANOUT. */ bool displayable = false; if (!config->is_3d && !config->is_cube) { r = Addr2IsValidDisplaySwizzleMode(addrlib, surf->u.gfx9.surf.swizzle_mode, @@ -1628,6 +1631,9 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib, } surf->is_displayable = displayable; + /* Validate that we allocated a displayable surface if requested. */ + assert(!AddrSurfInfoIn.flags.display || surf->is_displayable); + switch (surf->u.gfx9.surf.swizzle_mode) { /* S = standard. */ case ADDR_SW_256B_S: -- 2.30.2