Module: Mesa
Branch: master
Commit: 2ec420b2646974c0c11c763e58c859751feaeb88
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2ec420b2646974c0c11c763e58c859751feaeb88

Author: Eric Anholt <[email protected]>
Date:   Wed Nov 20 13:17:27 2019 -0800

freedreno: Introduce a fd_resource_tile_mode() helper.

Multiple places were doing the same thing to get the tile mode of a level,
so refactor it out.  This will make the shared resource helper transition
cleaner.

Acked-by: Rob Clark <[email protected]>

---

 src/gallium/drivers/freedreno/a5xx/fd5_blitter.c   |  6 ++----
 src/gallium/drivers/freedreno/a5xx/fd5_gmem.c      |  6 ++----
 src/gallium/drivers/freedreno/a5xx/fd5_resource.c  |  3 +--
 src/gallium/drivers/freedreno/a6xx/fd6_blitter.c   |  6 ++----
 src/gallium/drivers/freedreno/a6xx/fd6_gmem.c      | 14 ++------------
 src/gallium/drivers/freedreno/a6xx/fd6_image.c     |  6 +-----
 src/gallium/drivers/freedreno/a6xx/fd6_resource.c  |  6 +++---
 src/gallium/drivers/freedreno/freedreno_resource.h | 13 +++++++++++--
 8 files changed, 24 insertions(+), 36 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_blitter.c 
b/src/gallium/drivers/freedreno/a5xx/fd5_blitter.c
index 8fdf4c47c31..c3db9b983cd 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_blitter.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_blitter.c
@@ -342,10 +342,8 @@ emit_blit(struct fd_ringbuffer *ring, const struct 
pipe_blit_info *info)
        sfmt = fd5_pipe2color(info->src.format);
        dfmt = fd5_pipe2color(info->dst.format);
 
-       stile = fd_resource_level_linear(info->src.resource, info->src.level) ?
-                       TILE5_LINEAR : src->tile_mode;
-       dtile = fd_resource_level_linear(info->dst.resource, info->dst.level) ?
-                       TILE5_LINEAR : dst->tile_mode;
+       stile = fd_resource_tile_mode(info->src.resource, info->src.level);
+       dtile = fd_resource_tile_mode(info->dst.resource, info->dst.level);
 
        sswap = fd5_pipe2swap(info->src.format);
        dswap = fd5_pipe2swap(info->dst.format);
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_gmem.c 
b/src/gallium/drivers/freedreno/a5xx/fd5_gmem.c
index 9e2b48b1af1..12b00b80f26 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_gmem.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_gmem.c
@@ -92,8 +92,7 @@ emit_mrt(struct fd_ringbuffer *ring, unsigned nr_bufs,
                                stride = slice->pitch * rsc->cpp;
                                size = slice->size0;
 
-                               if (!fd_resource_level_linear(psurf->texture, 
psurf->u.tex.level))
-                                       tile_mode = rsc->tile_mode;
+                               tile_mode = 
fd_resource_tile_mode(psurf->texture, psurf->u.tex.level);
                        }
                }
 
