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

Author: Connor Abbott <[email protected]>
Date:   Wed Sep 23 10:51:48 2020 +0200

freedreno/a6xx: Update SO registers for streams

These seem to be unchanged from a5xx, so a5xx could probably be updated
too.

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

---

 src/freedreno/.gitlab-ci/reference/crash.log       | 24 ++++-----
 ...w.indexed.indirect_draw_count.triangle_list.log | 18 +++----
 src/freedreno/.gitlab-ci/reference/fd-clouds.log   | 20 ++++----
 src/freedreno/registers/adreno/a6xx.xml            | 60 +++++++++++++++++-----
 src/freedreno/vulkan/tu_cmd_buffer.c               |  2 +-
 src/freedreno/vulkan/tu_pipeline.c                 | 17 +++---
 src/gallium/drivers/freedreno/a6xx/fd6_emit.c      |  8 +--
 src/gallium/drivers/freedreno/a6xx/fd6_program.c   | 14 ++---
 8 files changed, 98 insertions(+), 65 deletions(-)

diff --git a/src/freedreno/.gitlab-ci/reference/crash.log 
b/src/freedreno/.gitlab-ci/reference/crash.log
index 1cef3af2803..5450dd5b8ec 100644
--- a/src/freedreno/.gitlab-ci/reference/crash.log
+++ b/src/freedreno/.gitlab-ci/reference/crash.log
@@ -7239,7 +7239,7 @@ clusters:
        00000000        VPC_VAR[0x1].DISABLE: 0
        00000000        VPC_VAR[0x2].DISABLE: 0
        00000000        VPC_VAR[0x3].DISABLE: 0
-       00000000        VPC_SO_CNTL: { 0 }
+       00000000        VPC_SO_CNTL: { ADDR = 0 }
        00000000        VPC_SO_STREAM_COUNTS_LO: 0
        00000000        VPC_SO_STREAM_COUNTS_HI: 0
        00000000        VPC_SO[0].BUFFER_BASE: 0
@@ -7276,7 +7276,7 @@ clusters:
        00ff0001        VPC_GS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        00ff0001        VPC_DS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        ff00ff00        VPC_CNTL_0: { NUMNONPOSVAR = 0 | PRIMIDLOC = 255 | 
VIEWIDLOC = 255 }
-       00000000        VPC_SO_BUF_CNTL: { 0 }
+       00000000        VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 
| BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 }
        00000000        VPC_SO_DISABLE: { 0 }
     - context: 1
        00000000        VPC_VARYING_INTERP[0].MODE: 0
@@ -7301,7 +7301,7 @@ clusters:
        00000000        VPC_VAR[0x1].DISABLE: 0
        00000000        VPC_VAR[0x2].DISABLE: 0
        00000000        VPC_VAR[0x3].DISABLE: 0
-       00000000        VPC_SO_CNTL: { 0 }
+       00000000        VPC_SO_CNTL: { ADDR = 0 }
        00000000        VPC_SO_STREAM_COUNTS_LO: 0
        00000000        VPC_SO_STREAM_COUNTS_HI: 0
        00000000        VPC_SO[0].BUFFER_BASE: 0
@@ -7338,7 +7338,7 @@ clusters:
        00ff0001        VPC_GS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        00ff0001        VPC_DS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        ff00ff00        VPC_CNTL_0: { NUMNONPOSVAR = 0 | PRIMIDLOC = 255 | 
VIEWIDLOC = 255 }
-       00000000        VPC_SO_BUF_CNTL: { 0 }
+       00000000        VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 
| BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 }
        00000000        VPC_SO_DISABLE: { 0 }
   - cluster-name: CLUSTER_FE
     - context: 0
@@ -7347,7 +7347,7 @@ clusters:
        00ff0001        VPC_GS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        00ff0001        VPC_DS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        ff00ff00        VPC_CNTL_0: { NUMNONPOSVAR = 0 | PRIMIDLOC = 255 | 
VIEWIDLOC = 255 }
-       00000000        VPC_SO_BUF_CNTL: { 0 }
+       00000000        VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 
| BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 }
        00000000        VPC_SO_DISABLE: { 0 }
        00000000        PC_TESS_NUM_VERTEX: 0
        00000000        PC_HS_INPUT_SIZE: { SIZE = 0 }
