intel/batch_decoder: decoding of 3DSTATE_CONSTANT_BODY.
authorSergii Romantsov <sergii.romantsov@gmail.com>
Thu, 12 Jul 2018 12:47:48 +0000 (15:47 +0300)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 16 Jul 2018 19:18:36 +0000 (12:18 -0700)
SNB doesn't have a definition of 3DSTATE_CONSTANT_BODY, thats
why we got segmentation fault when used INTEL_DEBUG=bat.
Fixed by adding of 3DSTATE_CONSTANT_BODY into 3DSTATE_CONSTANT
of VS, GS and PS structures.

v2: added definition of 3DSTATE_CONSTANT_BODY to the gen6.xml

Fixes: 169d8e011ae (intel: Fix 3DSTATE_CONSTANT buffer decoding.)
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107190
Signed-off-by: Sergii Romantsov <sergii.romantsov@globallogic.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/genxml/gen6.xml
src/mesa/drivers/dri/i965/genX_state_upload.c

index c2967cd..62d2574 100644 (file)
     <field name="Maximum VP Index" start="96" end="99" type="uint"/>
   </instruction>
 
+  <struct name="3DSTATE_CONSTANT_BODY" length="4">
+    <field name="Pointer to Constant Buffer 0" start="5" end="31" type="offset"/>
+    <field name="Constant Buffer 0 Read Length" start="0" end="4" type="uint"/>
+    <field name="Pointer to Constant Buffer 1" start="37" end="63" type="address"/>
+    <field name="Constant Buffer 1 Read Length" start="32" end="36" type="uint"/>
+    <field name="Pointer to Constant Buffer 2" start="69" end="95" type="address"/>
+    <field name="Constant Buffer 2 Read Length" start="64" end="68" type="uint"/>
+    <field name="Pointer to Constant Buffer 3" start="101" end="127" type="address"/>
+    <field name="Constant Buffer 3 Read Length" start="96" end="100" type="uint"/>
+  </struct>
+
   <instruction name="3DSTATE_CONSTANT_GS" bias="2" length="5">
     <field name="Command Type" start="29" end="31" type="uint" default="3"/>
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="Buffer 0 Valid" start="12" end="12" type="bool"/>
     <field name="Constant Buffer Object Control State" start="8" end="11" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
-    <field name="Pointer to GS Constant Buffer 0" start="37" end="63" type="offset"/>
-    <field name="GS Constant Buffer 0 Read Length" start="32" end="36" type="uint"/>
-    <field name="Pointer to GS Constant Buffer 1" start="69" end="95" type="address"/>
-    <field name="GS Constant Buffer 1 Read Length" start="64" end="68" type="uint"/>
-    <field name="Pointer to GS Constant Buffer 2" start="101" end="127" type="address"/>
-    <field name="GS Constant Buffer 2 Read Length" start="96" end="100" type="uint"/>
-    <field name="Pointer to GS Constant Buffer 3" start="133" end="159" type="address"/>
-    <field name="GS Constant Buffer 3 Read Length" start="128" end="132" type="uint"/>
+    <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
 
   <instruction name="3DSTATE_CONSTANT_PS" bias="2" length="5">
     <field name="Buffer 0 Valid" start="12" end="12" type="bool"/>
     <field name="Constant Buffer Object Control State" start="8" end="11" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
-    <field name="Pointer to PS Constant Buffer 0" start="37" end="63" type="offset"/>
-    <field name="PS Constant Buffer 0 Read Length" start="32" end="36" type="uint"/>
-    <field name="Pointer to PS Constant Buffer 1" start="69" end="95" type="address"/>
-    <field name="PS Constant Buffer 1 Read Length" start="64" end="68" type="uint"/>
-    <field name="Pointer to PS Constant Buffer 2" start="101" end="127" type="address"/>
-    <field name="PS Constant Buffer 2 Read Length" start="96" end="100" type="uint"/>
-    <field name="Pointer to PS Constant Buffer 3" start="133" end="159" type="address"/>
-    <field name="PS Constant Buffer 3 Read Length" start="128" end="132" type="uint"/>
+    <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
 
   <instruction name="3DSTATE_CONSTANT_VS" bias="2" length="5">
     <field name="Buffer 0 Valid" start="12" end="12" type="bool"/>
     <field name="Constant Buffer Object Control State" start="8" end="11" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
-    <field name="Pointer to VS Constant Buffer 0" start="37" end="63" type="offset"/>
-    <field name="VS Constant Buffer 0 Read Length" start="32" end="36" type="uint"/>
-    <field name="Pointer to VS Constant Buffer 1" start="69" end="95" type="address"/>
-    <field name="VS Constant Buffer 1 Read Length" start="64" end="68" type="uint"/>
-    <field name="Pointer to VS Constant Buffer 2" start="101" end="127" type="address"/>
-    <field name="VS Constant Buffer 2 Read Length" start="96" end="100" type="uint"/>
-    <field name="Pointer to VS Constant Buffer 3" start="133" end="159" type="address"/>
-    <field name="VS Constant Buffer 3 Read Length" start="128" end="132" type="uint"/>
+    <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
 
   <instruction name="3DSTATE_DEPTH_BUFFER" bias="2" length="7">
index 4a68bbe..9e0a17b 100644 (file)
@@ -1879,8 +1879,8 @@ genX(upload_wm)(struct brw_context *brw)
          /* Pointer to the WM constant buffer.  Covered by the set of
           * state flags from gen6_upload_wm_push_constants.
           */
-         wmcp.PointertoPSConstantBuffer0 = stage_state->push_const_offset;
-         wmcp.PSConstantBuffer0ReadLength = stage_state->push_const_size - 1;
+         wmcp.ConstantBody.PointertoConstantBuffer0 = stage_state->push_const_offset;
+         wmcp.ConstantBody.ConstantBuffer0ReadLength = stage_state->push_const_size - 1;
       }
    }
 #endif
@@ -2215,8 +2215,8 @@ genX(upload_vs_state)(struct brw_context *brw)
    brw_batch_emit(brw, GENX(3DSTATE_CONSTANT_VS), cvs) {
       if (stage_state->push_const_size != 0) {
          cvs.Buffer0Valid = true;
-         cvs.PointertoVSConstantBuffer0 = stage_state->push_const_offset;
-         cvs.VSConstantBuffer0ReadLength = stage_state->push_const_size - 1;
+         cvs.ConstantBody.PointertoConstantBuffer0 = stage_state->push_const_offset;
+         cvs.ConstantBody.ConstantBuffer0ReadLength = stage_state->push_const_size - 1;
       }
    }
 #endif
@@ -2707,8 +2707,8 @@ genX(upload_gs_state)(struct brw_context *brw)
    brw_batch_emit(brw, GENX(3DSTATE_CONSTANT_GS), cgs) {
       if (active && stage_state->push_const_size != 0) {
          cgs.Buffer0Valid = true;
-         cgs.PointertoGSConstantBuffer0 = stage_state->push_const_offset;
-         cgs.GSConstantBuffer0ReadLength = stage_state->push_const_size - 1;
+         cgs.ConstantBody.PointertoConstantBuffer0 = stage_state->push_const_offset;
+         cgs.ConstantBody.ConstantBuffer0ReadLength = stage_state->push_const_size - 1;
       }
    }
 #endif