radeonsi: don't use 1D tiling for Z/S on VI to get TC-compatible HTILE
authorMarek Olšák <marek.olsak@amd.com>
Mon, 5 Jun 2017 17:59:06 +0000 (19:59 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 7 Jun 2017 17:38:42 +0000 (19:38 +0200)
It's always good to have fewer decompress blits.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeon/r600_texture.c

index 4d72b86f4e47fcad460d856771652d1b5a75c19a..046fb906a2f35ea88c5fe88125ea5a48327f272b 100644 (file)
@@ -1281,6 +1281,8 @@ r600_choose_tiling(struct r600_common_screen *rscreen,
 {
        const struct util_format_description *desc = util_format_description(templ->format);
        bool force_tiling = templ->flags & R600_RESOURCE_FLAG_FORCE_TILING;
+       bool is_depth_stencil = util_format_is_depth_or_stencil(templ->format) &&
+                               !(templ->flags & R600_RESOURCE_FLAG_FLUSHED_DEPTH);
 
        /* MSAA resources must be 2D tiled. */
        if (templ->nr_samples > 1)
@@ -1290,6 +1292,14 @@ r600_choose_tiling(struct r600_common_screen *rscreen,
        if (templ->flags & R600_RESOURCE_FLAG_TRANSFER)
                return RADEON_SURF_MODE_LINEAR_ALIGNED;
 
+       /* Avoid Z/S decompress blits by forcing TC-compatible HTILE on VI,
+        * which requires 2D tiling.
+        */
+       if (rscreen->chip_class == VI &&
+           is_depth_stencil &&
+           (templ->flags & PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY))
+               return RADEON_SURF_MODE_2D;
+
        /* r600g: force tiling on TEXTURE_2D and TEXTURE_3D compute resources. */
        if (rscreen->chip_class >= R600 && rscreen->chip_class <= CAYMAN &&
            (templ->bind & PIPE_BIND_COMPUTE_RESOURCE) &&
@@ -1300,9 +1310,9 @@ r600_choose_tiling(struct r600_common_screen *rscreen,
        /* Handle common candidates for the linear mode.
         * Compressed textures and DB surfaces must always be tiled.
         */
-       if (!force_tiling && !util_format_is_compressed(templ->format) &&
-           (!util_format_is_depth_or_stencil(templ->format) ||
-            templ->flags & R600_RESOURCE_FLAG_FLUSHED_DEPTH)) {
+       if (!force_tiling &&
+           !is_depth_stencil &&
+           !util_format_is_compressed(templ->format)) {
                if (rscreen->debug_flags & DBG_NO_TILING)
                        return RADEON_SURF_MODE_LINEAR_ALIGNED;