@@ -7607,7 +7607,7 @@ clusters:
        00ff0001        VPC_GS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        00ff0001        VPC_DS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        ff00ff00        VPC_CNTL_0: { NUMNONPOSVAR = 0 | PRIMIDLOC = 255 | 
VIEWIDLOC = 255 }
-       00000000        VPC_SO_BUF_CNTL: { 0 }
+       00000000        VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 
| BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 }
        00000000        VPC_SO_DISABLE: { 0 }
        00000000        PC_TESS_NUM_VERTEX: 0
        00000000        PC_HS_INPUT_SIZE: { SIZE = 0 }
@@ -7870,16 +7870,16 @@ clusters:
        0000ffff        VPC_VS_LAYER_CNTL: { LAYERLOC = 255 | VIEWLOC = 255 }
        0000ffff        VPC_GS_LAYER_CNTL: { LAYERLOC = 255 | VIEWLOC = 255 }
        0000ffff        VPC_DS_LAYER_CNTL: { LAYERLOC = 255 | VIEWLOC = 255 }
-       00000000        VPC_UNKNOWN_9107: 0
+       00000000        VPC_UNKNOWN_9107: { 0 }
        00000003        VPC_POLYGON_MODE: { MODE = POLYMODE6_TRIANGLES }
        00000000        VPC_UNKNOWN_9300: 0
        00ff0001        VPC_VS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        00ff0001        VPC_GS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        00ff0001        VPC_DS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        ff00ff00        VPC_CNTL_0: { NUMNONPOSVAR = 0 | PRIMIDLOC = 255 | 
VIEWIDLOC = 255 }
-       00000000        VPC_SO_BUF_CNTL: { 0 }
+       00000000        VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 
| BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 }
        00000000        VPC_SO_DISABLE: { 0 }
-       00000000        PC_UNKNOWN_9980: 0
+       00000000        PC_RASTER_CNTL: { STREAM = 0 }
        00000003        PC_POLYGON_MODE: { MODE = POLYMODE6_TRIANGLES }
        00000002        PC_PRIMITIVE_CNTL_0: { PROVOKING_VTX_LAST }
        00000001        PC_VS_OUT_CNTL: { STRIDE_IN_VPC = 1 | CLIP_MASK = 0 }
@@ -7897,16 +7897,16 @@ clusters:
        0000ffff        VPC_VS_LAYER_CNTL: { LAYERLOC = 255 | VIEWLOC = 255 }
        0000ffff        VPC_GS_LAYER_CNTL: { LAYERLOC = 255 | VIEWLOC = 255 }
        0000ffff        VPC_DS_LAYER_CNTL: { LAYERLOC = 255 | VIEWLOC = 255 }
-       00000000        VPC_UNKNOWN_9107: 0
+       00000000        VPC_UNKNOWN_9107: { 0 }
        00000003        VPC_POLYGON_MODE: { MODE = POLYMODE6_TRIANGLES }
        00000000        VPC_UNKNOWN_9300: 0
        00ff0001        VPC_VS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        00ff0001        VPC_GS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        00ff0001        VPC_DS_PACK: { STRIDE_IN_VPC = 1 | POSITIONLOC = 0 | 
PSIZELOC = 255 | EXTRAPOS = 0 }
        ff00ff00        VPC_CNTL_0: { NUMNONPOSVAR = 0 | PRIMIDLOC = 255 | 
VIEWIDLOC = 255 }
-       00000000        VPC_SO_BUF_CNTL: { 0 }
+       00000000        VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 
| BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 }
        00000000        VPC_SO_DISABLE: { 0 }
-       00000000        PC_UNKNOWN_9980: 0
+       00000000        PC_RASTER_CNTL: { STREAM = 0 }
        00000003        PC_POLYGON_MODE: { MODE = POLYMODE6_TRIANGLES }
        00000002        PC_PRIMITIVE_CNTL_0: { PROVOKING_VTX_LAST }
        00000001        PC_VS_OUT_CNTL: { STRIDE_IN_VPC = 1 | CLIP_MASK = 0 }
diff --git 
a/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log
 
