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

Author: Christian Gmeiner <[email protected]>
Date:   Sat Jan  4 07:13:47 2020 +0100

etnaviv: simplify linear stride implementation

As documented in the galcore kernel driver "only LOD0 is valid
for this register". This makes sense, as NTE's LINEAR_STRIDE is
only capable to store one linear stride value per sampler.
This fixes linear textures in sampler slot != 0.

Fixes: 34458c1cf6c ("etnaviv: add linear sampling support")
CC: <[email protected]>
Signed-off-by: Christian Gmeiner <[email protected]>
Reviewed-by: Michael Tretter <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3285>

---

 src/gallium/drivers/etnaviv/etnaviv_texture_state.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/etnaviv/etnaviv_texture_state.c 
b/src/gallium/drivers/etnaviv/etnaviv_texture_state.c
index 4c11b114ac0..8684275ebd9 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_texture_state.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_texture_state.c
@@ -68,7 +68,7 @@ struct etna_sampler_view {
    uint32_t TE_SAMPLER_SIZE;
    uint32_t TE_SAMPLER_LOG_SIZE;
    uint32_t TE_SAMPLER_ASTC0;
-   uint32_t TE_SAMPLER_LINEAR_STRIDE[VIVS_TE_SAMPLER_LINEAR_STRIDE__LEN];
+   uint32_t TE_SAMPLER_LINEAR_STRIDE;  /* only LOD0 */
    struct etna_reloc TE_SAMPLER_LOD_ADDR[VIVS_TE_SAMPLER_LOD_ADDR__LEN];
    unsigned min_lod, max_lod; /* 5.5 fixp */
 
@@ -211,12 +211,11 @@ etna_create_sampler_view_state(struct pipe_context *pctx, 
struct pipe_resource *
    if (res->layout == ETNA_LAYOUT_LINEAR && 
!util_format_is_compressed(so->format)) {
       sv->TE_SAMPLER_CONFIG0 |= 
VIVS_TE_SAMPLER_CONFIG0_ADDRESSING_MODE(TEXTURE_ADDRESSING_MODE_LINEAR);
 
-      for (int lod = 0; lod <= res->base.last_level; ++lod)
-         sv->TE_SAMPLER_LINEAR_STRIDE[lod] = res->levels[lod].stride;
-
+      assert(res->base.last_level == 0);
+      sv->TE_SAMPLER_LINEAR_STRIDE = res->levels[0].stride;
    } else {
       sv->TE_SAMPLER_CONFIG0 |= 
VIVS_TE_SAMPLER_CONFIG0_ADDRESSING_MODE(TEXTURE_ADDRESSING_MODE_TILED);
-      memset(&sv->TE_SAMPLER_LINEAR_STRIDE, 0, 
sizeof(sv->TE_SAMPLER_LINEAR_STRIDE));
+      sv->TE_SAMPLER_LINEAR_STRIDE = 0;
    }
 
    sv->TE_SAMPLER_CONFIG1 |= COND(ext, 
VIVS_TE_SAMPLER_CONFIG1_FORMAT_EXT(format)) |
@@ -406,12 +405,11 @@ etna_emit_texture_state(struct etna_context *ctx)
       }
    }
    if (unlikely(dirty & (ETNA_DIRTY_SAMPLER_VIEWS))) {
-      for (int y = 0; y < VIVS_TE_SAMPLER_LINEAR_STRIDE__LEN; ++y) {
-         for (int x = 0; x < VIVS_TE_SAMPLER__LEN; ++x) {
-            if ((1 << x) & active_samplers) {
-               struct etna_sampler_view *sv = 
etna_sampler_view(ctx->sampler_view[x]);
-               /*02C00*/ EMIT_STATE(TE_SAMPLER_LINEAR_STRIDE(x, y), 
sv->TE_SAMPLER_LINEAR_STRIDE[y]);
-            }
+      /* only LOD0 is valid for this register */
+      for (int x = 0; x < VIVS_TE_SAMPLER__LEN; ++x) {
+         if ((1 << x) & active_samplers) {
+            struct etna_sampler_view *sv = 
etna_sampler_view(ctx->sampler_view[x]);
+            /*02C00*/ EMIT_STATE(TE_SAMPLER_LINEAR_STRIDE(0, x), 
sv->TE_SAMPLER_LINEAR_STRIDE);
          }
       }
    }

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

Reply via email to