Mesa (main): freedreno/a6xx: VPC_SO_NCOMP is actually VPC_SO_BUFFER_STRIDE

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jul 12 18:35:32 UTC 2022


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

Author: Connor Abbott <cwabbott0 at gmail.com>
Date:   Tue Jul 12 16:55:03 2022 +0200

freedreno/a6xx: VPC_SO_NCOMP is actually VPC_SO_BUFFER_STRIDE

This answers the question in a comment in turnip, and fixes some GL46
tests and piglit tests.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17494>

---

 src/freedreno/ci/freedreno-a630-fails.txt          |  8 -------
 src/freedreno/registers/adreno/a6xx.xml            |  2 +-
 src/freedreno/vulkan/tu_pipeline.c                 | 17 +++++--------
 src/gallium/drivers/freedreno/a6xx/fd6_program.c   | 28 ++++++++++------------
 src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt |  6 -----
 5 files changed, 19 insertions(+), 42 deletions(-)

diff --git a/src/freedreno/ci/freedreno-a630-fails.txt b/src/freedreno/ci/freedreno-a630-fails.txt
index dcd40383ceb..a5344d0b9db 100644
--- a/src/freedreno/ci/freedreno-a630-fails.txt
+++ b/src/freedreno/ci/freedreno-a630-fails.txt
@@ -176,14 +176,6 @@ spec at arb_timer_query@timestamp-get,Fail
 # Note: no FS, rasterizer discard enabled.
 spec at arb_transform_feedback3@arb_transform_feedback3-ext_interleaved_two_bufs_vs,Fail
 
-spec at arb_transform_feedback3@gl_skipcomponents1-1,Fail
-spec at arb_transform_feedback3@gl_skipcomponents1234,Fail
-spec at arb_transform_feedback3@gl_skipcomponents1-2,Fail
-spec at arb_transform_feedback3@gl_skipcomponents1-3,Fail
-spec at arb_transform_feedback3@gl_skipcomponents1-gl_nextbuffer,Fail
-spec at arb_transform_feedback3@gl_skipcomponents2,Fail
-spec at arb_transform_feedback3@gl_skipcomponents3,Fail
-spec at arb_transform_feedback3@gl_skipcomponents4,Fail
 spec at arb_vertex_type_2_10_10_10_rev@attrib-p-type-size-match,Fail
 
 spec at egl 1.4 at eglterminate then unbind context,Fail
diff --git a/src/freedreno/registers/adreno/a6xx.xml b/src/freedreno/registers/adreno/a6xx.xml
index 8af2dbce5a6..fe09f7761df 100644
--- a/src/freedreno/registers/adreno/a6xx.xml
+++ b/src/freedreno/registers/adreno/a6xx.xml
@@ -2500,7 +2500,7 @@ to upconvert to 32b float internally?
 	<array offset="0x921a" name="VPC_SO" stride="7" length="4">
 		<reg64 offset="0" name="BUFFER_BASE" type="waddress" align="32"/>
 		<reg32 offset="2" name="BUFFER_SIZE" low="2" high="31" shr="2"/>
-		<reg32 offset="3" name="NCOMP" low="0" high="9"/>  <!-- component count -->
+		<reg32 offset="3" name="BUFFER_STRIDE" low="0" high="9" shr="2"/>
 		<reg32 offset="4" name="BUFFER_OFFSET" low="2" high="31" shr="2"/>
 		<reg64 offset="5" name="FLUSH_BASE" type="waddress" align="32"/>
 	</array>
diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c
index 94ed546f5f1..e405079938f 100644
--- a/src/freedreno/vulkan/tu_pipeline.c
+++ b/src/freedreno/vulkan/tu_pipeline.c
@@ -789,7 +789,6 @@ tu6_setup_streamout(struct tu_cs *cs,
 #define A6XX_SO_PROG_DWORDS 64
    uint32_t prog[A6XX_SO_PROG_DWORDS * IR3_MAX_SO_STREAMS] = {};
    BITSET_DECLARE(valid_dwords, A6XX_SO_PROG_DWORDS * IR3_MAX_SO_STREAMS) = {0};
-   uint32_t ncomp[IR3_MAX_SO_BUFFERS] = {};
 
    /* TODO: streamout state should be in a non-GMEM draw state */
 
@@ -803,8 +802,6 @@ tu6_setup_streamout(struct tu_cs *cs,
       return;
    }
 
-   /* is there something to do with info->stride[i]? */
-
    for (unsigned i = 0; i < info->num_outputs; i++) {
       const struct ir3_stream_output *out = &info->output[i];
       unsigned k = out->register_index;
@@ -814,8 +811,6 @@ tu6_setup_streamout(struct tu_cs *cs,
       if (k >= v->outputs_count || v->outputs[k].regid == INVALID_REG)
          continue;
 
-      ncomp[out->output_buffer] += out->num_components;
-
       /* linkage map sorted by order frag shader wants things, so
        * a bit less ideal here..
        */
@@ -855,17 +850,17 @@ tu6_setup_streamout(struct tu_cs *cs,
    tu_cs_emit_pkt7(cs, CP_CONTEXT_REG_BUNCH, 10 + 2 * prog_count);
    tu_cs_emit(cs, REG_A6XX_VPC_SO_STREAM_CNTL);
    tu_cs_emit(cs, A6XX_VPC_SO_STREAM_CNTL_STREAM_ENABLE(info->streams_written) |
-                  COND(ncomp[0] > 0,
+                  COND(info->stride[0] > 0,
                        A6XX_VPC_SO_STREAM_CNTL_BUF0_STREAM(1 + info->buffer_to_stream[0])) |
-                  COND(ncomp[1] > 0,
+                  COND(info->stride[1] > 0,
                        A6XX_VPC_SO_STREAM_CNTL_BUF1_STREAM(1 + info->buffer_to_stream[1])) |
-                  COND(ncomp[2] > 0,
+                  COND(info->stride[2] > 0,
                        A6XX_VPC_SO_STREAM_CNTL_BUF2_STREAM(1 + info->buffer_to_stream[2])) |
-                  COND(ncomp[3] > 0,
+                  COND(info->stride[3] > 0,
                        A6XX_VPC_SO_STREAM_CNTL_BUF3_STREAM(1 + info->buffer_to_stream[3])));
    for (uint32_t i = 0; i < 4; i++) {
-      tu_cs_emit(cs, REG_A6XX_VPC_SO_NCOMP(i));
-      tu_cs_emit(cs, ncomp[i]);
+      tu_cs_emit(cs, REG_A6XX_VPC_SO_BUFFER_STRIDE(i));
+      tu_cs_emit(cs, info->stride[i]);
    }
    bool first = true;
    BITSET_FOREACH_RANGE(start, end, valid_dwords,
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.c b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
index 6eee94d8a10..202a47d3662 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_program.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
@@ -197,9 +197,7 @@ setup_stream_out(struct fd_context *ctx, struct fd6_program_state *state,
 #define A6XX_SO_PROG_DWORDS 64
    uint32_t prog[A6XX_SO_PROG_DWORDS * IR3_MAX_SO_STREAMS] = {};
    BITSET_DECLARE(valid_dwords, A6XX_SO_PROG_DWORDS * IR3_MAX_SO_STREAMS) = {0};
-   uint32_t ncomp[PIPE_MAX_SO_BUFFERS];
 
-   memset(ncomp, 0, sizeof(ncomp));
    memset(prog, 0, sizeof(prog));
 
    for (unsigned i = 0; i < strmout->num_outputs; i++) {
@@ -207,8 +205,6 @@ setup_stream_out(struct fd_context *ctx, struct fd6_program_state *state,
       unsigned k = out->register_index;
       unsigned idx;
 
-      ncomp[out->output_buffer] += out->num_components;
-
       /* linkage map sorted by order frag shader wants things, so
        * a bit less ideal here..
        */
@@ -255,18 +251,18 @@ setup_stream_out(struct fd_context *ctx, struct fd6_program_state *state,
    OUT_RING(ring, REG_A6XX_VPC_SO_STREAM_CNTL);
    OUT_RING(ring,
             A6XX_VPC_SO_STREAM_CNTL_STREAM_ENABLE(0x1) |
-               COND(ncomp[0] > 0, A6XX_VPC_SO_STREAM_CNTL_BUF0_STREAM(1)) |
-               COND(ncomp[1] > 0, A6XX_VPC_SO_STREAM_CNTL_BUF1_STREAM(1)) |
-               COND(ncomp[2] > 0, A6XX_VPC_SO_STREAM_CNTL_BUF2_STREAM(1)) |
-               COND(ncomp[3] > 0, A6XX_VPC_SO_STREAM_CNTL_BUF3_STREAM(1)));
-   OUT_RING(ring, REG_A6XX_VPC_SO_NCOMP(0));
-   OUT_RING(ring, ncomp[0]);
-   OUT_RING(ring, REG_A6XX_VPC_SO_NCOMP(1));
-   OUT_RING(ring, ncomp[1]);
-   OUT_RING(ring, REG_A6XX_VPC_SO_NCOMP(2));
-   OUT_RING(ring, ncomp[2]);
-   OUT_RING(ring, REG_A6XX_VPC_SO_NCOMP(3));
-   OUT_RING(ring, ncomp[3]);
+               COND(strmout->stride[0] > 0, A6XX_VPC_SO_STREAM_CNTL_BUF0_STREAM(1)) |
+               COND(strmout->stride[1] > 0, A6XX_VPC_SO_STREAM_CNTL_BUF1_STREAM(1)) |
+               COND(strmout->stride[2] > 0, A6XX_VPC_SO_STREAM_CNTL_BUF2_STREAM(1)) |
+               COND(strmout->stride[3] > 0, A6XX_VPC_SO_STREAM_CNTL_BUF3_STREAM(1)));
+   OUT_RING(ring, REG_A6XX_VPC_SO_BUFFER_STRIDE(0));
+   OUT_RING(ring, strmout->stride[0]);
+   OUT_RING(ring, REG_A6XX_VPC_SO_BUFFER_STRIDE(1));
+   OUT_RING(ring, strmout->stride[1]);
+   OUT_RING(ring, REG_A6XX_VPC_SO_BUFFER_STRIDE(2));
+   OUT_RING(ring, strmout->stride[2]);
+   OUT_RING(ring, REG_A6XX_VPC_SO_BUFFER_STRIDE(3));
+   OUT_RING(ring, strmout->stride[3]);
 
    bool first = true;
    BITSET_FOREACH_RANGE (start, end, valid_dwords,
diff --git a/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt b/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt
index 91560f4ed45..891835e81be 100644
--- a/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt
+++ b/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt
@@ -5,9 +5,6 @@ GTF-GL46.gtf21.GL3Tests.texture_lod_bias.texture_lod_bias_all,Fail
 GTF-GL46.gtf30.GL3Tests.framebuffer_blit.framebuffer_blit_functionality_multisampled_to_singlesampled_blit,Fail
 GTF-GL46.gtf30.GL3Tests.sgis_texture_lod.sgis_texture_lod_basic_lod_selection,Fail
 GTF-GL46.gtf32.GL3Tests.draw_elements_base_vertex.draw_elements_base_vertex_invalid_mode,Fail
-GTF-GL46.gtf40.GL3Tests.transform_feedback3.transform_feedback3_multiple_streams,Fail
-GTF-GL46.gtf40.GL3Tests.transform_feedback3.transform_feedback3_skip_components,Fail
-GTF-GL46.gtf40.GL3Tests.transform_feedback3.transform_feedback3_skip_multiple_buffers,Fail
 KHR-GL46.buffer_storage.map_persistent_draw,Fail
 KHR-GL46.copy_image.functional,Fail
 KHR-GL46.direct_state_access.buffers_functional,Fail
@@ -21,8 +18,5 @@ KHR-GL46.texture_view.view_classes,Fail
 KHR-GL46.vertex_attrib_64bit.vao,Fail
 KHR-Single-GL46.arrays_of_arrays_gl.AtomicUsage,Fail
 KHR-Single-GL46.arrays_of_arrays_gl.SubroutineFunctionCalls2,Crash
-KHR-Single-GL46.enhanced_layouts.xfb_capture_inactive_output_block_member,Fail
-KHR-Single-GL46.enhanced_layouts.xfb_capture_struct,Fail
-KHR-Single-GL46.enhanced_layouts.xfb_vertex_streams,Fail
 dEQP-GLES31.functional.texture.border_clamp.range_clamp.linear_srgb_color,Fail
 dEQP-GLES31.functional.texture.border_clamp.range_clamp.nearest_srgb_color,Fail



More information about the mesa-commit mailing list