@@ -632,8 +631,7 @@ emit_gmem2mem_surf(struct fd_batch *batch, uint32_t base,
        OUT_RING(ring, 0x00000000);   /* RB_BLIT_FLAG_DST_PITCH */
        OUT_RING(ring, 0x00000000);   /* RB_BLIT_FLAG_DST_ARRAY_PITCH */
 
-       tiled = rsc->tile_mode &&
-               !fd_resource_level_linear(psurf->texture, psurf->u.tex.level);
+       tiled = fd_resource_tile_mode(psurf->texture, psurf->u.tex.level);
 
        OUT_PKT4(ring, REG_A5XX_RB_RESOLVE_CNTL_3, 5);
        OUT_RING(ring, 0x00000004 |   /* XXX RB_RESOLVE_CNTL_3 */
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_resource.c 
b/src/gallium/drivers/freedreno/a5xx/fd5_resource.c
index efd699c0060..9b1a4927308 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_resource.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_resource.c
@@ -64,11 +64,10 @@ setup_slices(struct fd_resource *rsc, uint32_t alignment, 
enum pipe_format forma
 
        for (level = 0; level <= prsc->last_level; level++) {
                struct fd_resource_slice *slice = fd_resource_slice(rsc, level);
-               bool linear_level = fd_resource_level_linear(prsc, level);
                uint32_t aligned_height = height;
                uint32_t blocks;
 
-               if (rsc->tile_mode && !linear_level) {
+               if (fd_resource_tile_mode(prsc, level)) {
                        pitchalign = tile_alignment[rsc->cpp].pitchalign;
                        aligned_height = align(aligned_height, heightalign);
                } else {
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_blitter.c 
b/src/gallium/drivers/freedreno/a6xx/fd6_blitter.c
index 39c5ee6f339..bb146ed80e2 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_blitter.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_blitter.c
@@ -380,10 +380,8 @@ emit_blit_or_clear_texture(struct fd_context *ctx, struct 
fd_ringbuffer *ring,
        int blockheight = util_format_get_blockheight(info->src.format);
        int nelements;
 
-       stile = fd_resource_level_linear(info->src.resource, info->src.level) ?
-                       TILE6_LINEAR : src->tile_mode;
-       dtile = fd_resource_level_linear(info->dst.resource, info->dst.level) ?
-                       TILE6_LINEAR : dst->tile_mode;
+       stile = fd_resource_tile_mode(info->src.resource, info->src.level);
+       dtile = fd_resource_tile_mode(info->dst.resource, info->dst.level);
 
        sswap = stile ? WZYX : fd6_pipe2swap(info->src.format);
        dswap = dtile ? WZYX : fd6_pipe2swap(info->dst.format);
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_gmem.c 
b/src/gallium/drivers/freedreno/a6xx/fd6_gmem.c
index 1b8bea6f684..2b2f9b8c66e 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_gmem.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_gmem.c
@@ -100,11 +100,7 @@ emit_mrt(struct fd_ringbuffer *ring, struct 
pipe_framebuffer_state *pfb,
                stride = slice->pitch * rsc->cpp * pfb->samples;
                swap = rsc->tile_mode ? WZYX : fd6_pipe2swap(pformat);
 
-               if (rsc->tile_mode &&
-                       fd_resource_level_linear(psurf->texture, 
psurf->u.tex.level))
-                       tile_mode = TILE6_LINEAR;
-               else
-                       tile_mode = rsc->tile_mode;
+               tile_mode = fd_resource_tile_mode(psurf->texture, 
psurf->u.tex.level);
 
                if (psurf->u.tex.first_layer < psurf->u.tex.last_layer) {
                        layered = true;
@@ -999,13 +995,7 @@ emit_blit(struct fd_batch *batch,
        enum a3xx_color_swap swap = rsc->tile_mode ? WZYX : fd6_pipe2swap(pfmt);
        enum a3xx_msaa_samples samples =
                        fd_msaa_samples(rsc->base.nr_samples);
-       uint32_t tile_mode;
-
-       if (rsc->tile_mode &&
-               fd_resource_level_linear(&rsc->base, psurf->u.tex.level))
-               tile_mode = TILE6_LINEAR;
-       else
-               tile_mode = rsc->tile_mode;
+       uint32_t tile_mode = fd_resource_tile_mode(&rsc->base, 
psurf->u.tex.level);
 
        OUT_PKT4(ring, REG_A6XX_RB_BLIT_DST_INFO, 5);
        OUT_RING(ring,
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_image.c 
b/src/gallium/drivers/freedreno/a6xx/fd6_image.c
index c790ee6c5cb..92dab0f0c9a 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_image.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_image.c
@@ -232,13 +232,9 @@ fd6_emit_ssbo_tex(struct fd_ringbuffer *ring, const struct 
pipe_shader_buffer *p
 static void emit_image_ssbo(struct fd_ringbuffer *ring, struct fd6_image *img)
 {
        struct fd_resource *rsc = fd_resource(img->prsc);
-       enum a6xx_tile_mode tile_mode = TILE6_LINEAR;
+       enum a6xx_tile_mode tile_mode = fd_resource_tile_mode(img->prsc, 
img->level);
        bool ubwc_enabled = fd_resource_ubwc_enabled(rsc, img->level);
 
-       if (rsc->tile_mode && !fd_resource_level_linear(img->prsc, img->level)) 
{
-               tile_mode = rsc->tile_mode;
-       }
-
        OUT_RING(ring, A6XX_IBO_0_FMT(img->fmt) |
                A6XX_IBO_0_TILE_MODE(tile_mode));
        OUT_RING(ring, A6XX_IBO_1_WIDTH(img->width) |
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_resource.c 
b/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
index b52a7bbb439..89cf395b77b 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
@@ -85,11 +85,11 @@ setup_slices(struct fd_resource *rsc, uint32_t alignment, 
enum pipe_format forma
 
        for (level = 0; level <= prsc->last_level; level++) {
                struct fd_resource_slice *slice = fd_resource_slice(rsc, level);
-               bool linear_level = fd_resource_level_linear(prsc, level);
+               uint32_t tile_mode = fd_resource_tile_mode(prsc, level);
                uint32_t width, height;
 
                /* tiled levels of 3D textures are rounded up to PoT 
dimensions: */
-               if ((prsc->target == PIPE_TEXTURE_3D) && rsc->tile_mode && 
!linear_level) {
+               if ((prsc->target == PIPE_TEXTURE_3D) && tile_mode) {
                        width = twidth;
                        height = theight;
                } else {
@@ -99,7 +99,7 @@ setup_slices(struct fd_resource *rsc, uint32_t alignment, 
enum pipe_format forma
                uint32_t aligned_height = height;
                uint32_t blocks;
 
-               if (rsc->tile_mode && !linear_level) {
+               if (tile_mode) {
                        pitchalign = tile_alignment[ta].pitchalign;
                        aligned_height = align(aligned_height,
                                        tile_alignment[ta].heightalign);
diff --git a/src/gallium/drivers/freedreno/freedreno_resource.h 
b/src/gallium/drivers/freedreno/freedreno_resource.h
index 1d3931b2a03..14c06ded44c 100644
--- a/src/gallium/drivers/freedreno/freedreno_resource.h
+++ b/src/gallium/drivers/freedreno/freedreno_resource.h
@@ -202,11 +202,20 @@ fd_resource_level_linear(const struct pipe_resource 
*prsc, int level)
        return false;
 }
 
+static inline uint32_t
+fd_resource_tile_mode(struct pipe_resource *prsc, int level)
+{
+       struct fd_resource *rsc = fd_resource(prsc);
+       if (rsc->tile_mode && fd_resource_level_linear(&rsc->base, level))
+               return 0; /* linear */
+       else
+               return rsc->tile_mode;
+}
+
 static inline bool
 fd_resource_ubwc_enabled(struct fd_resource *rsc, int level)
 {
-       return rsc->ubwc_size && rsc->tile_mode &&
-                       !fd_resource_level_linear(&rsc->base, level);
+       return rsc->ubwc_size && fd_resource_tile_mode(&rsc->base, level);
 }
 
 /* access # of samples, with 0 normalized to 1 (which is what we care about

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to