b/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log
index 99ef25fafe5..7bbaa5de1fd 100644
--- 
a/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log
+++ 
b/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log
@@ -127,7 +127,7 @@ t4          write RB_UNKNOWN_88F0 (88f0)
                        RB_UNKNOWN_88F0: 0
 000000000105813c:              0000: 4888f001 00000000
 t4             write VPC_UNKNOWN_9107 (9107)
-                       VPC_UNKNOWN_9107: 0
+                       VPC_UNKNOWN_9107: { 0 }
 0000000001058144:              0000: 48910701 00000000
 t4             write VPC_POINT_COORD_INVERT (9236)
                        VPC_POINT_COORD_INVERT: { 0 }
@@ -138,8 +138,8 @@ t4          write VPC_UNKNOWN_9300 (9300)
 t4             write VPC_SO_DISABLE (9306)
                        VPC_SO_DISABLE: { DISABLE }
 000000000105815c:              0000: 48930601 00000001
-t4             write PC_UNKNOWN_9980 (9980)
-                       PC_UNKNOWN_9980: 0
+t4             write PC_RASTER_CNTL (9980)
+                       PC_RASTER_CNTL: { STREAM = 0 }
 0000000001058164:              0000: 40998001 00000000
 t4             write PC_PRIMITIVE_CNTL_6 (9b06)
                        PC_PRIMITIVE_CNTL_6: { STRIDE_IN_VPC = 0 }
@@ -324,7 +324,7 @@ t7          opcode: CP_BLIT (2c) (2 dwords)
  +     00000000                RB_UNKNOWN_8E01: 0
 !+     00100000                RB_UNKNOWN_8E04: 0x100000
 !+     10000000                RB_CCU_CNTL: { OFFSET = 0x20000 }
- +     00000000                VPC_UNKNOWN_9107: 0
+ +     00000000                VPC_UNKNOWN_9107: { 0 }
  +     00000000                VPC_UNKNOWN_9210: 0
  +     00000000                VPC_UNKNOWN_9211: 0
  +     00000000                VPC_POINT_COORD_INVERT: { 0 }
@@ -333,7 +333,7 @@ t7          opcode: CP_BLIT (2c) (2 dwords)
  +     00000000                VPC_UNKNOWN_9600: 0
  +     00000000                VPC_UNKNOWN_9602: FALSE
 !+     0000001f                PC_MODE_CNTL: 0x1f
- +     00000000                PC_UNKNOWN_9980: 0
+ +     00000000                PC_RASTER_CNTL: { STREAM = 0 }
  +     00000000                PC_PRIMITIVE_CNTL_6: { STRIDE_IN_VPC = 0 }
  +     00000000                PC_MULTIVIEW_CNTL: { VIEWS = 0 }
  +     00000000                PC_UNKNOWN_9E72: 0
@@ -966,8 +966,8 @@ t4                                  write 
VPC_VAR[0].DISABLE (9212)
                                                VPC_VAR[0x3].DISABLE: 0xffffffff
 000000000105427c:                                      0000: 40921204 fffffff0 
ffffffff ffffffff ffffffff
 t7                                     opcode: CP_CONTEXT_REG_BUNCH (5c) (5 
dwords)
-                                               VPC_SO_CNTL: { 0 }
-                                               VPC_SO_BUF_CNTL: { 0 }
+                                               VPC_SO_CNTL: { ADDR = 0 }
+                                               VPC_SO_STREAM_CNTL: { 
BUF0_STREAM = 0 | BUF1_STREAM = 0 | BUF2_STREAM = 0 | BUF3_STREAM = 0 | 
STREAM_ENABLE = 0 }
 0000000001054290:                                      0000: 70dc0004 00009216 
00000000 00009305 00000000
 t4                                     write SP_VS_OUT[0].REG (a803)
                                                SP_VS_OUT[0].REG: { A_REGID = 
r2.x | A_COMPMASK = 0xf | B_REGID = r0.x | B_COMPMASK = 0xf }
@@ -1446,10 +1446,10 @@ t7                      opcode: CP_DRAW_INDIRECT_MULTI 
(2a) (12 dwords)
 !+     ffffffff                        VPC_VAR[0x1].DISABLE: 0xffffffff
 !+     ffffffff                        VPC_VAR[0x2].DISABLE: 0xffffffff
 !+     ffffffff                        VPC_VAR[0x3].DISABLE: 0xffffffff
