From: Nicolai Hähnle <nicolai.haeh...@amd.com>

Vulkan needs it.
---
 src/amd/common/ac_surface.c | 4 ++++
 src/amd/common/ac_surface.h | 2 ++
 2 files changed, 6 insertions(+)

diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c
index 486d3f8..376eb47 100644
--- a/src/amd/common/ac_surface.c
+++ b/src/amd/common/ac_surface.c
@@ -339,20 +339,21 @@ static int gfx6_compute_level(ADDR_HANDLE addrlib,
                AddrHtileIn->pTileInfo = AddrSurfInfoOut->pTileInfo;
                AddrHtileIn->tileIndex = AddrSurfInfoOut->tileIndex;
                AddrHtileIn->macroModeIndex = AddrSurfInfoOut->macroModeIndex;
 
                ret = AddrComputeHtileInfo(addrlib,
                                           AddrHtileIn,
                                           AddrHtileOut);
 
                if (ret == ADDR_OK) {
                        surf->htile_size = AddrHtileOut->htileBytes;
+                       surf->htile_slice_size = AddrHtileOut->sliceSize;
                        surf->htile_alignment = AddrHtileOut->baseAlign;
                }
        }
 
        return 0;
 }
 
 #define   G_009910_MICRO_TILE_MODE(x)          (((x) >> 0) & 0x03)
 #define   G_009910_MICRO_TILE_MODE_NEW(x)      (((x) >> 22) & 0x07)
 
@@ -569,20 +570,21 @@ static int gfx6_compute_surface(ADDR_HANDLE addrlib,
                        /* Addrlib doesn't set this if tileIndex is forced like 
above. */
                        AddrSurfInfoOut.macroModeIndex = 
cik_get_macro_tile_index(surf);
                }
        }
 
        surf->num_dcc_levels = 0;
        surf->surf_size = 0;
        surf->dcc_size = 0;
        surf->dcc_alignment = 1;
        surf->htile_size = 0;
+       surf->htile_slice_size = 0;
        surf->htile_alignment = 1;
 
        /* Calculate texture layout information. */
        for (level = 0; level < config->info.levels; level++) {
                r = gfx6_compute_level(addrlib, config, surf, false, level, 
compressed,
                                       &AddrSurfInfoIn, &AddrSurfInfoOut,
                                       &AddrDccIn, &AddrDccOut, &AddrHtileIn, 
&AddrHtileOut);
                if (r)
                        return r;
 
@@ -764,20 +766,21 @@ static int gfx9_compute_miptree(ADDR_HANDLE addrlib,
                hin.numSlices = in->numSlices;
                hin.numMipLevels = in->numMipLevels;
 
                ret = Addr2ComputeHtileInfo(addrlib, &hin, &hout);
                if (ret != ADDR_OK)
                        return ret;
 
                surf->u.gfx9.htile.rb_aligned = hin.hTileFlags.rbAligned;
                surf->u.gfx9.htile.pipe_aligned = hin.hTileFlags.pipeAligned;
                surf->htile_size = hout.htileBytes;
+               surf->htile_slice_size = hout.sliceSize;
                surf->htile_alignment = hout.baseAlign;
        } else {
                /* DCC */
                if (!(surf->flags & RADEON_SURF_DISABLE_DCC) &&
                    !(surf->flags & RADEON_SURF_SCANOUT) &&
                    !compressed &&
                    in->swizzleMode != ADDR_SW_LINEAR &&
                    /* TODO: We could support DCC with MSAA. */
                    in->numSamples == 1) {
                        ADDR2_COMPUTE_DCCINFO_INPUT din = {0};
@@ -950,20 +953,21 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib,
 
        default:
                assert(0);
        }
 
        surf->u.gfx9.resource_type = AddrSurfInfoIn.resourceType;
 
        surf->surf_size = 0;
        surf->dcc_size = 0;
        surf->htile_size = 0;
+       surf->htile_slice_size = 0;
        surf->u.gfx9.surf_offset = 0;
        surf->u.gfx9.stencil_offset = 0;
        surf->u.gfx9.fmask_size = 0;
        surf->u.gfx9.cmask_size = 0;
 
        /* Calculate texture layout information. */
        r = gfx9_compute_miptree(addrlib, surf, compressed, &AddrSurfInfoIn);
        if (r)
                return r;
 
diff --git a/src/amd/common/ac_surface.h b/src/amd/common/ac_surface.h
index 9905be9..bfd2a95 100644
--- a/src/amd/common/ac_surface.h
+++ b/src/amd/common/ac_surface.h
@@ -159,20 +159,22 @@ struct radeon_surf {
     uint32_t                    flags;
 
     /* These are return values. Some of them can be set by the caller, but
      * they will be treated as hints (e.g. bankw, bankh) and might be
      * changed by the calculator.
      */
     uint64_t                    surf_size;
     uint64_t                    dcc_size;
     uint64_t                    htile_size;
 
+    uint32_t                    htile_slice_size;
+
     uint32_t                    surf_alignment;
     uint32_t                    dcc_alignment;
     uint32_t                    htile_alignment;
 
     union {
         /* R600-VI return values.
          *
          * Some of them can be set by the caller if certain parameters are
          * desirable. The allocator will try to obey them.
          */
-- 
2.9.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to