Mesa (staging/22.0): radv: use flush vgt streamout like PAL does.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Apr 13 21:21:16 UTC 2022


Module: Mesa
Branch: staging/22.0
Commit: 063260047a072551fb519306841226e7769d0f56
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=063260047a072551fb519306841226e7769d0f56

Author: Dave Airlie <airlied at redhat.com>
Date:   Fri Apr  8 11:45:11 2022 +1000

radv: use flush vgt streamout like PAL does.

This uses WRITE_DATA on the ME engine to reset the register, to match what
PAL does on GFX9+.

This fixes
KHR-GL45.transform_feedback_overflow_query_ARB.multiple-streams-one-buffer-per-stream
on zink/radv.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15812>
(cherry picked from commit 165b016bbeedd4e8d1517a5e95949871cc55a123)

---

 .pick_status.json                | 2 +-
 src/amd/vulkan/radv_cmd_buffer.c | 9 ++++++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index b0a2f964f12..b7de2603fe6 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -1332,7 +1332,7 @@
         "description": "radv: use flush vgt streamout like PAL does.",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "because_sha": null
     },
     {
diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index a28de2d1d96..6211a1b6238 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -8703,7 +8703,14 @@ radv_flush_vgt_streamout(struct radv_cmd_buffer *cmd_buffer)
    unsigned reg_strmout_cntl;
 
    /* The register is at different places on different ASICs. */
-   if (cmd_buffer->device->physical_device->rad_info.chip_class >= GFX7) {
+   if (cmd_buffer->device->physical_device->rad_info.chip_class >= GFX9) {
+      reg_strmout_cntl = R_0300FC_CP_STRMOUT_CNTL;
+      radeon_emit(cs, PKT3(PKT3_WRITE_DATA, 3, 0));
+      radeon_emit(cs, S_370_DST_SEL(V_370_MEM_MAPPED_REGISTER) | S_370_ENGINE_SEL(V_370_ME));
+      radeon_emit(cs, R_0300FC_CP_STRMOUT_CNTL >> 2);
+      radeon_emit(cs, 0);
+      radeon_emit(cs, 0);
+   } else if (cmd_buffer->device->physical_device->rad_info.chip_class >= GFX7) {
       reg_strmout_cntl = R_0300FC_CP_STRMOUT_CNTL;
       radeon_set_uconfig_reg(cs, reg_strmout_cntl, 0);
    } else {



More information about the mesa-commit mailing list