- +     00000000                        VPC_SO_CNTL: { 0 }
+ +     00000000                        VPC_SO_CNTL: { ADDR = 0 }
 !+     00ff0408                        VPC_VS_PACK: { STRIDE_IN_VPC = 8 | 
POSITIONLOC = 4 | PSIZELOC = 255 | EXTRAPOS = 0 }
 !+     ff01ff04                        VPC_CNTL_0: { NUMNONPOSVAR = 4 | 
PRIMIDLOC = 255 | VARYING | VIEWIDLOC = 255 }
- +     00000000                        VPC_SO_BUF_CNTL: { 0 }
+ +     00000000                        VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | 
BUF1_STREAM = 0 | BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 }
 !+     ffffffff                        PC_RESTART_INDEX: 4294967295
  +     00000000                        PC_PRIMID_PASSTHRU: FALSE
 !+     00000003                        PC_POLYGON_MODE: { MODE = 
POLYMODE6_TRIANGLES }
diff --git a/src/freedreno/.gitlab-ci/reference/fd-clouds.log 
b/src/freedreno/.gitlab-ci/reference/fd-clouds.log
index 2797eee1fb8..e2f0c7c9634 100644
--- a/src/freedreno/.gitlab-ci/reference/fd-clouds.log
+++ b/src/freedreno/.gitlab-ci/reference/fd-clouds.log
@@ -129,8 +129,8 @@ t4          write PC_PRIMID_PASSTHRU (9806)
 t4             write 0x9990 (9990)
                        0x9990: 00000000
 0000000001d91144:              0000: 48999001 00000000
-t4             write PC_UNKNOWN_9980 (9980)
-                       PC_UNKNOWN_9980: 0
+t4             write PC_RASTER_CNTL (9980)
+                       PC_RASTER_CNTL: { STREAM = 0 }
 0000000001d9114c:              0000: 40998001 00000000
 t4             write PC_MULTIVIEW_CNTL (9b07)
                        PC_MULTIVIEW_CNTL: { VIEWS = 0 }
@@ -224,8 +224,8 @@ t7          opcode: CP_SET_DRAW_STATE (43) (4 dwords)
                        { ADDR_LO = 0 }
                        { ADDR_HI = 0 }
 0000000001d91238:              0000: 70438003 00040000 00000000 00000000
-t4             write VPC_SO_BUF_CNTL (9305)
-                       VPC_SO_BUF_CNTL: { 0 }
+t4             write VPC_SO_STREAM_CNTL (9305)
+                       VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | BUF1_STREAM = 0 
| BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 }
 0000000001d91248:              0000: 48930501 00000000
 t4             write GRAS_LRZ_CNTL (8100)
                        GRAS_LRZ_CNTL: { 0 }
@@ -755,7 +755,7 @@ t4                                  write VPC_VS_CLIP_CNTL 
(9101)
                                                VPC_VS_CLIP_CNTL: { CLIP_MASK = 
0 | CLIP_DIST_03_LOC = 255 | CLIP_DIST_47_LOC = 255 }
 0000000001121140:                                      0000: 48910101 00ffff00
 t4                                     write VPC_UNKNOWN_9107 (9107)
-                                               VPC_UNKNOWN_9107: 0
+                                               VPC_UNKNOWN_9107: { 0 }
 0000000001121148:                                      0000: 48910701 00000000
 t4                                     write VFD_CONTROL_1 (a001)
                                                VFD_CONTROL_1: { REGID4VTX = 
r63.x | REGID4INST = r63.x | REGID4PRIMID = r63.x | REGID4VIEWID = r63.x }
@@ -1041,7 +1041,7 @@ t7                        opcode: CP_DRAW_INDX_OFFSET 
(38) (4 dwords)
 !+     7c400004                        RB_CCU_CNTL: { OFFSET = 0xf8000 | GMEM 
| UNK2 }
 !+     00ffff00                        VPC_VS_CLIP_CNTL: { CLIP_MASK = 0 | 
CLIP_DIST_03_LOC = 255 | CLIP_DIST_47_LOC = 255 }
 !+     0000ffff                        VPC_VS_LAYER_CNTL: { LAYERLOC = 255 | 
VIEWLOC = 255 }
- +     00000000                        VPC_UNKNOWN_9107: 0
+ +     00000000                        VPC_UNKNOWN_9107: { 0 }
 !+     00000003                        VPC_POLYGON_MODE: { MODE = 
POLYMODE6_TRIANGLES }
  +     00000000                        VPC_UNKNOWN_9210: 0
  +     00000000                        VPC_UNKNOWN_9211: 0
@@ -1053,7 +1053,7 @@ t7                        opcode: CP_DRAW_INDX_OFFSET 
(38) (4 dwords)
  +     00000000                        VPC_UNKNOWN_9300: 0
 !+     00ff0004                        VPC_VS_PACK: { STRIDE_IN_VPC = 4 | 
POSITIONLOC = 0 | PSIZELOC = 255 | EXTRAPOS = 0 }
 !+     ff00ff00                        VPC_CNTL_0: { NUMNONPOSVAR = 0 | 
PRIMIDLOC = 255 | VIEWIDLOC = 255 }
- +     00000000                        VPC_SO_BUF_CNTL: { 0 }
+ +     00000000                        VPC_SO_STREAM_CNTL: { BUF0_STREAM = 0 | 
BUF1_STREAM = 0 | BUF2_STREAM = 0 | BUF3_STREAM = 0 | STREAM_ENABLE = 0 }
  +     00000000                        VPC_SO_DISABLE: { 0 }
  +     00000000                        VPC_UNKNOWN_9600: 0
  +     00000000                        VPC_UNKNOWN_9602: FALSE
@@ -1061,7 +1061,7 @@ t7                        opcode: CP_DRAW_INDX_OFFSET 
(38) (4 dwords)
 !+     0000001f                        PC_MODE_CNTL: 0x1f
 !+     00000001                        PC_UNKNOWN_9805: 0x1
  +     00000000                        PC_PRIMID_PASSTHRU: FALSE
- +     00000000                        PC_UNKNOWN_9980: 0
+ +     00000000                        PC_RASTER_CNTL: { STREAM = 0 }
 !+     00000003                        PC_POLYGON_MODE: { MODE = 
POLYMODE6_TRIANGLES }
  +     00000000                        0x9990: 00000000
 !+     00000002                        PC_PRIMITIVE_CNTL_0: { 
PROVOKING_VTX_LAST }
@@ -2070,7 +2070,7 @@ t4                                        write 
VPC_VS_CLIP_CNTL (9101)
                                                VPC_VS_CLIP_CNTL: { CLIP_MASK = 
0 | CLIP_DIST_03_LOC = 255 | CLIP_DIST_47_LOC = 255 }
 0000000001120140:                                      0000: 48910101 00ffff00
 t4                                     write VPC_UNKNOWN_9107 (9107)
-                                               VPC_UNKNOWN_9107: 0
+                                               VPC_UNKNOWN_9107: { 0 }
 0000000001120148:                                      0000: 48910701 00000000
 t4                                     write SP_FS_INSTRLEN (ab05)
                                                SP_FS_INSTRLEN: 88
@@ -5272,7 +5272,7 @@ t7                        opcode: CP_DRAW_INDX_OFFSET 
(38) (4 dwords)
  +     00000000                        RB_STENCILWRMASK: { WRMASK = 0 | 
BFWRMASK = 0 }
  +     00ffff00                        VPC_VS_CLIP_CNTL: { CLIP_MASK = 0 | 
CLIP_DIST_03_LOC = 255 | CLIP_DIST_47_LOC = 255 }
  +     0000ffff                        VPC_VS_LAYER_CNTL: { LAYERLOC = 255 | 
VIEWLOC = 255 }
- +     00000000                        VPC_UNKNOWN_9107: 0
+ +     00000000                        VPC_UNKNOWN_9107: { 0 }
  +     00000000                        VPC_VARYING_INTERP[0].MODE: 0
  +     00000000                        VPC_VARYING_INTERP[0x1].MODE: 0
  +     00000000                        VPC_VARYING_INTERP[0x2].MODE: 0
diff --git a/src/freedreno/registers/adreno/a6xx.xml 
b/src/freedreno/registers/adreno/a6xx.xml
index 7327ba6db8a..b15d66c59d3 100644
--- a/src/freedreno/registers/adreno/a6xx.xml
+++ b/src/freedreno/registers/adreno/a6xx.xml
@@ -2670,7 +2670,11 @@ to upconvert to 32b float internally?
        <reg32 offset="0x9105" name="VPC_GS_LAYER_CNTL" 
type="a6xx_vpc_xs_layer_cntl"/>
        <reg32 offset="0x9106" name="VPC_DS_LAYER_CNTL" 
type="a6xx_vpc_xs_layer_cntl"/>
 
-       <reg32 offset="0x9107" name="VPC_UNKNOWN_9107" pos="2"/>
+       <reg32 offset="0x9107" name="VPC_UNKNOWN_9107">
+               <!-- this mirrors PC_RASTER_CNTL::DISCARD, although it seems 
it's unused -->
+               <bitfield name="RASTER_DISCARD" pos="0" type="boolean"/>
+               <bitfield name="UNK2" pos="2" type="boolean"/>
+       </reg32>
        <reg32 offset="0x9108" name="VPC_POLYGON_MODE">
                <bitfield name="MODE" low="0" high="1" 
type="a6xx_polygon_mode"/>
        </reg32>
@@ -2692,9 +2696,32 @@ to upconvert to 32b float internally?
        </array>
 
        <reg32 offset="0x9216" name="VPC_SO_CNTL">
-               <bitfield name="UNK0" low="0" high="7"/>
-               <!-- always 0x10000 when SO enabled.. -->
-               <bitfield name="ENABLE" pos="16" type="boolean"/>
+               <!--
+                       Choose which DWORD to write to. There is an array of
+                       (4 * 64) DWORD's, dumped in the devcoredump at
+                       HLSQ_INST_RAM dword 0x400. Each DWORD corresponds to a
+                       (VPC location, stream) pair like so:
+
+                       location 0, stream 0
+                       location 2, stream 0
+                       ...
+                       location 126, stream 0
+                       location 0, stream 1
+                       location 2, stream 1
+                       ...
+                       location 126, stream 1
+                       location 0, stream 2
+                       ...
+
+                       When EmitStreamVertex(N) happens, the HW goes to DWORD
+                       64 * N and then "executes" the next 64 DWORD's.
+
+                       This field is auto-incremented when VPC_SO_PROG is
+                       written to.
+               -->
+               <bitfield name="ADDR" low="0" high="7" type="hex"/>
+               <!-- clear all A_EN and B_EN bits for all DWORD's -->
+               <bitfield name="RESET" pos="16" type="boolean"/>
        </reg32>
        <!-- special register, write multiple times to load SO program (not 
readable) -->
        <reg32 offset="0x9217" name="VPC_SO_PROG">
@@ -2769,14 +2796,15 @@ to upconvert to 32b float internally?
                </bitfield>
        </reg32>
 
-       <reg32 offset="0x9305" name="VPC_SO_BUF_CNTL">
-               <!-- TODO: the first 12 bits are valid, likely 3-bit enum 
instead of bools -->
-               <bitfield name="BUF0" pos="0" type="boolean"/>
-               <bitfield name="BUF1" pos="3" type="boolean"/>
-               <bitfield name="BUF2" pos="6" type="boolean"/>
-               <bitfield name="BUF3" pos="9" type="boolean"/>
-               <bitfield name="ENABLE" pos="15" type="boolean"/>
-               <bitfield name="UNK16" low="16" high="19"/>
+       <reg32 offset="0x9305" name="VPC_SO_STREAM_CNTL">
+               <!--
+               It's offset by 1, and 0 means "disabled"
+               -->
+               <bitfield name="BUF0_STREAM" low="0" high="2" type="uint"/>
+               <bitfield name="BUF1_STREAM" low="3" high="5" type="uint"/>
+               <bitfield name="BUF2_STREAM" low="6" high="8" type="uint"/>
+               <bitfield name="BUF3_STREAM" low="9" high="11" type="uint"/>
+               <bitfield name="STREAM_ENABLE" low="15" high="18" type="hex"/>
        </reg32>
        <reg32 offset="0x9306" name="VPC_SO_DISABLE">
                <bitfield name="DISABLE" pos="0" type="boolean"/>
@@ -2852,7 +2880,13 @@ to upconvert to 32b float internally?
        <reg32 offset="0x9981" name="PC_POLYGON_MODE">
                <bitfield name="MODE" low="0" high="1" 
type="a6xx_polygon_mode"/>
        </reg32>
-       <reg32 offset="0x9980" name="PC_UNKNOWN_9980" low="0" high="2"/>
+
+       <reg32 offset="0x9980" name="PC_RASTER_CNTL">
+               <!-- which stream to send to GRAS -->
+               <bitfield name="STREAM" low="0" high="1" type="uint"/>
+               <!-- discard primitives before rasterization -->
+               <bitfield name="DISCARD" pos="2" type="boolean"/>
+       </reg32>
 
        <!-- 0x9982-0x9aff invalid -->
 
diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c 
b/src/freedreno/vulkan/tu_cmd_buffer.c
index 8d85422d24b..a152965274c 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -778,7 +778,7 @@ tu6_init_hw(struct tu_cmd_buffer *cmd, struct tu_cs *cs)
 
    tu_cs_emit_regs(cs, A6XX_VPC_SO_DISABLE(true));
 
-   tu_cs_emit_write_reg(cs, REG_A6XX_PC_UNKNOWN_9980, 0);
+   tu_cs_emit_write_reg(cs, REG_A6XX_PC_RASTER_CNTL, 0);
 
    tu_cs_emit_write_reg(cs, REG_A6XX_SP_UNKNOWN_A81B, 0);
 
diff --git a/src/freedreno/vulkan/tu_pipeline.c 
b/src/freedreno/vulkan/tu_pipeline.c
index 6fe57972eab..85911fd6edb 100644
--- a/src/freedreno/vulkan/tu_pipeline.c
+++ b/src/freedreno/vulkan/tu_pipeline.c
@@ -619,7 +619,7 @@ tu6_setup_streamout(struct tu_cs *cs,
       tu_cs_emit_pkt7(cs, CP_CONTEXT_REG_BUNCH, 4);
       tu_cs_emit(cs, REG_A6XX_VPC_SO_CNTL);
       tu_cs_emit(cs, 0);
-      tu_cs_emit(cs, REG_A6XX_VPC_SO_BUF_CNTL);
+      tu_cs_emit(cs, REG_A6XX_VPC_SO_STREAM_CNTL);
       tu_cs_emit(cs, 0);
       return;
    }
@@ -664,19 +664,18 @@ tu6_setup_streamout(struct tu_cs *cs,
    }
 
    tu_cs_emit_pkt7(cs, CP_CONTEXT_REG_BUNCH, 12 + 2 * prog_count);
-   tu_cs_emit(cs, REG_A6XX_VPC_SO_BUF_CNTL);
-   tu_cs_emit(cs, A6XX_VPC_SO_BUF_CNTL_ENABLE |
-                  COND(ncomp[0] > 0, A6XX_VPC_SO_BUF_CNTL_BUF0) |
-                  COND(ncomp[1] > 0, A6XX_VPC_SO_BUF_CNTL_BUF1) |
-                  COND(ncomp[2] > 0, A6XX_VPC_SO_BUF_CNTL_BUF2) |
-                  COND(ncomp[3] > 0, A6XX_VPC_SO_BUF_CNTL_BUF3));
+   tu_cs_emit(cs, REG_A6XX_VPC_SO_STREAM_CNTL);
+   tu_cs_emit(cs, 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)));
    for (uint32_t i = 0; i < 4; i++) {
       tu_cs_emit(cs, REG_A6XX_VPC_SO_NCOMP(i));
       tu_cs_emit(cs, ncomp[i]);
    }
-   /* note: "VPC_SO_CNTL" write seems to be responsible for resetting the 
SO_PROG */
    tu_cs_emit(cs, REG_A6XX_VPC_SO_CNTL);
-   tu_cs_emit(cs, A6XX_VPC_SO_CNTL_ENABLE);
+   tu_cs_emit(cs, A6XX_VPC_SO_CNTL_RESET);
    for (uint32_t i = 0; i < prog_count; i++) {
       tu_cs_emit(cs, REG_A6XX_VPC_SO_PROG);
       tu_cs_emit(cs, prog[i]);
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_emit.c 
b/src/gallium/drivers/freedreno/a6xx/fd6_emit.c
index e07abee9c9d..54c5d7bc28c 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_emit.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_emit.c
@@ -772,7 +772,7 @@ fd6_emit_streamout(struct fd_ringbuffer *ring, struct 
fd6_emit *emit, struct ir3
                        OUT_PKT7(obj, CP_CONTEXT_REG_BUNCH, 4);
                        OUT_RING(obj, REG_A6XX_VPC_SO_CNTL);
                        OUT_RING(obj, 0);
-                       OUT_RING(obj, REG_A6XX_VPC_SO_BUF_CNTL);
+                       OUT_RING(obj, REG_A6XX_VPC_SO_STREAM_CNTL);
                        OUT_RING(obj, 0);
 
                        fd6_emit_take_group(emit, obj, FD6_GROUP_SO, 
ENABLE_ALL);
@@ -1211,7 +1211,7 @@ fd6_emit_restore(struct fd_batch *batch, struct 
fd_ringbuffer *ring)
 
        WRITE(REG_A6XX_VPC_SO_DISABLE, A6XX_VPC_SO_DISABLE(true).value);
 
-       WRITE(REG_A6XX_PC_UNKNOWN_9980, 0);
+       WRITE(REG_A6XX_PC_RASTER_CNTL, 0);
 
        WRITE(REG_A6XX_PC_MULTIVIEW_CNTL, 0);
 
@@ -1256,8 +1256,8 @@ fd6_emit_restore(struct fd_batch *batch, struct 
fd_ringbuffer *ring)
        OUT_RING(ring, CP_SET_DRAW_STATE__1_ADDR_LO(0));
        OUT_RING(ring, CP_SET_DRAW_STATE__2_ADDR_HI(0));
 
-       OUT_PKT4(ring, REG_A6XX_VPC_SO_BUF_CNTL, 1);
-       OUT_RING(ring, 0x00000000);   /* VPC_SO_BUF_CNTL */
+       OUT_PKT4(ring, REG_A6XX_VPC_SO_STREAM_CNTL, 1);
+       OUT_RING(ring, 0x00000000);   /* VPC_SO_STREAM_CNTL */
 
        OUT_PKT4(ring, REG_A6XX_GRAS_LRZ_CNTL, 1);
        OUT_RING(ring, 0x00000000);
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.c 
b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
index 406ad0b54b0..2eff56f918d 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_program.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
@@ -201,12 +201,12 @@ setup_stream_out(struct fd6_program_state *state, const 
struct ir3_shader_varian
        struct fd_ringbuffer *ring = state->streamout_stateobj;
 
        OUT_PKT7(ring, CP_CONTEXT_REG_BUNCH, 12 + (2 * prog_count));
-       OUT_RING(ring, REG_A6XX_VPC_SO_BUF_CNTL);
-       OUT_RING(ring, A6XX_VPC_SO_BUF_CNTL_ENABLE |
-                       COND(ncomp[0] > 0, A6XX_VPC_SO_BUF_CNTL_BUF0) |
-                       COND(ncomp[1] > 0, A6XX_VPC_SO_BUF_CNTL_BUF1) |
-                       COND(ncomp[2] > 0, A6XX_VPC_SO_BUF_CNTL_BUF2) |
-                       COND(ncomp[3] > 0, A6XX_VPC_SO_BUF_CNTL_BUF3));
+       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));
@@ -216,7 +216,7 @@ setup_stream_out(struct fd6_program_state *state, const 
struct ir3_shader_varian
        OUT_RING(ring, REG_A6XX_VPC_SO_NCOMP(3));
        OUT_RING(ring, ncomp[3]);
        OUT_RING(ring, REG_A6XX_VPC_SO_CNTL);
-       OUT_RING(ring, A6XX_VPC_SO_CNTL_ENABLE);
+       OUT_RING(ring, A6XX_VPC_SO_CNTL_RESET);
        for (unsigned i = 0; i < prog_count; i++) {
                OUT_RING(ring, REG_A6XX_VPC_SO_PROG);
                OUT_RING(ring, prog[i]);

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

Reply via email to