Mesa (master): freedreno: Document draw predication packets

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Aug 4 13:57:33 UTC 2020


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

Author: Connor Abbott <cwabbott0 at gmail.com>
Date:   Sat Jul 18 19:25:01 2020 +0200

freedreno: Document draw predication packets

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

---

 src/freedreno/registers/adreno/adreno_pm4.xml | 64 +++++++++++++++++++++++++--
 1 file changed, 60 insertions(+), 4 deletions(-)

diff --git a/src/freedreno/registers/adreno/adreno_pm4.xml b/src/freedreno/registers/adreno/adreno_pm4.xml
index 24c95ee9d32..144e7166853 100644
--- a/src/freedreno/registers/adreno/adreno_pm4.xml
+++ b/src/freedreno/registers/adreno/adreno_pm4.xml
@@ -313,12 +313,30 @@ xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
 	<value name="CP_DRAW_INDIRECT_MULTI" value="0x2a" varset="chip" variants="A6XX"/>
 	<value name="CP_DRAW_AUTO" value="0x24"/>
 
-	<value name="CP_UNKNOWN_19" value="0x19"/>
+	<doc>
+		Enable or disable predication globally. Also resets the
+		predicate to "passing" and the local bit to enabled when
+		enabling global predication.
+	</doc>
+	<value name="CP_DRAW_PRED_ENABLE_GLOBAL" value="0x19"/>
 
-	<doc>set to 1 for fastclear..:</doc>
-	<value name="CP_UNKNOWN_1A" value="0x1a"/>
+	<doc>
+		Enable or disable predication locally. Unlike globally enabling
+		predication, this packet doesn't touch any other state.
+		Predication only happens when enabled globally and locally and a
+		predicate has been set. This should be used for internal draws
+		which aren't supposed to use the predication state:
+
+		CP_DRAW_PRED_ENABLE_LOCAL(0)
+		... do draw...
+		CP_DRAW_PRED_ENABLE_LOCAL(1)
+	</doc>
+	<value name="CP_DRAW_PRED_ENABLE_LOCAL" value="0x1a"/>
 
-	<value name="CP_UNKNOWN_4E" value="0x4e"/>
+	<doc>
+		Latch a draw predicate into the internal register.
+	</doc>
+	<value name="CP_DRAW_PRED_SET" value="0x4e"/>
 
 	<doc>
 		for A4xx
@@ -832,6 +850,44 @@ opcode: CP_LOAD_STATE4 (30) (4 dwords)
 	</stripe>
 </domain>
 
+<domain name="CP_DRAW_PRED_ENABLE_GLOBAL" width="32" varset="chip">
+	<reg32 offset="0" name="0">
+		<bitfield name="ENABLE" pos="0" type="boolean"/>
+	</reg32>
+</domain>
+
+<domain name="CP_DRAW_PRED_ENABLE_LOCAL" width="32" varset="chip">
+	<reg32 offset="0" name="0">
+		<bitfield name="ENABLE" pos="0" type="boolean"/>
+	</reg32>
+</domain>
+
+<domain name="CP_DRAW_PRED_SET" width="32" varset="chip">
+	<enum name="cp_draw_pred_src">
+		<!--
+			Sources 1-4 seem to be about combining reading
+			SO/primitive queries and setting the predicate, which is
+			a DX11-specific optimization (since in DX11 you can only
+			predicate on the result of queries).
+		-->
+		<value name="PRED_SRC_MEM" value="5">
+			<doc>
+				Read a 64-bit value at the given address and
+				test if it equals/doesn't equal 0.
+			</doc>
+		</value>
+	</enum>
+	<enum name="cp_draw_pred_test">
+		<value name="NE_0_PASS" value="0"/>
+		<value name="EQ_0_PASS" value="1"/>
+	</enum>
+	<reg32 offset="0" name="0">
+		<bitfield name="SRC" low="4" high="7" type="cp_draw_pred_src"/>
+		<bitfield name="TEST" pos="8" type="cp_draw_pred_test"/>
+	</reg32>
+	<reg64 offset="1" name="MEM_ADDR" type="address"/>
+</domain>
+
 <domain name="CP_SET_DRAW_STATE" width="32" varset="chip" variants="A4XX-">
 	<array offset="0" stride="3" length="100">
 		<reg32 offset="0" name="0">



More information about the mesa-commit mailing list