ac/surface: match get_display_flag() with expectations for is_displayable
authorMarek Olšák <marek.olsak@amd.com>
Sat, 18 Apr 2020 00:19:26 +0000 (20:19 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 29 Apr 2020 14:53:25 +0000 (14:53 +0000)
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4697>

src/amd/common/ac_surface.c

index 943a9e13708adc6dace5d0aae1e1508068daf140..d455a0f12e3b4562dc6e240d53fdb0613d8fa222 100644 (file)
@@ -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: