Mesa (main): freedreno/a5xx: re-express buffer textures more logically

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Nov 16 05:07:24 UTC 2021


Module: Mesa
Branch: main
Commit: 8c041f4bf3cef472738246ef978ad0be3c28e798
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8c041f4bf3cef472738246ef978ad0be3c28e798

Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date:   Mon Nov 15 18:39:31 2021 -0500

freedreno/a5xx: re-express buffer textures more logically

Instead of treating it as 2 bits to enable, make BUFFER a type (and
extend the bitfield width), and then add a separate BUFFER bit
(ostensibly to perform the width/height concatenation but who knows).

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13805>

---

 src/freedreno/registers/adreno/a5xx.xml          | 6 +++---
 src/gallium/drivers/freedreno/a5xx/fd5_image.c   | 2 +-
 src/gallium/drivers/freedreno/a5xx/fd5_texture.c | 2 +-
 src/gallium/drivers/freedreno/a5xx/fd5_texture.h | 1 +
 4 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/freedreno/registers/adreno/a5xx.xml b/src/freedreno/registers/adreno/a5xx.xml
index 2b0b31a1f21..13f2f98833a 100644
--- a/src/freedreno/registers/adreno/a5xx.xml
+++ b/src/freedreno/registers/adreno/a5xx.xml
@@ -2893,6 +2893,7 @@ different border-color states per texture..  Looks something like:
 		<value name="A5XX_TEX_2D" value="1"/>
 		<value name="A5XX_TEX_CUBE" value="2"/>
 		<value name="A5XX_TEX_3D" value="3"/>
+		<value name="A5XX_TEX_BUFFER" value="4"/>
 	</enum>
 	<reg32 offset="0" name="0">
 		<bitfield name="TILE_MODE" low="0" high="1" type="a5xx_tile_mode"/>
@@ -2918,13 +2919,12 @@ different border-color states per texture..  Looks something like:
 		b31 is probably the 'BUFFER' bit.. it is the one that changes
 		behavior of texture in dEQP-GLES31.functional.texture.texture_buffer.render.as_fragment_texture.buffer_size_131071
 		 -->
-		<bitfield name="UNK4" pos="4" type="boolean"/>
+		<bitfield name="BUFFER" pos="4" type="boolean"/>
 		<!-- minimum pitch (for mipmap levels): log2(pitchalign / 64) -->
 		<bitfield name="PITCHALIGN" low="0" high="3" type="uint"/>
 		<doc>Pitch in bytes (so actually stride)</doc>
 		<bitfield name="PITCH" low="7" high="28" type="uint"/>
-		<bitfield name="TYPE" low="29" high="30" type="a5xx_tex_type"/>
-		<bitfield name="UNK31" pos="31" type="boolean"/>
+		<bitfield name="TYPE" low="29" high="31" type="a5xx_tex_type"/>
 	</reg32>
 	<reg32 offset="3" name="3">
 		<!--
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_image.c b/src/gallium/drivers/freedreno/a5xx/fd5_image.c
index 975fc800605..8690b1651b1 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_image.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_image.c
@@ -154,7 +154,7 @@ emit_image_tex(struct fd_ringbuffer *ring, unsigned slot, struct fd5_image *img,
    OUT_RING(ring, A5XX_TEX_CONST_1_WIDTH(img->width) |
                      A5XX_TEX_CONST_1_HEIGHT(img->height));
    OUT_RING(ring,
-            COND(img->buffer, A5XX_TEX_CONST_2_UNK4 | A5XX_TEX_CONST_2_UNK31) |
+            COND(img->buffer, A5XX_TEX_CONST_2_BUFFER) |
                A5XX_TEX_CONST_2_TYPE(img->type) |
                A5XX_TEX_CONST_2_PITCH(img->pitch));
    OUT_RING(ring, A5XX_TEX_CONST_3_ARRAY_PITCH(img->array_pitch));
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_texture.c b/src/gallium/drivers/freedreno/a5xx/fd5_texture.c
index 2dbadddf719..908c8e7366d 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_texture.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_texture.c
@@ -176,7 +176,7 @@ fd5_sampler_view_create(struct pipe_context *pctx, struct pipe_resource *prsc,
       lvl = 0;
       so->texconst1 = A5XX_TEX_CONST_1_WIDTH(elements & MASK(15)) |
                       A5XX_TEX_CONST_1_HEIGHT(elements >> 15);
-      so->texconst2 = A5XX_TEX_CONST_2_UNK4 | A5XX_TEX_CONST_2_UNK31;
+      so->texconst2 = A5XX_TEX_CONST_2_BUFFER;
       so->offset = cso->u.buf.offset;
    } else {
       unsigned miplevels;
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_texture.h b/src/gallium/drivers/freedreno/a5xx/fd5_texture.h
index aeff1689020..9f5350af939 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_texture.h
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_texture.h
@@ -69,6 +69,7 @@ fd5_tex_type(unsigned target)
    default:
       assert(0);
    case PIPE_BUFFER:
+      return A5XX_TEX_BUFFER;
    case PIPE_TEXTURE_1D:
    case PIPE_TEXTURE_1D_ARRAY:
       return A5XX_TEX_1D;



More information about the mesa-commit mailing list