genxml: Consistently use a numeric "MOCS" field

Submitted by Kenneth Graunke on Dec. 12, 2018, 4:23 a.m.

Details

Message ID 20181212042306.27923-1-kenneth@whitecape.org
State New
Headers show
Series "genxml: Consistently use a numeric "MOCS" field" ( rev: 1 ) in Mesa

Not browsing as part of any series.

Commit Message

Kenneth Graunke Dec. 12, 2018, 4:23 a.m.
When we first started using genxml, we decided to represent MOCS as an
actual structure, and pack values.  However, in many places, it was more
convenient to use a numeric value rather than treating it as a struct,
so we added secondary setters in a bunch of places as well.

We were not entirely consistent, either.  Some places only had one.
Gen6 had both kinds of setters for STATE_BASE_ADDRESS, but newer gens
only had the struct-based setters.  The names were sometimes "Constant
Buffer Object Control State" instead of "Memory", making it harder to
find.  Many had prefixes like "Vertex Buffer MOCS"...in a vertex buffer
packet...which is a bit redundant.

On modern hardware, MOCS is simply an index into a table, but we were
still carrying around the structure with an "Index to MOCS Table" field,
in addition to the direct numeric setters.  This is clunky - we really
just want a number on new hardware.

This patch eliminates the struct-based setters, and makes the numeric
setters be consistently called "MOCS".  We leave the struct definition
around on Gen7-8 for reference purposes, but it is unused.
---
 src/intel/blorp/blorp_genX_exec.h             |  2 +-
 src/intel/genxml/gen10.xml                    | 53 +++++--------
 src/intel/genxml/gen11.xml                    | 53 +++++--------
 src/intel/genxml/gen6.xml                     | 28 ++-----
 src/intel/genxml/gen7.xml                     | 35 ++++-----
 src/intel/genxml/gen75.xml                    | 38 ++++------
 src/intel/genxml/gen8.xml                     | 47 +++++-------
 src/intel/genxml/gen9.xml                     | 50 +++++-------
 src/intel/isl/isl_emit_depth_stencil.c        |  6 +-
 src/intel/vulkan/anv_private.h                | 76 ++++++++-----------
 src/intel/vulkan/gen7_cmd_buffer.c            |  2 +-
 src/intel/vulkan/gen8_cmd_buffer.c            |  2 +-
 src/intel/vulkan/genX_cmd_buffer.c            | 19 +++--
 src/intel/vulkan/genX_gpu_memcpy.c            |  4 +-
 src/intel/vulkan/genX_state.c                 |  6 +-
 src/mesa/drivers/dri/i965/genX_state_upload.c | 14 ++--
 16 files changed, 177 insertions(+), 258 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/intel/blorp/blorp_genX_exec.h b/src/intel/blorp/blorp_genX_exec.h
index 065980616ec..42494ffbc86 100644
--- a/src/intel/blorp/blorp_genX_exec.h
+++ b/src/intel/blorp/blorp_genX_exec.h
@@ -311,7 +311,7 @@  blorp_fill_vertex_buffer_state(struct blorp_batch *batch,
    vb[idx].BufferPitch = stride;
 
 #if GEN_GEN >= 6
-   vb[idx].VertexBufferMOCS = addr.mocs;
+   vb[idx].MOCS = addr.mocs;
 #endif
 
 #if GEN_GEN >= 7
diff --git a/src/intel/genxml/gen10.xml b/src/intel/genxml/gen10.xml
index 2d3bc39b1b9..21cd8a17d91 100644
--- a/src/intel/genxml/gen10.xml
+++ b/src/intel/genxml/gen10.xml
@@ -219,14 +219,9 @@ 
     <field name="Binding Table Index Offset" start="0" end="3" type="uint"/>
   </struct>
 
-  <struct name="MEMORY_OBJECT_CONTROL_STATE" length="1">
-    <field name="Index to MOCS Tables" start="1" end="6" type="uint"/>
-  </struct>
-
   <struct name="VERTEX_BUFFER_STATE" length="4">
     <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
-    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
+    <field name="MOCS" start="16" end="22" type="uint"/>
     <field name="Address Modify Enable" start="14" end="14" type="bool"/>
     <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
     <field name="Buffer Pitch" start="0" end="11" type="uint"/>
@@ -495,7 +490,6 @@ 
     <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
     <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
     <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
-    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="MOCS" start="56" end="62" type="uint"/>
     <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
     <field name="Surface QPitch" start="32" end="46" type="uint"/>
@@ -993,7 +987,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
     <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
     <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
-    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
       <value name="No Valid Data" value="0"/>
     </field>
@@ -1085,7 +1079,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1095,7 +1089,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1105,7 +1099,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1116,7 +1110,7 @@ 
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
     <field name="Disable Gather at Set Shader Hint" start="15" end="15" type="uint"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1126,7 +1120,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1157,8 +1151,7 @@ 
     <field name="LOD" start="128" end="131" type="uint"/>
     <field name="Depth" start="181" end="191" type="uint"/>
     <field name="Minimum Array Element" start="170" end="180" type="uint"/>
-    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
+    <field name="MOCS" start="160" end="166" type="uint"/>
     <field name="Tiled Resource Mode" start="222" end="223" type="uint">
       <value name="NONE" value="0"/>
       <value name="TILEYF" value="1"/>
@@ -1368,7 +1361,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
     <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
     <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
-    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
   </instruction>
 
@@ -1447,8 +1440,7 @@ 
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
-    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
+    <field name="MOCS" start="57" end="63" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="127" type="address"/>
     <field name="Surface QPitch" start="128" end="142" type="uint"/>
@@ -1511,8 +1503,7 @@ 
       <value name="WORD" value="1"/>
       <value name="DWORD" value="2"/>
     </field>
-    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Buffer Starting Address" start="64" end="127" type="address"/>
     <field name="Buffer Size" start="128" end="159" type="uint"/>
   </instruction>
@@ -2068,8 +2059,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
     <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
     <field name="SO Buffer Index" start="61" end="62" type="uint"/>
-    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
+    <field name="MOCS" start="54" end="60" type="uint"/>
     <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
     <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
     <field name="Surface Base Address" start="66" end="111" type="address"/>
@@ -2104,8 +2094,7 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
     <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
-    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
+    <field name="MOCS" start="54" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="127" type="address"/>
     <field name="Surface QPitch" start="128" end="142" type="uint"/>
@@ -3318,20 +3307,20 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="20"/>
     <field name="General State Base Address" start="44" end="95" type="address"/>
-    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="General State MOCS" start="36" end="42" type="uint"/>
     <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
-    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
     <field name="Surface State Base Address" start="140" end="191" type="address"/>
-    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
     <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
     <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
-    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
     <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
     <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
-    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
     <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
     <field name="Instruction Base Address" start="332" end="383" type="address"/>
-    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
     <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
     <field name="General State Buffer Size" start="396" end="415" type="uint"/>
     <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
@@ -3342,11 +3331,11 @@ 
     <field name="Instruction Buffer Size" start="492" end="511" type="uint"/>
     <field name="Instruction Buffer size Modify Enable" start="480" end="480" type="bool"/>
     <field name="Bindless Surface State Base Address" start="524" end="575" type="address"/>
-    <field name="Bindless Surface State Memory Object Control State" start="516" end="522" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Bindless Surface State MOCS" start="516" end="522" type="uint"/>
     <field name="Bindless Surface State Base Address Modify Enable" start="512" end="512" type="bool"/>
     <field name="Bindless Surface State Size" start="588" end="607" type="uint"/>
     <field name="Bindless Sampler State Base Address" start="620" end="671" type="address"/>
-    <field name="Bindless Sampler State Memory Object Control State" start="612" end="618" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Bindless Sampler State MOCS" start="612" end="618" type="uint"/>
     <field name="Bindless Sampler State Base Address Modify Enable" start="608" end="608" type="bool"/>
     <field name="Bindless Sampler State Buffer Size" start="684" end="703" type="uint"/>
   </instruction>
diff --git a/src/intel/genxml/gen11.xml b/src/intel/genxml/gen11.xml
index 1239ed011ed..54816458fc3 100644
--- a/src/intel/genxml/gen11.xml
+++ b/src/intel/genxml/gen11.xml
@@ -220,14 +220,9 @@ 
     <field name="Binding Table Index Offset" start="0" end="3" type="uint"/>
   </struct>
 
-  <struct name="MEMORY_OBJECT_CONTROL_STATE" length="1">
-    <field name="Index to MOCS Tables" start="1" end="6" type="uint"/>
-  </struct>
-
   <struct name="VERTEX_BUFFER_STATE" length="4">
     <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
-    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
+    <field name="MOCS" start="16" end="22" type="uint"/>
     <field name="Address Modify Enable" start="14" end="14" type="bool"/>
     <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
     <field name="Buffer Pitch" start="0" end="11" type="uint"/>
@@ -496,7 +491,6 @@ 
     <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
     <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
     <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
-    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="MOCS" start="56" end="62" type="uint"/>
     <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
     <field name="Surface QPitch" start="32" end="46" type="uint"/>
@@ -1012,7 +1006,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
     <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
     <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
-    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
       <value name="No Valid Data" value="0"/>
     </field>
@@ -1104,7 +1098,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1114,7 +1108,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1124,7 +1118,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1135,7 +1129,7 @@ 
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
     <field name="Disable Gather at Set Shader Hint" start="15" end="15" type="uint"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1145,7 +1139,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1176,8 +1170,7 @@ 
     <field name="LOD" start="128" end="131" type="uint"/>
     <field name="Depth" start="181" end="191" type="uint"/>
     <field name="Minimum Array Element" start="170" end="180" type="uint"/>
-    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
+    <field name="MOCS" start="160" end="166" type="uint"/>
     <field name="Tiled Resource Mode" start="222" end="223" type="uint">
       <value name="NONE" value="0"/>
       <value name="TILEYF" value="1"/>
@@ -1386,7 +1379,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
     <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
     <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
-    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
   </instruction>
 
@@ -1463,8 +1456,7 @@ 
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
-    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
+    <field name="MOCS" start="57" end="63" type="uint"/>
     <field name="Tiled Resource Mode" start="55" end="56" type="uint">
       <value name="NONE" value="0"/>
       <value name="TILEYF" value="1"/>
@@ -1531,8 +1523,7 @@ 
       <value name="WORD" value="1"/>
       <value name="DWORD" value="2"/>
     </field>
-    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Buffer Starting Address" start="64" end="127" type="address"/>
     <field name="Buffer Size" start="128" end="159" type="uint"/>
   </instruction>
@@ -2088,8 +2079,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
     <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
     <field name="SO Buffer Index" start="61" end="62" type="uint"/>
-    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
+    <field name="MOCS" start="54" end="60" type="uint"/>
     <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
     <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
     <field name="Surface Base Address" start="66" end="111" type="address"/>
@@ -2124,8 +2114,7 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
     <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
-    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
+    <field name="MOCS" start="54" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="127" type="address"/>
     <field name="Surface QPitch" start="128" end="142" type="uint"/>
@@ -3321,20 +3310,20 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="20"/>
     <field name="General State Base Address" start="44" end="95" type="address"/>
-    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="General State MOCS" start="36" end="42" type="uint"/>
     <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
-    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
     <field name="Surface State Base Address" start="140" end="191" type="address"/>
-    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
     <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
     <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
-    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
     <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
     <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
-    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
     <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
     <field name="Instruction Base Address" start="332" end="383" type="address"/>
-    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
     <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
     <field name="General State Buffer Size" start="396" end="415" type="uint"/>
     <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
@@ -3345,11 +3334,11 @@ 
     <field name="Instruction Buffer Size" start="492" end="511" type="uint"/>
     <field name="Instruction Buffer size Modify Enable" start="480" end="480" type="bool"/>
     <field name="Bindless Surface State Base Address" start="524" end="575" type="address"/>
-    <field name="Bindless Surface State Memory Object Control State" start="516" end="522" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Bindless Surface State MOCS" start="516" end="522" type="uint"/>
     <field name="Bindless Surface State Base Address Modify Enable" start="512" end="512" type="bool"/>
     <field name="Bindless Surface State Size" start="588" end="607" type="uint"/>
     <field name="Bindless Sampler State Base Address" start="620" end="671" type="address"/>
-    <field name="Bindless Sampler State Memory Object Control State" start="612" end="618" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Bindless Sampler State MOCS" start="612" end="618" type="uint"/>
     <field name="Bindless Sampler State Base Address Modify Enable" start="608" end="608" type="bool"/>
     <field name="Bindless Sampler State Buffer Size" start="684" end="703" type="uint"/>
   </instruction>
diff --git a/src/intel/genxml/gen6.xml b/src/intel/genxml/gen6.xml
index fff1e5a8411..b4976b33c34 100644
--- a/src/intel/genxml/gen6.xml
+++ b/src/intel/genxml/gen6.xml
@@ -126,8 +126,7 @@ 
       <value name="VERTEXDATA" value="0"/>
       <value name="INSTANCEDATA" value="1"/>
     </field>
-    <field name="Vertex Buffer Memory Object Control State" start="16" end="19" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Vertex Buffer MOCS" start="16" end="19" type="uint"/>
+    <field name="MOCS" start="16" end="19" type="uint"/>
     <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
     <field name="Vertex Fetch Invalidate" start="12" end="12" type="bool" default="0"/>
     <field name="Buffer Pitch" start="0" end="11" type="uint"/>
@@ -384,7 +383,6 @@ 
       <value name="VALIGN_4" value="1"/>
     </field>
     <field name="Y Offset" start="180" end="183" type="uint"/>
-    <field name="Surface Object Control State" start="176" end="179" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="MOCS" start="176" end="179" type="uint"/>
   </struct>
 
@@ -642,7 +640,7 @@ 
     <field name="Buffer 2 Valid" start="14" end="14" type="bool"/>
     <field name="Buffer 1 Valid" start="13" end="13" type="bool"/>
     <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="MOCS" start="8" end="11" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
     <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -656,7 +654,7 @@ 
     <field name="Buffer 2 Valid" start="14" end="14" type="bool"/>
     <field name="Buffer 1 Valid" start="13" end="13" type="bool"/>
     <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="MOCS" start="8" end="11" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
     <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -670,7 +668,7 @@ 
     <field name="Buffer 2 Valid" start="14" end="14" type="bool"/>
     <field name="Buffer 1 Valid" start="13" end="13" type="bool"/>
     <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="MOCS" start="8" end="11" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
     <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -720,8 +718,7 @@ 
     <field name="Render Target View Extent" start="129" end="137" type="uint"/>
     <field name="Depth Coordinate Offset Y" start="176" end="191" type="int"/>
     <field name="Depth Coordinate Offset X" start="160" end="175" type="int"/>
-    <field name="Depth Buffer Object Control State" start="219" end="223" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Depth Buffer MOCS" start="219" end="223" type="uint"/>
+    <field name="MOCS" start="219" end="223" type="uint"/>
   </instruction>
 
   <instruction name="3DSTATE_DRAWING_RECTANGLE" bias="2" length="4" engine="render">
@@ -804,8 +801,7 @@ 
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="1"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="15"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
-    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Hierarchical Depth Buffer MOCS" start="57" end="60" type="uint"/>
+    <field name="MOCS" start="57" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="95" type="address"/>
   </instruction>
@@ -815,8 +811,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="10"/>
-    <field name="Memory Object Control State" start="12" end="15" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="IndexBufferMOCS" start="12" end="15" type="uint"/>
+    <field name="MOCS" start="12" end="15" type="uint"/>
     <field name="Cut Index Enable" start="10" end="10" type="bool"/>
     <field name="Index Format" start="8" end="9" type="uint" prefix="INDEX">
       <value name="BYTE" value="0"/>
@@ -1068,8 +1063,7 @@ 
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="1"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="14"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
-    <field name="Stencil Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Stencil Buffer MOCS" start="57" end="60" type="uint"/>
+    <field name="MOCS" start="57" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="95" type="address"/>
   </instruction>
@@ -1696,26 +1690,20 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="8"/>
     <field name="General State Base Address" start="44" end="63" type="address"/>
-    <field name="General State Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="General State MOCS" start="40" end="43" type="uint"/>
-    <field name="Stateless Data Port Access Memory Object Control State" start="36" end="39" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="Stateless Data Port Access MOCS" start="36" end="39" type="uint"/>
     <field name="Stateless Data Port Access Force Write Thru" start="35" end="35" type="uint"/>
     <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
     <field name="Surface State Base Address" start="76" end="95" type="address"/>
-    <field name="Surface State Memory Object Control State" start="72" end="75" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="Surface State MOCS" start="72" end="75" type="uint"/>
     <field name="Surface State Base Address Modify Enable" start="64" end="64" type="bool"/>
     <field name="Dynamic State Base Address" start="108" end="127" type="address"/>
-    <field name="Dynamic State Memory Object Control State" start="104" end="107" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="Dynamic State MOCS" start="104" end="107" type="uint"/>
     <field name="Dynamic State Base Address Modify Enable" start="96" end="96" type="bool"/>
     <field name="Indirect Object Base Address" start="140" end="159" type="address"/>
-    <field name="Indirect Object Memory Object Control State" start="136" end="139" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="Indirect Object MOCS" start="136" end="139" type="uint"/>
     <field name="Indirect Object Base Address Modify Enable" start="128" end="128" type="bool"/>
     <field name="Instruction Base Address" start="172" end="191" type="address"/>
-    <field name="Instruction Memory Object Control State" start="168" end="171" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="Instruction MOCS" start="168" end="171" type="uint"/>
     <field name="Instruction Base Address Modify Enable" start="160" end="160" type="bool"/>
     <field name="General State Access Upper Bound" start="204" end="223" type="address"/>
diff --git a/src/intel/genxml/gen7.xml b/src/intel/genxml/gen7.xml
index 49b08281993..893c12b8af9 100644
--- a/src/intel/genxml/gen7.xml
+++ b/src/intel/genxml/gen7.xml
@@ -157,7 +157,7 @@ 
     <group count="4" start="0" size="16">
       <field name="Read Length" start="0" end="15" type="uint"/>
     </group>
-    <field name="Constant Buffer Object Control State" start="64" end="68" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="64" end="68" type="uint"/>
     <group count="4" start="64" size="32">
       <field name="Buffer" start="5" end="31" type="address"/>
     </group>
@@ -169,8 +169,7 @@ 
       <value name="VERTEXDATA" value="0"/>
       <value name="INSTANCEDATA" value="1"/>
     </field>
-    <field name="Vertex Buffer Memory Object Control State" start="16" end="19" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Vertex Buffer MOCS" start="16" end="19" type="uint"/>
+    <field name="MOCS" start="16" end="19" type="uint"/>
     <field name="Address Modify Enable" start="14" end="14" type="bool"/>
     <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
     <field name="Vertex Fetch Invalidate" start="12" end="12" type="bool" default="0"/>
@@ -443,7 +442,6 @@ 
     <field name="Strbuf Minimum Array Element" start="128" end="154" type="uint"/>
     <field name="X Offset" start="185" end="191" type="uint"/>
     <field name="Y Offset" start="180" end="183" type="uint"/>
-    <field name="Surface Object Control State" start="176" end="179" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="MOCS" start="176" end="179" type="uint"/>
     <field name="Surface Min LOD" start="164" end="167" type="uint"/>
     <field name="MIP Count / LOD" start="160" end="163" type="uint"/>
@@ -815,8 +813,7 @@ 
       <value name="SURFTYPE_CUBE (must be zero)" value="0"/>
     </field>
     <field name="Minimum Array Element" start="138" end="148" type="uint"/>
-    <field name="Depth Buffer Object Control State" start="128" end="131" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Depth Buffer MOCS" start="128" end="131" type="uint"/>
+    <field name="MOCS" start="128" end="131" type="uint"/>
     <field name="Depth Coordinate Offset Y" start="176" end="191" type="int"/>
     <field name="Depth Coordinate Offset X" start="160" end="175" type="int"/>
     <field name="Render Target View Extent" start="213" end="223" type="uint"/>
@@ -949,8 +946,7 @@ 
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
-    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Hierarchical Depth Buffer MOCS" start="57" end="60" type="uint"/>
+    <field name="MOCS" start="57" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="95" type="address"/>
   </instruction>
@@ -996,8 +992,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="10"/>
-    <field name="Memory Object Control State" start="12" end="15" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="IndexBufferMOCS" start="12" end="15" type="uint"/>
+    <field name="MOCS" start="12" end="15" type="uint"/>
     <field name="Cut Index Enable" start="10" end="10" type="bool"/>
     <field name="Index Format" start="8" end="9" type="uint" prefix="INDEX">
       <value name="BYTE" value="0"/>
@@ -1422,8 +1417,7 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="24"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
     <field name="SO Buffer Index" start="61" end="62" type="uint"/>
-    <field name="SO Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="SO Buffer MOCS" start="57" end="60" type="uint"/>
+    <field name="MOCS" start="57" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="43" type="uint"/>
     <field name="Surface Base Address" start="66" end="95" type="address"/>
     <field name="Surface End Address" start="98" end="127" type="address"/>
@@ -1454,8 +1448,7 @@ 
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
-    <field name="Stencil Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Stencil Buffer MOCS" start="57" end="60" type="uint"/>
+    <field name="MOCS" start="57" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="95" type="address"/>
   </instruction>
@@ -2238,21 +2231,21 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="8"/>
     <field name="General State Base Address" start="44" end="63" type="address"/>
-    <field name="General State Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Stateless Data Port Access Memory Object Control State" start="36" end="39" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="General State MOCS" start="40" end="43" type="uint"/>
+    <field name="Stateless Data Port Access MOCS" start="36" end="39" type="uint"/>
     <field name="Stateless Data Port Access Force Write Thru" start="35" end="35" type="uint"/>
     <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
     <field name="Surface State Base Address" start="76" end="95" type="address"/>
-    <field name="Surface State Memory Object Control State" start="72" end="75" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Surface State MOCS" start="72" end="75" type="uint"/>
     <field name="Surface State Base Address Modify Enable" start="64" end="64" type="bool"/>
     <field name="Dynamic State Base Address" start="108" end="127" type="address"/>
-    <field name="Dynamic State Memory Object Control State" start="104" end="107" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Dynamic State MOCS" start="104" end="107" type="uint"/>
     <field name="Dynamic State Base Address Modify Enable" start="96" end="96" type="bool"/>
     <field name="Indirect Object Base Address" start="140" end="159" type="address"/>
-    <field name="Indirect Object Memory Object Control State" start="136" end="139" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Indirect Object MOCS" start="136" end="139" type="uint"/>
     <field name="Indirect Object Base Address Modify Enable" start="128" end="128" type="bool"/>
     <field name="Instruction Base Address" start="172" end="191" type="address"/>
-    <field name="Instruction Memory Object Control State" start="168" end="171" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Instruction MOCS" start="168" end="171" type="uint"/>
     <field name="Instruction Base Address Modify Enable" start="160" end="160" type="bool"/>
     <field name="General State Access Upper Bound" start="204" end="223" type="address"/>
     <field name="General State Access Upper Bound Modify Enable" start="192" end="192" type="bool"/>
@@ -2290,7 +2283,7 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="3"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="0"/>
     <field name="SW Tessellation Base Address" start="44" end="63" type="address"/>
-    <field name="SW Tessellation Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="SW Tessellation MOCS" start="40" end="43" type="uint"/>
   </instruction>
 
   <register name="IA_VERTICES_COUNT" length="2" num="0x2310">
diff --git a/src/intel/genxml/gen75.xml b/src/intel/genxml/gen75.xml
index 6ce31b49241..4a858eb7fea 100644
--- a/src/intel/genxml/gen75.xml
+++ b/src/intel/genxml/gen75.xml
@@ -165,7 +165,7 @@ 
     <group count="4" start="0" size="16">
       <field name="Read Length" start="0" end="15" type="uint"/>
     </group>
-    <field name="Constant Buffer Object Control State" start="64" end="68" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="64" end="68" type="uint"/>
     <group count="4" start="64" size="32">
       <field name="Buffer" start="5" end="31" type="address"/>
     </group>
@@ -188,8 +188,7 @@ 
       <value name="VERTEXDATA" value="0"/>
       <value name="INSTANCEDATA" value="1"/>
     </field>
-    <field name="Vertex Buffer Memory Object Control State" start="16" end="19" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Vertex Buffer MOCS" start="16" end="19" type="uint"/>
+    <field name="MOCS" start="16" end="19" type="uint"/>
     <field name="Address Modify Enable" start="14" end="14" type="bool"/>
     <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
     <field name="Vertex Fetch Invalidate" start="12" end="12" type="bool" default="0"/>
@@ -463,7 +462,6 @@ 
     <field name="Strbuf Minimum Array Element" start="128" end="154" type="uint"/>
     <field name="X Offset" start="185" end="191" type="uint"/>
     <field name="Y Offset" start="180" end="183" type="uint"/>
-    <field name="Surface Object Control State" start="176" end="179" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="MOCS" start="176" end="179" type="uint"/>
     <field name="Surface Min LOD" start="164" end="167" type="uint"/>
     <field name="MIP Count / LOD" start="160" end="163" type="uint"/>
@@ -826,7 +824,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
     <field name="Binding Table Pool Base Address" start="44" end="63" type="address"/>
     <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
-    <field name="Surface Object Control State" start="39" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="39" end="42" type="uint"/>
     <field name="Binding Table Pool Upper Bound" start="76" end="95" type="address"/>
   </instruction>
 
@@ -999,7 +997,7 @@ 
       <value name="SURFTYPE_CUBE (must be zero)" value="0"/>
     </field>
     <field name="Minimum Array Element" start="138" end="148" type="uint"/>
-    <field name="Depth Buffer Object Control State" start="128" end="131" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="128" end="131" type="uint"/>
     <field name="Depth Buffer MOCS" start="128" end="131" type="uint"/>
     <field name="Depth Coordinate Offset Y" start="176" end="191" type="int"/>
     <field name="Depth Coordinate Offset X" start="160" end="175" type="int"/>
@@ -1160,7 +1158,7 @@ 
     <field name="Gather Pool Base Address" start="44" end="63" type="address"/>
     <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
     <field start="36" end="37" type="mbo"/>
-    <field name="Memory Object Control State" start="32" end="35" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="32" end="35" type="uint"/>
     <field name="Gather Pool Upper Bound" start="76" end="95" type="address"/>
   </instruction>
 
@@ -1233,8 +1231,7 @@ 
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
-    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Hierarchical Depth Buffer MOCS" start="57" end="60" type="uint"/>
+    <field name="MOCS" start="57" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="95" type="address"/>
   </instruction>
@@ -1284,8 +1281,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="10"/>
-    <field name="Memory Object Control State" start="12" end="15" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="IndexBufferMOCS" start="12" end="15" type="uint"/>
+    <field name="MOCS" start="12" end="15" type="uint"/>
     <field name="Index Format" start="8" end="9" type="uint" prefix="INDEX">
       <value name="BYTE" value="0"/>
       <value name="WORD" value="1"/>
@@ -1736,8 +1732,7 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="24"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
     <field name="SO Buffer Index" start="61" end="62" type="uint"/>
-    <field name="SO Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="SO Buffer MOCS" start="57" end="60" type="uint"/>
+    <field name="MOCS" start="57" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="43" type="uint"/>
     <field name="Surface Base Address" start="66" end="95" type="address"/>
     <field name="Surface End Address" start="98" end="127" type="address"/>
@@ -1769,8 +1764,7 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
     <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
-    <field name="Stencil Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Stencil Buffer MOCS" start="57" end="60" type="uint"/>
+    <field name="MOCS" start="57" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="95" type="address"/>
   </instruction>
@@ -2702,20 +2696,20 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="8"/>
     <field name="General State Base Address" start="44" end="63" type="address"/>
-    <field name="General State Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Stateless Data Port Access Memory Object Control State" start="36" end="39" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="General State MOCS" start="40" end="43" type="uint"/>
+    <field name="Stateless Data Port Access MOCS" start="36" end="39" type="uint"/>
     <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
     <field name="Surface State Base Address" start="76" end="95" type="address"/>
-    <field name="Surface State Memory Object Control State" start="72" end="75" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Surface State MOCS" start="72" end="75" type="uint"/>
     <field name="Surface State Base Address Modify Enable" start="64" end="64" type="bool"/>
     <field name="Dynamic State Base Address" start="108" end="127" type="address"/>
-    <field name="Dynamic State Memory Object Control State" start="104" end="107" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Dynamic State MOCS" start="104" end="107" type="uint"/>
     <field name="Dynamic State Base Address Modify Enable" start="96" end="96" type="bool"/>
     <field name="Indirect Object Base Address" start="140" end="159" type="address"/>
-    <field name="Indirect Object Memory Object Control State" start="136" end="139" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Indirect Object MOCS" start="136" end="139" type="uint"/>
     <field name="Indirect Object Base Address Modify Enable" start="128" end="128" type="bool"/>
     <field name="Instruction Base Address" start="172" end="191" type="address"/>
-    <field name="Instruction Memory Object Control State" start="168" end="171" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Instruction MOCS" start="168" end="171" type="uint"/>
     <field name="Instruction Base Address Modify Enable" start="160" end="160" type="bool"/>
     <field name="General State Access Upper Bound" start="204" end="223" type="address"/>
     <field name="General State Access Upper Bound Modify Enable" start="192" end="192" type="bool"/>
@@ -2753,7 +2747,7 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="3"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="0"/>
     <field name="SW Tessellation Base Address" start="44" end="63" type="address"/>
-    <field name="SW Tessellation Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="SW Tessellation MOCS" start="40" end="43" type="uint"/>
   </instruction>
 
   <register name="IA_VERTICES_COUNT" length="2" num="0x2310">
diff --git a/src/intel/genxml/gen8.xml b/src/intel/genxml/gen8.xml
index a27cac12843..fd19b0c8b33 100644
--- a/src/intel/genxml/gen8.xml
+++ b/src/intel/genxml/gen8.xml
@@ -216,8 +216,7 @@ 
 
   <struct name="VERTEX_BUFFER_STATE" length="4">
     <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
-    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
+    <field name="MOCS" start="16" end="22" type="uint"/>
     <field name="Address Modify Enable" start="14" end="14" type="bool"/>
     <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
     <field name="Buffer Pitch" start="0" end="11" type="uint"/>
@@ -462,7 +461,6 @@ 
     <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
     <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
     <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
-    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="MOCS" start="56" end="62" type="uint"/>
     <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
     <field name="Surface QPitch" start="32" end="46" type="uint"/>
@@ -894,7 +892,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
     <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
     <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
-    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
       <value name="No Valid Data" value="0"/>
     </field>
@@ -986,7 +984,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -996,7 +994,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1006,7 +1004,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1016,7 +1014,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1026,7 +1024,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1059,8 +1057,7 @@ 
     <field name="LOD" start="128" end="131" type="uint"/>
     <field name="Depth" start="181" end="191" type="uint"/>
     <field name="Minimum Array Element" start="170" end="180" type="uint"/>
-    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
+    <field name="MOCS" start="160" end="166" type="uint"/>
     <field name="Render Target View Extent" start="245" end="255" type="uint"/>
     <field name="Surface QPitch" start="224" end="238" type="uint"/>
   </instruction>
@@ -1221,7 +1218,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
     <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
     <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
-    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
   </instruction>
 
@@ -1299,8 +1296,7 @@ 
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
-    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
+    <field name="MOCS" start="57" end="63" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="127" type="address"/>
     <field name="Surface QPitch" start="128" end="142" type="uint"/>
@@ -1356,8 +1352,7 @@ 
       <value name="WORD" value="1"/>
       <value name="DWORD" value="2"/>
     </field>
-    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Buffer Starting Address" start="64" end="127" type="address"/>
     <field name="Buffer Size" start="128" end="159" type="uint"/>
   </instruction>
@@ -1837,8 +1832,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
     <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
     <field name="SO Buffer Index" start="61" end="62" type="uint"/>
-    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
+    <field name="MOCS" start="54" end="60" type="uint"/>
     <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
     <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
     <field name="Surface Base Address" start="66" end="111" type="address"/>
@@ -1873,8 +1867,7 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
     <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
-    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
+    <field name="MOCS" start="54" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="127" type="address"/>
     <field name="Surface QPitch" start="128" end="142" type="uint"/>
@@ -2962,20 +2955,20 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="14"/>
     <field name="General State Base Address" start="44" end="95" type="address"/>
-    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="General State MOCS" start="36" end="42" type="uint"/>
     <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
-    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
     <field name="Surface State Base Address" start="140" end="191" type="address"/>
-    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
     <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
     <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
-    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
     <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
     <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
-    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
     <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
     <field name="Instruction Base Address" start="332" end="383" type="address"/>
-    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
     <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
     <field name="General State Buffer Size" start="396" end="415" type="uint"/>
     <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
@@ -3013,7 +3006,7 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="3"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="0"/>
     <field name="SW Tessellation Base Address" start="44" end="79" type="address"/>
-    <field name="SW Tessellation Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="SW Tessellation MOCS" start="40" end="43" type="uint"/>
   </instruction>
 
   <register name="IA_VERTICES_COUNT" length="2" num="0x2310">
diff --git a/src/intel/genxml/gen9.xml b/src/intel/genxml/gen9.xml
index 0f9a1d110e8..9349e24b0f0 100644
--- a/src/intel/genxml/gen9.xml
+++ b/src/intel/genxml/gen9.xml
@@ -219,14 +219,9 @@ 
     <field name="Binding Table Index Offset" start="0" end="3" type="uint"/>
   </struct>
 
-  <struct name="MEMORY_OBJECT_CONTROL_STATE" length="1">
-    <field name="Index to MOCS Tables" start="1" end="6" type="uint"/>
-  </struct>
-
   <struct name="VERTEX_BUFFER_STATE" length="4">
     <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
-    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
+    <field name="MOCS" start="16" end="22" type="uint"/>
     <field name="Address Modify Enable" start="14" end="14" type="bool"/>
     <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
     <field name="Buffer Pitch" start="0" end="11" type="uint"/>
@@ -494,7 +489,6 @@ 
     <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
     <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
     <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
-    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
     <field name="MOCS" start="56" end="62" type="uint"/>
     <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
     <field name="Surface QPitch" start="32" end="46" type="uint"/>
@@ -952,7 +946,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
     <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
     <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
-    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
       <value name="No Valid Data" value="0"/>
     </field>
@@ -1044,7 +1038,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1054,7 +1048,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1064,7 +1058,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1074,7 +1068,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1084,7 +1078,7 @@ 
     <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
-    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="8" end="14" type="uint"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
     <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
   </instruction>
@@ -1115,7 +1109,7 @@ 
     <field name="LOD" start="128" end="131" type="uint"/>
     <field name="Depth" start="181" end="191" type="uint"/>
     <field name="Minimum Array Element" start="170" end="180" type="uint"/>
-    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="160" end="166" type="uint"/>
     <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
     <field name="Tiled Resource Mode" start="222" end="223" type="uint">
       <value name="NONE" value="0"/>
@@ -1326,7 +1320,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
     <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
     <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
-    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
   </instruction>
 
@@ -1405,8 +1399,7 @@ 
     <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
-    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
+    <field name="MOCS" start="57" end="63" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="127" type="address"/>
     <field name="Surface QPitch" start="128" end="142" type="uint"/>
@@ -1469,8 +1462,7 @@ 
       <value name="WORD" value="1"/>
       <value name="DWORD" value="2"/>
     </field>
-    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
+    <field name="MOCS" start="32" end="38" type="uint"/>
     <field name="Buffer Starting Address" start="64" end="127" type="address"/>
     <field name="Buffer Size" start="128" end="159" type="uint"/>
   </instruction>
@@ -2020,8 +2012,7 @@ 
     <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
     <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
     <field name="SO Buffer Index" start="61" end="62" type="uint"/>
-    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
+    <field name="MOCS" start="54" end="60" type="uint"/>
     <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
     <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
     <field name="Surface Base Address" start="66" end="111" type="address"/>
@@ -2056,8 +2047,7 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
     <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
-    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
-    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
+    <field name="MOCS" start="54" end="60" type="uint"/>
     <field name="Surface Pitch" start="32" end="48" type="uint"/>
     <field name="Surface Base Address" start="64" end="127" type="address"/>
     <field name="Surface QPitch" start="128" end="142" type="uint"/>
@@ -3251,20 +3241,20 @@ 
     <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
     <field name="DWord Length" start="0" end="7" type="uint" default="17"/>
     <field name="General State Base Address" start="44" end="95" type="address"/>
-    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="General State MOCS" start="36" end="42" type="uint"/>
     <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
-    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
     <field name="Surface State Base Address" start="140" end="191" type="address"/>
-    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
     <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
     <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
-    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
     <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
     <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
-    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
     <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
     <field name="Instruction Base Address" start="332" end="383" type="address"/>
-    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
     <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
     <field name="General State Buffer Size" start="396" end="415" type="uint"/>
     <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
@@ -3275,7 +3265,7 @@ 
     <field name="Instruction Buffer Size" start="492" end="511" type="uint"/>
     <field name="Instruction Buffer size Modify Enable" start="480" end="480" type="bool"/>
     <field name="Bindless Surface State Base Address" start="524" end="575" type="address"/>
-    <field name="Bindless Surface State Memory Object Control State" start="516" end="522" type="MEMORY_OBJECT_CONTROL_STATE"/>
+    <field name="Bindless Surface State MOCS" start="516" end="522" type="uint"/>
     <field name="Bindless Surface State Base Address Modify Enable" start="512" end="512" type="bool"/>
     <field name="Bindless Surface State Size" start="588" end="607" type="uint"/>
   </instruction>
diff --git a/src/intel/isl/isl_emit_depth_stencil.c b/src/intel/isl/isl_emit_depth_stencil.c
index 9cf5a476687..d2dec3761e5 100644
--- a/src/intel/isl/isl_emit_depth_stencil.c
+++ b/src/intel/isl/isl_emit_depth_stencil.c
@@ -94,7 +94,7 @@  isl_genX(emit_depth_stencil_hiz_s)(const struct isl_device *dev, void *batch,
 #endif
       db.SurfaceBaseAddress = info->depth_address;
 #if GEN_GEN >= 6
-      db.DepthBufferMOCS = info->mocs;
+      db.MOCS = info->mocs;
 #endif
 
 #if GEN_GEN <= 6
@@ -138,7 +138,7 @@  isl_genX(emit_depth_stencil_hiz_s)(const struct isl_device *dev, void *batch,
 #endif
       sb.SurfaceBaseAddress = info->stencil_address;
 #if GEN_GEN >= 6
-      sb.StencilBufferMOCS = info->mocs;
+      sb.MOCS = info->mocs;
 #endif
       sb.SurfacePitch = info->stencil_surf->row_pitch_B - 1;
 #if GEN_GEN >= 8
@@ -161,7 +161,7 @@  isl_genX(emit_depth_stencil_hiz_s)(const struct isl_device *dev, void *batch,
       db.HierarchicalDepthBufferEnable = true;
 
       hiz.SurfaceBaseAddress = info->hiz_address;
-      hiz.HierarchicalDepthBufferMOCS = info->mocs;
+      hiz.MOCS = info->mocs;
       hiz.SurfacePitch = info->hiz_surf->row_pitch_B - 1;
 #if GEN_GEN >= 8
       /* From the SKL PRM Vol2a:
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index aff076a55d9..b3e9ace7ad8 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -1349,64 +1349,50 @@  _anv_combine_address(struct anv_batch *batch, void *location,
            _dst = NULL;                                                 \
          }))
 
-#define GEN7_MOCS (struct GEN7_MEMORY_OBJECT_CONTROL_STATE) {  \
-   .GraphicsDataTypeGFDT                        = 0,           \
-   .LLCCacheabilityControlLLCCC                 = 0,           \
-   .L3CacheabilityControlL3CC                   = 1,           \
-}
+/* MEMORY_OBJECT_CONTROL_STATE:
+ * .GraphicsDataTypeGFDT                        = 0,
+ * .LLCCacheabilityControlLLCCC                 = 0,
+ * .L3CacheabilityControlL3CC                   = 1,
+ */
+#define GEN7_MOCS 1
 
-#define GEN75_MOCS (struct GEN75_MEMORY_OBJECT_CONTROL_STATE) {  \
-   .LLCeLLCCacheabilityControlLLCCC             = 0,           \
-   .L3CacheabilityControlL3CC                   = 1,           \
-}
+/* MEMORY_OBJECT_CONTROL_STATE:
+ * .LLCeLLCCacheabilityControlLLCCC             = 0,
+ * .L3CacheabilityControlL3CC                   = 1,
+ */
+#define GEN75_MOCS 1
 
-#define GEN8_MOCS (struct GEN8_MEMORY_OBJECT_CONTROL_STATE) {  \
-      .MemoryTypeLLCeLLCCacheabilityControl = WB,              \
-      .TargetCache = L3DefertoPATforLLCeLLCselection,          \
-      .AgeforQUADLRU = 0                                       \
-   }
+/* MEMORY_OBJECT_CONTROL_STATE:
+ * .MemoryTypeLLCeLLCCacheabilityControl = WB,
+ * .TargetCache = L3DefertoPATforLLCeLLCselection,
+ * .AgeforQUADLRU = 0
+ */
+#define GEN8_MOCS 0x78
 
-#define GEN8_EXTERNAL_MOCS (struct GEN8_MEMORY_OBJECT_CONTROL_STATE) {     \
-      .MemoryTypeLLCeLLCCacheabilityControl = UCwithFenceifcoherentcycle,  \
-      .TargetCache = L3DefertoPATforLLCeLLCselection,                      \
-      .AgeforQUADLRU = 0                                                   \
-   }
+/* MEMORY_OBJECT_CONTROL_STATE:
+ * .MemoryTypeLLCeLLCCacheabilityControl = UCwithFenceifcoherentcycle,
+ * .TargetCache = L3DefertoPATforLLCeLLCselection,
+ * .AgeforQUADLRU = 0
+ */
+#define GEN8_EXTERNAL_MOCS 0x18
 
 /* Skylake: MOCS is now an index into an array of 62 different caching
  * configurations programmed by the kernel.
  */
 
-#define GEN9_MOCS (struct GEN9_MEMORY_OBJECT_CONTROL_STATE) {  \
-      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */              \
-      .IndextoMOCSTables                           = 2         \
-   }
+/* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */
+#define GEN9_MOCS 2
 
-#define GEN9_EXTERNAL_MOCS (struct GEN9_MEMORY_OBJECT_CONTROL_STATE) {  \
-      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */                       \
-      .IndextoMOCSTables                           = 1                  \
-   }
+/* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */
+#define GEN9_EXTERNAL_MOCS 1
 
 /* Cannonlake MOCS defines are duplicates of Skylake MOCS defines. */
-#define GEN10_MOCS (struct GEN10_MEMORY_OBJECT_CONTROL_STATE) {  \
-      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */              \
-      .IndextoMOCSTables                           = 2         \
-   }
-
-#define GEN10_EXTERNAL_MOCS (struct GEN10_MEMORY_OBJECT_CONTROL_STATE) {   \
-      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */                          \
-      .IndextoMOCSTables                           = 1                     \
-   }
+#define GEN10_MOCS GEN9_MOCS
+#define GEN10_EXTERNAL_MOCS GEN9_EXTERNAL_MOCS
 
 /* Ice Lake MOCS defines are duplicates of Skylake MOCS defines. */
-#define GEN11_MOCS (struct GEN11_MEMORY_OBJECT_CONTROL_STATE) {  \
-      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */              \
-      .IndextoMOCSTables                           = 2         \
-   }
-
-#define GEN11_EXTERNAL_MOCS (struct GEN11_MEMORY_OBJECT_CONTROL_STATE) {   \
-      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */                          \
-      .IndextoMOCSTables                           = 1                     \
-   }
+#define GEN11_MOCS GEN9_MOCS
+#define GEN11_EXTERNAL_MOCS GEN9_EXTERNAL_MOCS
 
 struct anv_device_memory {
    struct anv_bo *                              bo;
diff --git a/src/intel/vulkan/gen7_cmd_buffer.c b/src/intel/vulkan/gen7_cmd_buffer.c
index da51cb9781c..08bebd44adb 100644
--- a/src/intel/vulkan/gen7_cmd_buffer.c
+++ b/src/intel/vulkan/gen7_cmd_buffer.c
@@ -246,7 +246,7 @@  genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
          ib.CutIndexEnable             = pipeline->primitive_restart;
 #endif
          ib.IndexFormat                = cmd_buffer->state.gfx.gen7.index_type;
-         ib.IndexBufferMOCS            = anv_mocs_for_bo(cmd_buffer->device,
+         ib.MOCS                       = anv_mocs_for_bo(cmd_buffer->device,
                                                          buffer->address.bo);
 
          ib.BufferStartingAddress      = anv_address_add(buffer->address,
diff --git a/src/intel/vulkan/gen8_cmd_buffer.c b/src/intel/vulkan/gen8_cmd_buffer.c
index 752d04f3013..5bacfed71c8 100644
--- a/src/intel/vulkan/gen8_cmd_buffer.c
+++ b/src/intel/vulkan/gen8_cmd_buffer.c
@@ -565,7 +565,7 @@  void genX(CmdBindIndexBuffer)(
 
    anv_batch_emit(&cmd_buffer->batch, GENX(3DSTATE_INDEX_BUFFER), ib) {
       ib.IndexFormat                = vk_to_gen_index_type[indexType];
-      ib.IndexBufferMOCS            = anv_mocs_for_bo(cmd_buffer->device,
+      ib.MOCS                       = anv_mocs_for_bo(cmd_buffer->device,
                                                       buffer->address.bo);
       ib.BufferStartingAddress      = anv_address_add(buffer->address, offset);
       ib.BufferSize                 = buffer->size - offset;
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index fb70cd2e386..1aaf83e97e8 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -86,26 +86,26 @@  genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer)
 
    anv_batch_emit(&cmd_buffer->batch, GENX(STATE_BASE_ADDRESS), sba) {
       sba.GeneralStateBaseAddress = (struct anv_address) { NULL, 0 };
-      sba.GeneralStateMemoryObjectControlState = GENX(MOCS);
+      sba.GeneralStateMOCS = GENX(MOCS);
       sba.GeneralStateBaseAddressModifyEnable = true;
 
       sba.SurfaceStateBaseAddress =
          anv_cmd_buffer_surface_base_address(cmd_buffer);
-      sba.SurfaceStateMemoryObjectControlState = GENX(MOCS);
+      sba.SurfaceStateMOCS = GENX(MOCS);
       sba.SurfaceStateBaseAddressModifyEnable = true;
 
       sba.DynamicStateBaseAddress =
          (struct anv_address) { &device->dynamic_state_pool.block_pool.bo, 0 };
-      sba.DynamicStateMemoryObjectControlState = GENX(MOCS);
+      sba.DynamicStateMOCS = GENX(MOCS);
       sba.DynamicStateBaseAddressModifyEnable = true;
 
       sba.IndirectObjectBaseAddress = (struct anv_address) { NULL, 0 };
-      sba.IndirectObjectMemoryObjectControlState = GENX(MOCS);
+      sba.IndirectObjectMOCS = GENX(MOCS);
       sba.IndirectObjectBaseAddressModifyEnable = true;
 
       sba.InstructionBaseAddress =
          (struct anv_address) { &device->instruction_state_pool.block_pool.bo, 0 };
-      sba.InstructionMemoryObjectControlState = GENX(MOCS);
+      sba.InstructionMOCS = GENX(MOCS);
       sba.InstructionBaseAddressModifyEnable = true;
 
 #  if (GEN_GEN >= 8)
@@ -124,13 +124,13 @@  genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer)
 #  endif
 #  if (GEN_GEN >= 9)
       sba.BindlessSurfaceStateBaseAddress = (struct anv_address) { NULL, 0 };
-      sba.BindlessSurfaceStateMemoryObjectControlState = GENX(MOCS);
+      sba.BindlessSurfaceStateMOCS = GENX(MOCS);
       sba.BindlessSurfaceStateBaseAddressModifyEnable = true;
       sba.BindlessSurfaceStateSize = 0;
 #  endif
 #  if (GEN_GEN >= 10)
       sba.BindlessSamplerStateBaseAddress = (struct anv_address) { NULL, 0 };
-      sba.BindlessSamplerStateMemoryObjectControlState = GENX(MOCS);
+      sba.BindlessSamplerStateMOCS = GENX(MOCS);
       sba.BindlessSamplerStateBaseAddressModifyEnable = true;
       sba.BindlessSamplerStateBufferSize = 0;
 #  endif
@@ -2572,8 +2572,7 @@  genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer)
          struct GENX(VERTEX_BUFFER_STATE) state = {
             .VertexBufferIndex = vb,
 
-            .VertexBufferMOCS = anv_mocs_for_bo(cmd_buffer->device,
-                                                buffer->address.bo),
+            .MOCS = anv_mocs_for_bo(cmd_buffer->device, buffer->address.bo),
 #if GEN_GEN <= 7
             .BufferAccessType = pipeline->vb[vb].instanced ? INSTANCEDATA : VERTEXDATA,
             .InstanceDataStepRate = pipeline->vb[vb].instance_divisor,
@@ -2691,7 +2690,7 @@  emit_vertex_bo(struct anv_cmd_buffer *cmd_buffer,
          .VertexBufferIndex = index,
          .AddressModifyEnable = true,
          .BufferPitch = 0,
-         .VertexBufferMOCS = anv_mocs_for_bo(cmd_buffer->device, addr.bo),
+         .MOCS = anv_mocs_for_bo(cmd_buffer->device, addr.bo),
 #if (GEN_GEN >= 8)
          .BufferStartingAddress = addr,
          .BufferSize = size
diff --git a/src/intel/vulkan/genX_gpu_memcpy.c b/src/intel/vulkan/genX_gpu_memcpy.c
index 1bee1c6dc17..ea35daa4126 100644
--- a/src/intel/vulkan/genX_gpu_memcpy.c
+++ b/src/intel/vulkan/genX_gpu_memcpy.c
@@ -167,7 +167,7 @@  genX(cmd_buffer_so_memcpy)(struct anv_cmd_buffer *cmd_buffer,
          .AddressModifyEnable = true,
          .BufferStartingAddress = src,
          .BufferPitch = bs,
-         .VertexBufferMOCS = anv_mocs_for_bo(cmd_buffer->device, src.bo),
+         .MOCS = anv_mocs_for_bo(cmd_buffer->device, src.bo),
 #if (GEN_GEN >= 8)
          .BufferSize = size,
 #else
@@ -227,7 +227,7 @@  genX(cmd_buffer_so_memcpy)(struct anv_cmd_buffer *cmd_buffer,
 
    anv_batch_emit(&cmd_buffer->batch, GENX(3DSTATE_SO_BUFFER), sob) {
       sob.SOBufferIndex = 0;
-      sob.SOBufferMOCS = anv_mocs_for_bo(cmd_buffer->device, dst.bo),
+      sob.MOCS = anv_mocs_for_bo(cmd_buffer->device, dst.bo),
       sob.SurfaceBaseAddress = dst;
 
 #if GEN_GEN >= 8
diff --git a/src/intel/vulkan/genX_state.c b/src/intel/vulkan/genX_state.c
index 42800a2581e..0f6b77492fb 100644
--- a/src/intel/vulkan/genX_state.c
+++ b/src/intel/vulkan/genX_state.c
@@ -91,11 +91,9 @@  gen10_emit_wa_lri_to_cache_mode_zero(struct anv_batch *batch)
 VkResult
 genX(init_device_state)(struct anv_device *device)
 {
-   GENX(MEMORY_OBJECT_CONTROL_STATE_pack)(NULL, &device->default_mocs,
-                                          &GENX(MOCS));
+   device->default_mocs = GENX(MOCS);
 #if GEN_GEN >= 8
-   GENX(MEMORY_OBJECT_CONTROL_STATE_pack)(NULL, &device->external_mocs,
-                                          &GENX(EXTERNAL_MOCS));
+   device->external_mocs = GENX(EXTERNAL_MOCS);
 #else
    device->external_mocs = device->default_mocs;
 #endif
diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c
index 8e3fcbf12ec..93147a253ed 100644
--- a/src/mesa/drivers/dri/i965/genX_state_upload.c
+++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
@@ -363,15 +363,15 @@  genX(emit_vertex_buffer_state)(struct brw_context *brw,
 #endif
 
 #if GEN_GEN == 11
-      .VertexBufferMOCS = ICL_MOCS_WB,
+      .MOCS = ICL_MOCS_WB,
 #elif GEN_GEN == 10
-      .VertexBufferMOCS = CNL_MOCS_WB,
+      .MOCS = CNL_MOCS_WB,
 #elif GEN_GEN == 9
-      .VertexBufferMOCS = SKL_MOCS_WB,
+      .MOCS = SKL_MOCS_WB,
 #elif GEN_GEN == 8
-      .VertexBufferMOCS = BDW_MOCS_WB,
+      .MOCS = BDW_MOCS_WB,
 #elif GEN_GEN == 7
-      .VertexBufferMOCS = GEN7_MOCS_L3,
+      .MOCS = GEN7_MOCS_L3,
 #endif
    };
 
@@ -965,7 +965,7 @@  genX(emit_index_buffer)(struct brw_context *brw)
        */
       ib.BufferStartingAddress = ro_32_bo(brw->ib.bo, 0);
 #if GEN_GEN >= 8
-      ib.IndexBufferMOCS = GEN_GEN >= 9 ? SKL_MOCS_WB : BDW_MOCS_WB;
+      ib.MOCS = GEN_GEN >= 9 ? SKL_MOCS_WB : BDW_MOCS_WB;
       ib.BufferSize = brw->ib.size;
 #else
       ib.BufferEndingAddress = ro_bo(brw->ib.bo, brw->ib.size - 1);
@@ -3847,7 +3847,7 @@  genX(upload_3dstate_so_buffers)(struct brw_context *brw)
          sob.SOBufferEnable = true;
          sob.StreamOffsetWriteEnable = true;
          sob.StreamOutputBufferOffsetAddressEnable = true;
-         sob.SOBufferMOCS = mocs_wb;
+         sob.MOCS = mocs_wb;
 
          sob.SurfaceSize = MAX2(xfb_obj->Size[i] / 4, 1) - 1;
          sob.StreamOutputBufferOffsetAddress =

Comments

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>

On 2018-12-11 20:23:06, Kenneth Graunke wrote:
> When we first started using genxml, we decided to represent MOCS as an
> actual structure, and pack values.  However, in many places, it was more
> convenient to use a numeric value rather than treating it as a struct,
> so we added secondary setters in a bunch of places as well.
> 
> We were not entirely consistent, either.  Some places only had one.
> Gen6 had both kinds of setters for STATE_BASE_ADDRESS, but newer gens
> only had the struct-based setters.  The names were sometimes "Constant
> Buffer Object Control State" instead of "Memory", making it harder to
> find.  Many had prefixes like "Vertex Buffer MOCS"...in a vertex buffer
> packet...which is a bit redundant.
> 
> On modern hardware, MOCS is simply an index into a table, but we were
> still carrying around the structure with an "Index to MOCS Table" field,
> in addition to the direct numeric setters.  This is clunky - we really
> just want a number on new hardware.
> 
> This patch eliminates the struct-based setters, and makes the numeric
> setters be consistently called "MOCS".  We leave the struct definition
> around on Gen7-8 for reference purposes, but it is unused.
> ---
>  src/intel/blorp/blorp_genX_exec.h             |  2 +-
>  src/intel/genxml/gen10.xml                    | 53 +++++--------
>  src/intel/genxml/gen11.xml                    | 53 +++++--------
>  src/intel/genxml/gen6.xml                     | 28 ++-----
>  src/intel/genxml/gen7.xml                     | 35 ++++-----
>  src/intel/genxml/gen75.xml                    | 38 ++++------
>  src/intel/genxml/gen8.xml                     | 47 +++++-------
>  src/intel/genxml/gen9.xml                     | 50 +++++-------
>  src/intel/isl/isl_emit_depth_stencil.c        |  6 +-
>  src/intel/vulkan/anv_private.h                | 76 ++++++++-----------
>  src/intel/vulkan/gen7_cmd_buffer.c            |  2 +-
>  src/intel/vulkan/gen8_cmd_buffer.c            |  2 +-
>  src/intel/vulkan/genX_cmd_buffer.c            | 19 +++--
>  src/intel/vulkan/genX_gpu_memcpy.c            |  4 +-
>  src/intel/vulkan/genX_state.c                 |  6 +-
>  src/mesa/drivers/dri/i965/genX_state_upload.c | 14 ++--
>  16 files changed, 177 insertions(+), 258 deletions(-)
> 
> diff --git a/src/intel/blorp/blorp_genX_exec.h b/src/intel/blorp/blorp_genX_exec.h
> index 065980616ec..42494ffbc86 100644
> --- a/src/intel/blorp/blorp_genX_exec.h
> +++ b/src/intel/blorp/blorp_genX_exec.h
> @@ -311,7 +311,7 @@ blorp_fill_vertex_buffer_state(struct blorp_batch *batch,
>     vb[idx].BufferPitch = stride;
>  
>  #if GEN_GEN >= 6
> -   vb[idx].VertexBufferMOCS = addr.mocs;
> +   vb[idx].MOCS = addr.mocs;
>  #endif
>  
>  #if GEN_GEN >= 7
> diff --git a/src/intel/genxml/gen10.xml b/src/intel/genxml/gen10.xml
> index 2d3bc39b1b9..21cd8a17d91 100644
> --- a/src/intel/genxml/gen10.xml
> +++ b/src/intel/genxml/gen10.xml
> @@ -219,14 +219,9 @@
>      <field name="Binding Table Index Offset" start="0" end="3" type="uint"/>
>    </struct>
>  
> -  <struct name="MEMORY_OBJECT_CONTROL_STATE" length="1">
> -    <field name="Index to MOCS Tables" start="1" end="6" type="uint"/>
> -  </struct>
> -
>    <struct name="VERTEX_BUFFER_STATE" length="4">
>      <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
> -    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
> +    <field name="MOCS" start="16" end="22" type="uint"/>
>      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
>      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
>      <field name="Buffer Pitch" start="0" end="11" type="uint"/>
> @@ -495,7 +490,6 @@
>      <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
>      <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
>      <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
> -    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="MOCS" start="56" end="62" type="uint"/>
>      <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
>      <field name="Surface QPitch" start="32" end="46" type="uint"/>
> @@ -993,7 +987,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
>      <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
>      <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
> -    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
>        <value name="No Valid Data" value="0"/>
>      </field>
> @@ -1085,7 +1079,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1095,7 +1089,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1105,7 +1099,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1116,7 +1110,7 @@
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
>      <field name="Disable Gather at Set Shader Hint" start="15" end="15" type="uint"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1126,7 +1120,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1157,8 +1151,7 @@
>      <field name="LOD" start="128" end="131" type="uint"/>
>      <field name="Depth" start="181" end="191" type="uint"/>
>      <field name="Minimum Array Element" start="170" end="180" type="uint"/>
> -    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
> +    <field name="MOCS" start="160" end="166" type="uint"/>
>      <field name="Tiled Resource Mode" start="222" end="223" type="uint">
>        <value name="NONE" value="0"/>
>        <value name="TILEYF" value="1"/>
> @@ -1368,7 +1361,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
>      <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
>      <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
> -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
>    </instruction>
>  
> @@ -1447,8 +1440,7 @@
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
> +    <field name="MOCS" start="57" end="63" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="127" type="address"/>
>      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> @@ -1511,8 +1503,7 @@
>        <value name="WORD" value="1"/>
>        <value name="DWORD" value="2"/>
>      </field>
> -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Buffer Starting Address" start="64" end="127" type="address"/>
>      <field name="Buffer Size" start="128" end="159" type="uint"/>
>    </instruction>
> @@ -2068,8 +2059,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
>      <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
>      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> -    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
> +    <field name="MOCS" start="54" end="60" type="uint"/>
>      <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
>      <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
>      <field name="Surface Base Address" start="66" end="111" type="address"/>
> @@ -2104,8 +2094,7 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
>      <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
> -    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
> +    <field name="MOCS" start="54" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="127" type="address"/>
>      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> @@ -3318,20 +3307,20 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="20"/>
>      <field name="General State Base Address" start="44" end="95" type="address"/>
> -    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="General State MOCS" start="36" end="42" type="uint"/>
>      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
> -    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
>      <field name="Surface State Base Address" start="140" end="191" type="address"/>
> -    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
>      <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
>      <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
> -    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
>      <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
>      <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
> -    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
>      <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
>      <field name="Instruction Base Address" start="332" end="383" type="address"/>
> -    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
>      <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
>      <field name="General State Buffer Size" start="396" end="415" type="uint"/>
>      <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
> @@ -3342,11 +3331,11 @@
>      <field name="Instruction Buffer Size" start="492" end="511" type="uint"/>
>      <field name="Instruction Buffer size Modify Enable" start="480" end="480" type="bool"/>
>      <field name="Bindless Surface State Base Address" start="524" end="575" type="address"/>
> -    <field name="Bindless Surface State Memory Object Control State" start="516" end="522" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Bindless Surface State MOCS" start="516" end="522" type="uint"/>
>      <field name="Bindless Surface State Base Address Modify Enable" start="512" end="512" type="bool"/>
>      <field name="Bindless Surface State Size" start="588" end="607" type="uint"/>
>      <field name="Bindless Sampler State Base Address" start="620" end="671" type="address"/>
> -    <field name="Bindless Sampler State Memory Object Control State" start="612" end="618" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Bindless Sampler State MOCS" start="612" end="618" type="uint"/>
>      <field name="Bindless Sampler State Base Address Modify Enable" start="608" end="608" type="bool"/>
>      <field name="Bindless Sampler State Buffer Size" start="684" end="703" type="uint"/>
>    </instruction>
> diff --git a/src/intel/genxml/gen11.xml b/src/intel/genxml/gen11.xml
> index 1239ed011ed..54816458fc3 100644
> --- a/src/intel/genxml/gen11.xml
> +++ b/src/intel/genxml/gen11.xml
> @@ -220,14 +220,9 @@
>      <field name="Binding Table Index Offset" start="0" end="3" type="uint"/>
>    </struct>
>  
> -  <struct name="MEMORY_OBJECT_CONTROL_STATE" length="1">
> -    <field name="Index to MOCS Tables" start="1" end="6" type="uint"/>
> -  </struct>
> -
>    <struct name="VERTEX_BUFFER_STATE" length="4">
>      <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
> -    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
> +    <field name="MOCS" start="16" end="22" type="uint"/>
>      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
>      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
>      <field name="Buffer Pitch" start="0" end="11" type="uint"/>
> @@ -496,7 +491,6 @@
>      <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
>      <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
>      <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
> -    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="MOCS" start="56" end="62" type="uint"/>
>      <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
>      <field name="Surface QPitch" start="32" end="46" type="uint"/>
> @@ -1012,7 +1006,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
>      <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
>      <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
> -    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
>        <value name="No Valid Data" value="0"/>
>      </field>
> @@ -1104,7 +1098,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1114,7 +1108,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1124,7 +1118,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1135,7 +1129,7 @@
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
>      <field name="Disable Gather at Set Shader Hint" start="15" end="15" type="uint"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1145,7 +1139,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1176,8 +1170,7 @@
>      <field name="LOD" start="128" end="131" type="uint"/>
>      <field name="Depth" start="181" end="191" type="uint"/>
>      <field name="Minimum Array Element" start="170" end="180" type="uint"/>
> -    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
> +    <field name="MOCS" start="160" end="166" type="uint"/>
>      <field name="Tiled Resource Mode" start="222" end="223" type="uint">
>        <value name="NONE" value="0"/>
>        <value name="TILEYF" value="1"/>
> @@ -1386,7 +1379,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
>      <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
>      <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
> -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
>    </instruction>
>  
> @@ -1463,8 +1456,7 @@
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
> +    <field name="MOCS" start="57" end="63" type="uint"/>
>      <field name="Tiled Resource Mode" start="55" end="56" type="uint">
>        <value name="NONE" value="0"/>
>        <value name="TILEYF" value="1"/>
> @@ -1531,8 +1523,7 @@
>        <value name="WORD" value="1"/>
>        <value name="DWORD" value="2"/>
>      </field>
> -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Buffer Starting Address" start="64" end="127" type="address"/>
>      <field name="Buffer Size" start="128" end="159" type="uint"/>
>    </instruction>
> @@ -2088,8 +2079,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
>      <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
>      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> -    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
> +    <field name="MOCS" start="54" end="60" type="uint"/>
>      <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
>      <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
>      <field name="Surface Base Address" start="66" end="111" type="address"/>
> @@ -2124,8 +2114,7 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
>      <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
> -    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
> +    <field name="MOCS" start="54" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="127" type="address"/>
>      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> @@ -3321,20 +3310,20 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="20"/>
>      <field name="General State Base Address" start="44" end="95" type="address"/>
> -    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="General State MOCS" start="36" end="42" type="uint"/>
>      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
> -    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
>      <field name="Surface State Base Address" start="140" end="191" type="address"/>
> -    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
>      <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
>      <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
> -    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
>      <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
>      <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
> -    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
>      <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
>      <field name="Instruction Base Address" start="332" end="383" type="address"/>
> -    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
>      <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
>      <field name="General State Buffer Size" start="396" end="415" type="uint"/>
>      <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
> @@ -3345,11 +3334,11 @@
>      <field name="Instruction Buffer Size" start="492" end="511" type="uint"/>
>      <field name="Instruction Buffer size Modify Enable" start="480" end="480" type="bool"/>
>      <field name="Bindless Surface State Base Address" start="524" end="575" type="address"/>
> -    <field name="Bindless Surface State Memory Object Control State" start="516" end="522" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Bindless Surface State MOCS" start="516" end="522" type="uint"/>
>      <field name="Bindless Surface State Base Address Modify Enable" start="512" end="512" type="bool"/>
>      <field name="Bindless Surface State Size" start="588" end="607" type="uint"/>
>      <field name="Bindless Sampler State Base Address" start="620" end="671" type="address"/>
> -    <field name="Bindless Sampler State Memory Object Control State" start="612" end="618" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Bindless Sampler State MOCS" start="612" end="618" type="uint"/>
>      <field name="Bindless Sampler State Base Address Modify Enable" start="608" end="608" type="bool"/>
>      <field name="Bindless Sampler State Buffer Size" start="684" end="703" type="uint"/>
>    </instruction>
> diff --git a/src/intel/genxml/gen6.xml b/src/intel/genxml/gen6.xml
> index fff1e5a8411..b4976b33c34 100644
> --- a/src/intel/genxml/gen6.xml
> +++ b/src/intel/genxml/gen6.xml
> @@ -126,8 +126,7 @@
>        <value name="VERTEXDATA" value="0"/>
>        <value name="INSTANCEDATA" value="1"/>
>      </field>
> -    <field name="Vertex Buffer Memory Object Control State" start="16" end="19" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Vertex Buffer MOCS" start="16" end="19" type="uint"/>
> +    <field name="MOCS" start="16" end="19" type="uint"/>
>      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
>      <field name="Vertex Fetch Invalidate" start="12" end="12" type="bool" default="0"/>
>      <field name="Buffer Pitch" start="0" end="11" type="uint"/>
> @@ -384,7 +383,6 @@
>        <value name="VALIGN_4" value="1"/>
>      </field>
>      <field name="Y Offset" start="180" end="183" type="uint"/>
> -    <field name="Surface Object Control State" start="176" end="179" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="MOCS" start="176" end="179" type="uint"/>
>    </struct>
>  
> @@ -642,7 +640,7 @@
>      <field name="Buffer 2 Valid" start="14" end="14" type="bool"/>
>      <field name="Buffer 1 Valid" start="13" end="13" type="bool"/>
>      <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="MOCS" start="8" end="11" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
>      <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -656,7 +654,7 @@
>      <field name="Buffer 2 Valid" start="14" end="14" type="bool"/>
>      <field name="Buffer 1 Valid" start="13" end="13" type="bool"/>
>      <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="MOCS" start="8" end="11" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
>      <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -670,7 +668,7 @@
>      <field name="Buffer 2 Valid" start="14" end="14" type="bool"/>
>      <field name="Buffer 1 Valid" start="13" end="13" type="bool"/>
>      <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="MOCS" start="8" end="11" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
>      <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -720,8 +718,7 @@
>      <field name="Render Target View Extent" start="129" end="137" type="uint"/>
>      <field name="Depth Coordinate Offset Y" start="176" end="191" type="int"/>
>      <field name="Depth Coordinate Offset X" start="160" end="175" type="int"/>
> -    <field name="Depth Buffer Object Control State" start="219" end="223" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Depth Buffer MOCS" start="219" end="223" type="uint"/>
> +    <field name="MOCS" start="219" end="223" type="uint"/>
>    </instruction>
>  
>    <instruction name="3DSTATE_DRAWING_RECTANGLE" bias="2" length="4" engine="render">
> @@ -804,8 +801,7 @@
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="1"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="15"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="60" type="uint"/>
> +    <field name="MOCS" start="57" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="95" type="address"/>
>    </instruction>
> @@ -815,8 +811,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="10"/>
> -    <field name="Memory Object Control State" start="12" end="15" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="IndexBufferMOCS" start="12" end="15" type="uint"/>
> +    <field name="MOCS" start="12" end="15" type="uint"/>
>      <field name="Cut Index Enable" start="10" end="10" type="bool"/>
>      <field name="Index Format" start="8" end="9" type="uint" prefix="INDEX">
>        <value name="BYTE" value="0"/>
> @@ -1068,8 +1063,7 @@
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="1"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="14"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> -    <field name="Stencil Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Stencil Buffer MOCS" start="57" end="60" type="uint"/>
> +    <field name="MOCS" start="57" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="95" type="address"/>
>    </instruction>
> @@ -1696,26 +1690,20 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="8"/>
>      <field name="General State Base Address" start="44" end="63" type="address"/>
> -    <field name="General State Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="General State MOCS" start="40" end="43" type="uint"/>
> -    <field name="Stateless Data Port Access Memory Object Control State" start="36" end="39" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="Stateless Data Port Access MOCS" start="36" end="39" type="uint"/>
>      <field name="Stateless Data Port Access Force Write Thru" start="35" end="35" type="uint"/>
>      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
>      <field name="Surface State Base Address" start="76" end="95" type="address"/>
> -    <field name="Surface State Memory Object Control State" start="72" end="75" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="Surface State MOCS" start="72" end="75" type="uint"/>
>      <field name="Surface State Base Address Modify Enable" start="64" end="64" type="bool"/>
>      <field name="Dynamic State Base Address" start="108" end="127" type="address"/>
> -    <field name="Dynamic State Memory Object Control State" start="104" end="107" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="Dynamic State MOCS" start="104" end="107" type="uint"/>
>      <field name="Dynamic State Base Address Modify Enable" start="96" end="96" type="bool"/>
>      <field name="Indirect Object Base Address" start="140" end="159" type="address"/>
> -    <field name="Indirect Object Memory Object Control State" start="136" end="139" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="Indirect Object MOCS" start="136" end="139" type="uint"/>
>      <field name="Indirect Object Base Address Modify Enable" start="128" end="128" type="bool"/>
>      <field name="Instruction Base Address" start="172" end="191" type="address"/>
> -    <field name="Instruction Memory Object Control State" start="168" end="171" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="Instruction MOCS" start="168" end="171" type="uint"/>
>      <field name="Instruction Base Address Modify Enable" start="160" end="160" type="bool"/>
>      <field name="General State Access Upper Bound" start="204" end="223" type="address"/>
> diff --git a/src/intel/genxml/gen7.xml b/src/intel/genxml/gen7.xml
> index 49b08281993..893c12b8af9 100644
> --- a/src/intel/genxml/gen7.xml
> +++ b/src/intel/genxml/gen7.xml
> @@ -157,7 +157,7 @@
>      <group count="4" start="0" size="16">
>        <field name="Read Length" start="0" end="15" type="uint"/>
>      </group>
> -    <field name="Constant Buffer Object Control State" start="64" end="68" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="64" end="68" type="uint"/>
>      <group count="4" start="64" size="32">
>        <field name="Buffer" start="5" end="31" type="address"/>
>      </group>
> @@ -169,8 +169,7 @@
>        <value name="VERTEXDATA" value="0"/>
>        <value name="INSTANCEDATA" value="1"/>
>      </field>
> -    <field name="Vertex Buffer Memory Object Control State" start="16" end="19" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Vertex Buffer MOCS" start="16" end="19" type="uint"/>
> +    <field name="MOCS" start="16" end="19" type="uint"/>
>      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
>      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
>      <field name="Vertex Fetch Invalidate" start="12" end="12" type="bool" default="0"/>
> @@ -443,7 +442,6 @@
>      <field name="Strbuf Minimum Array Element" start="128" end="154" type="uint"/>
>      <field name="X Offset" start="185" end="191" type="uint"/>
>      <field name="Y Offset" start="180" end="183" type="uint"/>
> -    <field name="Surface Object Control State" start="176" end="179" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="MOCS" start="176" end="179" type="uint"/>
>      <field name="Surface Min LOD" start="164" end="167" type="uint"/>
>      <field name="MIP Count / LOD" start="160" end="163" type="uint"/>
> @@ -815,8 +813,7 @@
>        <value name="SURFTYPE_CUBE (must be zero)" value="0"/>
>      </field>
>      <field name="Minimum Array Element" start="138" end="148" type="uint"/>
> -    <field name="Depth Buffer Object Control State" start="128" end="131" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Depth Buffer MOCS" start="128" end="131" type="uint"/>
> +    <field name="MOCS" start="128" end="131" type="uint"/>
>      <field name="Depth Coordinate Offset Y" start="176" end="191" type="int"/>
>      <field name="Depth Coordinate Offset X" start="160" end="175" type="int"/>
>      <field name="Render Target View Extent" start="213" end="223" type="uint"/>
> @@ -949,8 +946,7 @@
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="60" type="uint"/>
> +    <field name="MOCS" start="57" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="95" type="address"/>
>    </instruction>
> @@ -996,8 +992,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="10"/>
> -    <field name="Memory Object Control State" start="12" end="15" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="IndexBufferMOCS" start="12" end="15" type="uint"/>
> +    <field name="MOCS" start="12" end="15" type="uint"/>
>      <field name="Cut Index Enable" start="10" end="10" type="bool"/>
>      <field name="Index Format" start="8" end="9" type="uint" prefix="INDEX">
>        <value name="BYTE" value="0"/>
> @@ -1422,8 +1417,7 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="24"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
>      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> -    <field name="SO Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="SO Buffer MOCS" start="57" end="60" type="uint"/>
> +    <field name="MOCS" start="57" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="43" type="uint"/>
>      <field name="Surface Base Address" start="66" end="95" type="address"/>
>      <field name="Surface End Address" start="98" end="127" type="address"/>
> @@ -1454,8 +1448,7 @@
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> -    <field name="Stencil Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Stencil Buffer MOCS" start="57" end="60" type="uint"/>
> +    <field name="MOCS" start="57" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="95" type="address"/>
>    </instruction>
> @@ -2238,21 +2231,21 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="8"/>
>      <field name="General State Base Address" start="44" end="63" type="address"/>
> -    <field name="General State Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Stateless Data Port Access Memory Object Control State" start="36" end="39" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="General State MOCS" start="40" end="43" type="uint"/>
> +    <field name="Stateless Data Port Access MOCS" start="36" end="39" type="uint"/>
>      <field name="Stateless Data Port Access Force Write Thru" start="35" end="35" type="uint"/>
>      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
>      <field name="Surface State Base Address" start="76" end="95" type="address"/>
> -    <field name="Surface State Memory Object Control State" start="72" end="75" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Surface State MOCS" start="72" end="75" type="uint"/>
>      <field name="Surface State Base Address Modify Enable" start="64" end="64" type="bool"/>
>      <field name="Dynamic State Base Address" start="108" end="127" type="address"/>
> -    <field name="Dynamic State Memory Object Control State" start="104" end="107" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Dynamic State MOCS" start="104" end="107" type="uint"/>
>      <field name="Dynamic State Base Address Modify Enable" start="96" end="96" type="bool"/>
>      <field name="Indirect Object Base Address" start="140" end="159" type="address"/>
> -    <field name="Indirect Object Memory Object Control State" start="136" end="139" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Indirect Object MOCS" start="136" end="139" type="uint"/>
>      <field name="Indirect Object Base Address Modify Enable" start="128" end="128" type="bool"/>
>      <field name="Instruction Base Address" start="172" end="191" type="address"/>
> -    <field name="Instruction Memory Object Control State" start="168" end="171" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Instruction MOCS" start="168" end="171" type="uint"/>
>      <field name="Instruction Base Address Modify Enable" start="160" end="160" type="bool"/>
>      <field name="General State Access Upper Bound" start="204" end="223" type="address"/>
>      <field name="General State Access Upper Bound Modify Enable" start="192" end="192" type="bool"/>
> @@ -2290,7 +2283,7 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="3"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="0"/>
>      <field name="SW Tessellation Base Address" start="44" end="63" type="address"/>
> -    <field name="SW Tessellation Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="SW Tessellation MOCS" start="40" end="43" type="uint"/>
>    </instruction>
>  
>    <register name="IA_VERTICES_COUNT" length="2" num="0x2310">
> diff --git a/src/intel/genxml/gen75.xml b/src/intel/genxml/gen75.xml
> index 6ce31b49241..4a858eb7fea 100644
> --- a/src/intel/genxml/gen75.xml
> +++ b/src/intel/genxml/gen75.xml
> @@ -165,7 +165,7 @@
>      <group count="4" start="0" size="16">
>        <field name="Read Length" start="0" end="15" type="uint"/>
>      </group>
> -    <field name="Constant Buffer Object Control State" start="64" end="68" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="64" end="68" type="uint"/>
>      <group count="4" start="64" size="32">
>        <field name="Buffer" start="5" end="31" type="address"/>
>      </group>
> @@ -188,8 +188,7 @@
>        <value name="VERTEXDATA" value="0"/>
>        <value name="INSTANCEDATA" value="1"/>
>      </field>
> -    <field name="Vertex Buffer Memory Object Control State" start="16" end="19" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Vertex Buffer MOCS" start="16" end="19" type="uint"/>
> +    <field name="MOCS" start="16" end="19" type="uint"/>
>      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
>      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
>      <field name="Vertex Fetch Invalidate" start="12" end="12" type="bool" default="0"/>
> @@ -463,7 +462,6 @@
>      <field name="Strbuf Minimum Array Element" start="128" end="154" type="uint"/>
>      <field name="X Offset" start="185" end="191" type="uint"/>
>      <field name="Y Offset" start="180" end="183" type="uint"/>
> -    <field name="Surface Object Control State" start="176" end="179" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="MOCS" start="176" end="179" type="uint"/>
>      <field name="Surface Min LOD" start="164" end="167" type="uint"/>
>      <field name="MIP Count / LOD" start="160" end="163" type="uint"/>
> @@ -826,7 +824,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
>      <field name="Binding Table Pool Base Address" start="44" end="63" type="address"/>
>      <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
> -    <field name="Surface Object Control State" start="39" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="39" end="42" type="uint"/>
>      <field name="Binding Table Pool Upper Bound" start="76" end="95" type="address"/>
>    </instruction>
>  
> @@ -999,7 +997,7 @@
>        <value name="SURFTYPE_CUBE (must be zero)" value="0"/>
>      </field>
>      <field name="Minimum Array Element" start="138" end="148" type="uint"/>
> -    <field name="Depth Buffer Object Control State" start="128" end="131" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="128" end="131" type="uint"/>
>      <field name="Depth Buffer MOCS" start="128" end="131" type="uint"/>
>      <field name="Depth Coordinate Offset Y" start="176" end="191" type="int"/>
>      <field name="Depth Coordinate Offset X" start="160" end="175" type="int"/>
> @@ -1160,7 +1158,7 @@
>      <field name="Gather Pool Base Address" start="44" end="63" type="address"/>
>      <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
>      <field start="36" end="37" type="mbo"/>
> -    <field name="Memory Object Control State" start="32" end="35" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="32" end="35" type="uint"/>
>      <field name="Gather Pool Upper Bound" start="76" end="95" type="address"/>
>    </instruction>
>  
> @@ -1233,8 +1231,7 @@
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="60" type="uint"/>
> +    <field name="MOCS" start="57" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="95" type="address"/>
>    </instruction>
> @@ -1284,8 +1281,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="10"/>
> -    <field name="Memory Object Control State" start="12" end="15" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="IndexBufferMOCS" start="12" end="15" type="uint"/>
> +    <field name="MOCS" start="12" end="15" type="uint"/>
>      <field name="Index Format" start="8" end="9" type="uint" prefix="INDEX">
>        <value name="BYTE" value="0"/>
>        <value name="WORD" value="1"/>
> @@ -1736,8 +1732,7 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="24"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
>      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> -    <field name="SO Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="SO Buffer MOCS" start="57" end="60" type="uint"/>
> +    <field name="MOCS" start="57" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="43" type="uint"/>
>      <field name="Surface Base Address" start="66" end="95" type="address"/>
>      <field name="Surface End Address" start="98" end="127" type="address"/>
> @@ -1769,8 +1764,7 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
>      <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
> -    <field name="Stencil Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Stencil Buffer MOCS" start="57" end="60" type="uint"/>
> +    <field name="MOCS" start="57" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="95" type="address"/>
>    </instruction>
> @@ -2702,20 +2696,20 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="8"/>
>      <field name="General State Base Address" start="44" end="63" type="address"/>
> -    <field name="General State Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Stateless Data Port Access Memory Object Control State" start="36" end="39" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="General State MOCS" start="40" end="43" type="uint"/>
> +    <field name="Stateless Data Port Access MOCS" start="36" end="39" type="uint"/>
>      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
>      <field name="Surface State Base Address" start="76" end="95" type="address"/>
> -    <field name="Surface State Memory Object Control State" start="72" end="75" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Surface State MOCS" start="72" end="75" type="uint"/>
>      <field name="Surface State Base Address Modify Enable" start="64" end="64" type="bool"/>
>      <field name="Dynamic State Base Address" start="108" end="127" type="address"/>
> -    <field name="Dynamic State Memory Object Control State" start="104" end="107" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Dynamic State MOCS" start="104" end="107" type="uint"/>
>      <field name="Dynamic State Base Address Modify Enable" start="96" end="96" type="bool"/>
>      <field name="Indirect Object Base Address" start="140" end="159" type="address"/>
> -    <field name="Indirect Object Memory Object Control State" start="136" end="139" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Indirect Object MOCS" start="136" end="139" type="uint"/>
>      <field name="Indirect Object Base Address Modify Enable" start="128" end="128" type="bool"/>
>      <field name="Instruction Base Address" start="172" end="191" type="address"/>
> -    <field name="Instruction Memory Object Control State" start="168" end="171" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Instruction MOCS" start="168" end="171" type="uint"/>
>      <field name="Instruction Base Address Modify Enable" start="160" end="160" type="bool"/>
>      <field name="General State Access Upper Bound" start="204" end="223" type="address"/>
>      <field name="General State Access Upper Bound Modify Enable" start="192" end="192" type="bool"/>
> @@ -2753,7 +2747,7 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="3"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="0"/>
>      <field name="SW Tessellation Base Address" start="44" end="63" type="address"/>
> -    <field name="SW Tessellation Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="SW Tessellation MOCS" start="40" end="43" type="uint"/>
>    </instruction>
>  
>    <register name="IA_VERTICES_COUNT" length="2" num="0x2310">
> diff --git a/src/intel/genxml/gen8.xml b/src/intel/genxml/gen8.xml
> index a27cac12843..fd19b0c8b33 100644
> --- a/src/intel/genxml/gen8.xml
> +++ b/src/intel/genxml/gen8.xml
> @@ -216,8 +216,7 @@
>  
>    <struct name="VERTEX_BUFFER_STATE" length="4">
>      <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
> -    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
> +    <field name="MOCS" start="16" end="22" type="uint"/>
>      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
>      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
>      <field name="Buffer Pitch" start="0" end="11" type="uint"/>
> @@ -462,7 +461,6 @@
>      <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
>      <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
>      <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
> -    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="MOCS" start="56" end="62" type="uint"/>
>      <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
>      <field name="Surface QPitch" start="32" end="46" type="uint"/>
> @@ -894,7 +892,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
>      <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
>      <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
> -    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
>        <value name="No Valid Data" value="0"/>
>      </field>
> @@ -986,7 +984,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -996,7 +994,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1006,7 +1004,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1016,7 +1014,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1026,7 +1024,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1059,8 +1057,7 @@
>      <field name="LOD" start="128" end="131" type="uint"/>
>      <field name="Depth" start="181" end="191" type="uint"/>
>      <field name="Minimum Array Element" start="170" end="180" type="uint"/>
> -    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
> +    <field name="MOCS" start="160" end="166" type="uint"/>
>      <field name="Render Target View Extent" start="245" end="255" type="uint"/>
>      <field name="Surface QPitch" start="224" end="238" type="uint"/>
>    </instruction>
> @@ -1221,7 +1218,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
>      <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
>      <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
> -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
>    </instruction>
>  
> @@ -1299,8 +1296,7 @@
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
> +    <field name="MOCS" start="57" end="63" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="127" type="address"/>
>      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> @@ -1356,8 +1352,7 @@
>        <value name="WORD" value="1"/>
>        <value name="DWORD" value="2"/>
>      </field>
> -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Buffer Starting Address" start="64" end="127" type="address"/>
>      <field name="Buffer Size" start="128" end="159" type="uint"/>
>    </instruction>
> @@ -1837,8 +1832,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
>      <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
>      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> -    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
> +    <field name="MOCS" start="54" end="60" type="uint"/>
>      <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
>      <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
>      <field name="Surface Base Address" start="66" end="111" type="address"/>
> @@ -1873,8 +1867,7 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
>      <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
> -    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
> +    <field name="MOCS" start="54" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="127" type="address"/>
>      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> @@ -2962,20 +2955,20 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="14"/>
>      <field name="General State Base Address" start="44" end="95" type="address"/>
> -    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="General State MOCS" start="36" end="42" type="uint"/>
>      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
> -    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
>      <field name="Surface State Base Address" start="140" end="191" type="address"/>
> -    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
>      <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
>      <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
> -    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
>      <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
>      <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
> -    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
>      <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
>      <field name="Instruction Base Address" start="332" end="383" type="address"/>
> -    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
>      <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
>      <field name="General State Buffer Size" start="396" end="415" type="uint"/>
>      <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
> @@ -3013,7 +3006,7 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="3"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="0"/>
>      <field name="SW Tessellation Base Address" start="44" end="79" type="address"/>
> -    <field name="SW Tessellation Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="SW Tessellation MOCS" start="40" end="43" type="uint"/>
>    </instruction>
>  
>    <register name="IA_VERTICES_COUNT" length="2" num="0x2310">
> diff --git a/src/intel/genxml/gen9.xml b/src/intel/genxml/gen9.xml
> index 0f9a1d110e8..9349e24b0f0 100644
> --- a/src/intel/genxml/gen9.xml
> +++ b/src/intel/genxml/gen9.xml
> @@ -219,14 +219,9 @@
>      <field name="Binding Table Index Offset" start="0" end="3" type="uint"/>
>    </struct>
>  
> -  <struct name="MEMORY_OBJECT_CONTROL_STATE" length="1">
> -    <field name="Index to MOCS Tables" start="1" end="6" type="uint"/>
> -  </struct>
> -
>    <struct name="VERTEX_BUFFER_STATE" length="4">
>      <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
> -    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
> +    <field name="MOCS" start="16" end="22" type="uint"/>
>      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
>      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
>      <field name="Buffer Pitch" start="0" end="11" type="uint"/>
> @@ -494,7 +489,6 @@
>      <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
>      <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
>      <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
> -    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
>      <field name="MOCS" start="56" end="62" type="uint"/>
>      <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
>      <field name="Surface QPitch" start="32" end="46" type="uint"/>
> @@ -952,7 +946,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
>      <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
>      <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
> -    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
>        <value name="No Valid Data" value="0"/>
>      </field>
> @@ -1044,7 +1038,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1054,7 +1048,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1064,7 +1058,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1074,7 +1068,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1084,7 +1078,7 @@
>      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
> -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="8" end="14" type="uint"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
>      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
>    </instruction>
> @@ -1115,7 +1109,7 @@
>      <field name="LOD" start="128" end="131" type="uint"/>
>      <field name="Depth" start="181" end="191" type="uint"/>
>      <field name="Minimum Array Element" start="170" end="180" type="uint"/>
> -    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="160" end="166" type="uint"/>
>      <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
>      <field name="Tiled Resource Mode" start="222" end="223" type="uint">
>        <value name="NONE" value="0"/>
> @@ -1326,7 +1320,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
>      <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
>      <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
> -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
>    </instruction>
>  
> @@ -1405,8 +1399,7 @@
>      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
> +    <field name="MOCS" start="57" end="63" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="127" type="address"/>
>      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> @@ -1469,8 +1462,7 @@
>        <value name="WORD" value="1"/>
>        <value name="DWORD" value="2"/>
>      </field>
> -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
> +    <field name="MOCS" start="32" end="38" type="uint"/>
>      <field name="Buffer Starting Address" start="64" end="127" type="address"/>
>      <field name="Buffer Size" start="128" end="159" type="uint"/>
>    </instruction>
> @@ -2020,8 +2012,7 @@
>      <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
>      <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
>      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> -    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
> +    <field name="MOCS" start="54" end="60" type="uint"/>
>      <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
>      <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
>      <field name="Surface Base Address" start="66" end="111" type="address"/>
> @@ -2056,8 +2047,7 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
>      <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
> -    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> -    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
> +    <field name="MOCS" start="54" end="60" type="uint"/>
>      <field name="Surface Pitch" start="32" end="48" type="uint"/>
>      <field name="Surface Base Address" start="64" end="127" type="address"/>
>      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> @@ -3251,20 +3241,20 @@
>      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
>      <field name="DWord Length" start="0" end="7" type="uint" default="17"/>
>      <field name="General State Base Address" start="44" end="95" type="address"/>
> -    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="General State MOCS" start="36" end="42" type="uint"/>
>      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
> -    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
>      <field name="Surface State Base Address" start="140" end="191" type="address"/>
> -    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
>      <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
>      <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
> -    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
>      <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
>      <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
> -    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
>      <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
>      <field name="Instruction Base Address" start="332" end="383" type="address"/>
> -    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
>      <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
>      <field name="General State Buffer Size" start="396" end="415" type="uint"/>
>      <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
> @@ -3275,7 +3265,7 @@
>      <field name="Instruction Buffer Size" start="492" end="511" type="uint"/>
>      <field name="Instruction Buffer size Modify Enable" start="480" end="480" type="bool"/>
>      <field name="Bindless Surface State Base Address" start="524" end="575" type="address"/>
> -    <field name="Bindless Surface State Memory Object Control State" start="516" end="522" type="MEMORY_OBJECT_CONTROL_STATE"/>
> +    <field name="Bindless Surface State MOCS" start="516" end="522" type="uint"/>
>      <field name="Bindless Surface State Base Address Modify Enable" start="512" end="512" type="bool"/>
>      <field name="Bindless Surface State Size" start="588" end="607" type="uint"/>
>    </instruction>
> diff --git a/src/intel/isl/isl_emit_depth_stencil.c b/src/intel/isl/isl_emit_depth_stencil.c
> index 9cf5a476687..d2dec3761e5 100644
> --- a/src/intel/isl/isl_emit_depth_stencil.c
> +++ b/src/intel/isl/isl_emit_depth_stencil.c
> @@ -94,7 +94,7 @@ isl_genX(emit_depth_stencil_hiz_s)(const struct isl_device *dev, void *batch,
>  #endif
>        db.SurfaceBaseAddress = info->depth_address;
>  #if GEN_GEN >= 6
> -      db.DepthBufferMOCS = info->mocs;
> +      db.MOCS = info->mocs;
>  #endif
>  
>  #if GEN_GEN <= 6
> @@ -138,7 +138,7 @@ isl_genX(emit_depth_stencil_hiz_s)(const struct isl_device *dev, void *batch,
>  #endif
>        sb.SurfaceBaseAddress = info->stencil_address;
>  #if GEN_GEN >= 6
> -      sb.StencilBufferMOCS = info->mocs;
> +      sb.MOCS = info->mocs;
>  #endif
>        sb.SurfacePitch = info->stencil_surf->row_pitch_B - 1;
>  #if GEN_GEN >= 8
> @@ -161,7 +161,7 @@ isl_genX(emit_depth_stencil_hiz_s)(const struct isl_device *dev, void *batch,
>        db.HierarchicalDepthBufferEnable = true;
>  
>        hiz.SurfaceBaseAddress = info->hiz_address;
> -      hiz.HierarchicalDepthBufferMOCS = info->mocs;
> +      hiz.MOCS = info->mocs;
>        hiz.SurfacePitch = info->hiz_surf->row_pitch_B - 1;
>  #if GEN_GEN >= 8
>        /* From the SKL PRM Vol2a:
> diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
> index aff076a55d9..b3e9ace7ad8 100644
> --- a/src/intel/vulkan/anv_private.h
> +++ b/src/intel/vulkan/anv_private.h
> @@ -1349,64 +1349,50 @@ _anv_combine_address(struct anv_batch *batch, void *location,
>             _dst = NULL;                                                 \
>           }))
>  
> -#define GEN7_MOCS (struct GEN7_MEMORY_OBJECT_CONTROL_STATE) {  \
> -   .GraphicsDataTypeGFDT                        = 0,           \
> -   .LLCCacheabilityControlLLCCC                 = 0,           \
> -   .L3CacheabilityControlL3CC                   = 1,           \
> -}
> +/* MEMORY_OBJECT_CONTROL_STATE:
> + * .GraphicsDataTypeGFDT                        = 0,
> + * .LLCCacheabilityControlLLCCC                 = 0,
> + * .L3CacheabilityControlL3CC                   = 1,
> + */
> +#define GEN7_MOCS 1
>  
> -#define GEN75_MOCS (struct GEN75_MEMORY_OBJECT_CONTROL_STATE) {  \
> -   .LLCeLLCCacheabilityControlLLCCC             = 0,           \
> -   .L3CacheabilityControlL3CC                   = 1,           \
> -}
> +/* MEMORY_OBJECT_CONTROL_STATE:
> + * .LLCeLLCCacheabilityControlLLCCC             = 0,
> + * .L3CacheabilityControlL3CC                   = 1,
> + */
> +#define GEN75_MOCS 1
>  
> -#define GEN8_MOCS (struct GEN8_MEMORY_OBJECT_CONTROL_STATE) {  \
> -      .MemoryTypeLLCeLLCCacheabilityControl = WB,              \
> -      .TargetCache = L3DefertoPATforLLCeLLCselection,          \
> -      .AgeforQUADLRU = 0                                       \
> -   }
> +/* MEMORY_OBJECT_CONTROL_STATE:
> + * .MemoryTypeLLCeLLCCacheabilityControl = WB,
> + * .TargetCache = L3DefertoPATforLLCeLLCselection,
> + * .AgeforQUADLRU = 0
> + */
> +#define GEN8_MOCS 0x78
>  
> -#define GEN8_EXTERNAL_MOCS (struct GEN8_MEMORY_OBJECT_CONTROL_STATE) {     \
> -      .MemoryTypeLLCeLLCCacheabilityControl = UCwithFenceifcoherentcycle,  \
> -      .TargetCache = L3DefertoPATforLLCeLLCselection,                      \
> -      .AgeforQUADLRU = 0                                                   \
> -   }
> +/* MEMORY_OBJECT_CONTROL_STATE:
> + * .MemoryTypeLLCeLLCCacheabilityControl = UCwithFenceifcoherentcycle,
> + * .TargetCache = L3DefertoPATforLLCeLLCselection,
> + * .AgeforQUADLRU = 0
> + */
> +#define GEN8_EXTERNAL_MOCS 0x18
>  
>  /* Skylake: MOCS is now an index into an array of 62 different caching
>   * configurations programmed by the kernel.
>   */
>  
> -#define GEN9_MOCS (struct GEN9_MEMORY_OBJECT_CONTROL_STATE) {  \
> -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */              \
> -      .IndextoMOCSTables                           = 2         \
> -   }
> +/* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */
> +#define GEN9_MOCS 2
>  
> -#define GEN9_EXTERNAL_MOCS (struct GEN9_MEMORY_OBJECT_CONTROL_STATE) {  \
> -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */                       \
> -      .IndextoMOCSTables                           = 1                  \
> -   }
> +/* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */
> +#define GEN9_EXTERNAL_MOCS 1
>  
>  /* Cannonlake MOCS defines are duplicates of Skylake MOCS defines. */
> -#define GEN10_MOCS (struct GEN10_MEMORY_OBJECT_CONTROL_STATE) {  \
> -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */              \
> -      .IndextoMOCSTables                           = 2         \
> -   }
> -
> -#define GEN10_EXTERNAL_MOCS (struct GEN10_MEMORY_OBJECT_CONTROL_STATE) {   \
> -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */                          \
> -      .IndextoMOCSTables                           = 1                     \
> -   }
> +#define GEN10_MOCS GEN9_MOCS
> +#define GEN10_EXTERNAL_MOCS GEN9_EXTERNAL_MOCS
>  
>  /* Ice Lake MOCS defines are duplicates of Skylake MOCS defines. */
> -#define GEN11_MOCS (struct GEN11_MEMORY_OBJECT_CONTROL_STATE) {  \
> -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */              \
> -      .IndextoMOCSTables                           = 2         \
> -   }
> -
> -#define GEN11_EXTERNAL_MOCS (struct GEN11_MEMORY_OBJECT_CONTROL_STATE) {   \
> -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */                          \
> -      .IndextoMOCSTables                           = 1                     \
> -   }
> +#define GEN11_MOCS GEN9_MOCS
> +#define GEN11_EXTERNAL_MOCS GEN9_EXTERNAL_MOCS
>  
>  struct anv_device_memory {
>     struct anv_bo *                              bo;
> diff --git a/src/intel/vulkan/gen7_cmd_buffer.c b/src/intel/vulkan/gen7_cmd_buffer.c
> index da51cb9781c..08bebd44adb 100644
> --- a/src/intel/vulkan/gen7_cmd_buffer.c
> +++ b/src/intel/vulkan/gen7_cmd_buffer.c
> @@ -246,7 +246,7 @@ genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
>           ib.CutIndexEnable             = pipeline->primitive_restart;
>  #endif
>           ib.IndexFormat                = cmd_buffer->state.gfx.gen7.index_type;
> -         ib.IndexBufferMOCS            = anv_mocs_for_bo(cmd_buffer->device,
> +         ib.MOCS                       = anv_mocs_for_bo(cmd_buffer->device,
>                                                           buffer->address.bo);
>  
>           ib.BufferStartingAddress      = anv_address_add(buffer->address,
> diff --git a/src/intel/vulkan/gen8_cmd_buffer.c b/src/intel/vulkan/gen8_cmd_buffer.c
> index 752d04f3013..5bacfed71c8 100644
> --- a/src/intel/vulkan/gen8_cmd_buffer.c
> +++ b/src/intel/vulkan/gen8_cmd_buffer.c
> @@ -565,7 +565,7 @@ void genX(CmdBindIndexBuffer)(
>  
>     anv_batch_emit(&cmd_buffer->batch, GENX(3DSTATE_INDEX_BUFFER), ib) {
>        ib.IndexFormat                = vk_to_gen_index_type[indexType];
> -      ib.IndexBufferMOCS            = anv_mocs_for_bo(cmd_buffer->device,
> +      ib.MOCS                       = anv_mocs_for_bo(cmd_buffer->device,
>                                                        buffer->address.bo);
>        ib.BufferStartingAddress      = anv_address_add(buffer->address, offset);
>        ib.BufferSize                 = buffer->size - offset;
> diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
> index fb70cd2e386..1aaf83e97e8 100644
> --- a/src/intel/vulkan/genX_cmd_buffer.c
> +++ b/src/intel/vulkan/genX_cmd_buffer.c
> @@ -86,26 +86,26 @@ genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer)
>  
>     anv_batch_emit(&cmd_buffer->batch, GENX(STATE_BASE_ADDRESS), sba) {
>        sba.GeneralStateBaseAddress = (struct anv_address) { NULL, 0 };
> -      sba.GeneralStateMemoryObjectControlState = GENX(MOCS);
> +      sba.GeneralStateMOCS = GENX(MOCS);
>        sba.GeneralStateBaseAddressModifyEnable = true;
>  
>        sba.SurfaceStateBaseAddress =
>           anv_cmd_buffer_surface_base_address(cmd_buffer);
> -      sba.SurfaceStateMemoryObjectControlState = GENX(MOCS);
> +      sba.SurfaceStateMOCS = GENX(MOCS);
>        sba.SurfaceStateBaseAddressModifyEnable = true;
>  
>        sba.DynamicStateBaseAddress =
>           (struct anv_address) { &device->dynamic_state_pool.block_pool.bo, 0 };
> -      sba.DynamicStateMemoryObjectControlState = GENX(MOCS);
> +      sba.DynamicStateMOCS = GENX(MOCS);
>        sba.DynamicStateBaseAddressModifyEnable = true;
>  
>        sba.IndirectObjectBaseAddress = (struct anv_address) { NULL, 0 };
> -      sba.IndirectObjectMemoryObjectControlState = GENX(MOCS);
> +      sba.IndirectObjectMOCS = GENX(MOCS);
>        sba.IndirectObjectBaseAddressModifyEnable = true;
>  
>        sba.InstructionBaseAddress =
>           (struct anv_address) { &device->instruction_state_pool.block_pool.bo, 0 };
> -      sba.InstructionMemoryObjectControlState = GENX(MOCS);
> +      sba.InstructionMOCS = GENX(MOCS);
>        sba.InstructionBaseAddressModifyEnable = true;
>  
>  #  if (GEN_GEN >= 8)
> @@ -124,13 +124,13 @@ genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer)
>  #  endif
>  #  if (GEN_GEN >= 9)
>        sba.BindlessSurfaceStateBaseAddress = (struct anv_address) { NULL, 0 };
> -      sba.BindlessSurfaceStateMemoryObjectControlState = GENX(MOCS);
> +      sba.BindlessSurfaceStateMOCS = GENX(MOCS);
>        sba.BindlessSurfaceStateBaseAddressModifyEnable = true;
>        sba.BindlessSurfaceStateSize = 0;
>  #  endif
>  #  if (GEN_GEN >= 10)
>        sba.BindlessSamplerStateBaseAddress = (struct anv_address) { NULL, 0 };
> -      sba.BindlessSamplerStateMemoryObjectControlState = GENX(MOCS);
> +      sba.BindlessSamplerStateMOCS = GENX(MOCS);
>        sba.BindlessSamplerStateBaseAddressModifyEnable = true;
>        sba.BindlessSamplerStateBufferSize = 0;
>  #  endif
> @@ -2572,8 +2572,7 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer)
>           struct GENX(VERTEX_BUFFER_STATE) state = {
>              .VertexBufferIndex = vb,
>  
> -            .VertexBufferMOCS = anv_mocs_for_bo(cmd_buffer->device,
> -                                                buffer->address.bo),
> +            .MOCS = anv_mocs_for_bo(cmd_buffer->device, buffer->address.bo),
>  #if GEN_GEN <= 7
>              .BufferAccessType = pipeline->vb[vb].instanced ? INSTANCEDATA : VERTEXDATA,
>              .InstanceDataStepRate = pipeline->vb[vb].instance_divisor,
> @@ -2691,7 +2690,7 @@ emit_vertex_bo(struct anv_cmd_buffer *cmd_buffer,
>           .VertexBufferIndex = index,
>           .AddressModifyEnable = true,
>           .BufferPitch = 0,
> -         .VertexBufferMOCS = anv_mocs_for_bo(cmd_buffer->device, addr.bo),
> +         .MOCS = anv_mocs_for_bo(cmd_buffer->device, addr.bo),
>  #if (GEN_GEN >= 8)
>           .BufferStartingAddress = addr,
>           .BufferSize = size
> diff --git a/src/intel/vulkan/genX_gpu_memcpy.c b/src/intel/vulkan/genX_gpu_memcpy.c
> index 1bee1c6dc17..ea35daa4126 100644
> --- a/src/intel/vulkan/genX_gpu_memcpy.c
> +++ b/src/intel/vulkan/genX_gpu_memcpy.c
> @@ -167,7 +167,7 @@ genX(cmd_buffer_so_memcpy)(struct anv_cmd_buffer *cmd_buffer,
>           .AddressModifyEnable = true,
>           .BufferStartingAddress = src,
>           .BufferPitch = bs,
> -         .VertexBufferMOCS = anv_mocs_for_bo(cmd_buffer->device, src.bo),
> +         .MOCS = anv_mocs_for_bo(cmd_buffer->device, src.bo),
>  #if (GEN_GEN >= 8)
>           .BufferSize = size,
>  #else
> @@ -227,7 +227,7 @@ genX(cmd_buffer_so_memcpy)(struct anv_cmd_buffer *cmd_buffer,
>  
>     anv_batch_emit(&cmd_buffer->batch, GENX(3DSTATE_SO_BUFFER), sob) {
>        sob.SOBufferIndex = 0;
> -      sob.SOBufferMOCS = anv_mocs_for_bo(cmd_buffer->device, dst.bo),
> +      sob.MOCS = anv_mocs_for_bo(cmd_buffer->device, dst.bo),
>        sob.SurfaceBaseAddress = dst;
>  
>  #if GEN_GEN >= 8
> diff --git a/src/intel/vulkan/genX_state.c b/src/intel/vulkan/genX_state.c
> index 42800a2581e..0f6b77492fb 100644
> --- a/src/intel/vulkan/genX_state.c
> +++ b/src/intel/vulkan/genX_state.c
> @@ -91,11 +91,9 @@ gen10_emit_wa_lri_to_cache_mode_zero(struct anv_batch *batch)
>  VkResult
>  genX(init_device_state)(struct anv_device *device)
>  {
> -   GENX(MEMORY_OBJECT_CONTROL_STATE_pack)(NULL, &device->default_mocs,
> -                                          &GENX(MOCS));
> +   device->default_mocs = GENX(MOCS);
>  #if GEN_GEN >= 8
> -   GENX(MEMORY_OBJECT_CONTROL_STATE_pack)(NULL, &device->external_mocs,
> -                                          &GENX(EXTERNAL_MOCS));
> +   device->external_mocs = GENX(EXTERNAL_MOCS);
>  #else
>     device->external_mocs = device->default_mocs;
>  #endif
> diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c
> index 8e3fcbf12ec..93147a253ed 100644
> --- a/src/mesa/drivers/dri/i965/genX_state_upload.c
> +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
> @@ -363,15 +363,15 @@ genX(emit_vertex_buffer_state)(struct brw_context *brw,
>  #endif
>  
>  #if GEN_GEN == 11
> -      .VertexBufferMOCS = ICL_MOCS_WB,
> +      .MOCS = ICL_MOCS_WB,
>  #elif GEN_GEN == 10
> -      .VertexBufferMOCS = CNL_MOCS_WB,
> +      .MOCS = CNL_MOCS_WB,
>  #elif GEN_GEN == 9
> -      .VertexBufferMOCS = SKL_MOCS_WB,
> +      .MOCS = SKL_MOCS_WB,
>  #elif GEN_GEN == 8
> -      .VertexBufferMOCS = BDW_MOCS_WB,
> +      .MOCS = BDW_MOCS_WB,
>  #elif GEN_GEN == 7
> -      .VertexBufferMOCS = GEN7_MOCS_L3,
> +      .MOCS = GEN7_MOCS_L3,
>  #endif
>     };
>  
> @@ -965,7 +965,7 @@ genX(emit_index_buffer)(struct brw_context *brw)
>         */
>        ib.BufferStartingAddress = ro_32_bo(brw->ib.bo, 0);
>  #if GEN_GEN >= 8
> -      ib.IndexBufferMOCS = GEN_GEN >= 9 ? SKL_MOCS_WB : BDW_MOCS_WB;
> +      ib.MOCS = GEN_GEN >= 9 ? SKL_MOCS_WB : BDW_MOCS_WB;
>        ib.BufferSize = brw->ib.size;
>  #else
>        ib.BufferEndingAddress = ro_bo(brw->ib.bo, brw->ib.size - 1);
> @@ -3847,7 +3847,7 @@ genX(upload_3dstate_so_buffers)(struct brw_context *brw)
>           sob.SOBufferEnable = true;
>           sob.StreamOffsetWriteEnable = true;
>           sob.StreamOutputBufferOffsetAddressEnable = true;
> -         sob.SOBufferMOCS = mocs_wb;
> +         sob.MOCS = mocs_wb;
>  
>           sob.SurfaceSize = MAX2(xfb_obj->Size[i] / 4, 1) - 1;
>           sob.StreamOutputBufferOffsetAddress =
> -- 
> 2.19.1
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>

On Tue, Dec 11, 2018 at 9:25 PM Jordan Justen <jordan.l.justen@intel.com> wrote:
>
> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
>
> On 2018-12-11 20:23:06, Kenneth Graunke wrote:
> > When we first started using genxml, we decided to represent MOCS as an
> > actual structure, and pack values.  However, in many places, it was more
> > convenient to use a numeric value rather than treating it as a struct,
> > so we added secondary setters in a bunch of places as well.
> >
> > We were not entirely consistent, either.  Some places only had one.
> > Gen6 had both kinds of setters for STATE_BASE_ADDRESS, but newer gens
> > only had the struct-based setters.  The names were sometimes "Constant
> > Buffer Object Control State" instead of "Memory", making it harder to
> > find.  Many had prefixes like "Vertex Buffer MOCS"...in a vertex buffer
> > packet...which is a bit redundant.
> >
> > On modern hardware, MOCS is simply an index into a table, but we were
> > still carrying around the structure with an "Index to MOCS Table" field,
> > in addition to the direct numeric setters.  This is clunky - we really
> > just want a number on new hardware.
> >
> > This patch eliminates the struct-based setters, and makes the numeric
> > setters be consistently called "MOCS".  We leave the struct definition
> > around on Gen7-8 for reference purposes, but it is unused.
> > ---
> >  src/intel/blorp/blorp_genX_exec.h             |  2 +-
> >  src/intel/genxml/gen10.xml                    | 53 +++++--------
> >  src/intel/genxml/gen11.xml                    | 53 +++++--------
> >  src/intel/genxml/gen6.xml                     | 28 ++-----
> >  src/intel/genxml/gen7.xml                     | 35 ++++-----
> >  src/intel/genxml/gen75.xml                    | 38 ++++------
> >  src/intel/genxml/gen8.xml                     | 47 +++++-------
> >  src/intel/genxml/gen9.xml                     | 50 +++++-------
> >  src/intel/isl/isl_emit_depth_stencil.c        |  6 +-
> >  src/intel/vulkan/anv_private.h                | 76 ++++++++-----------
> >  src/intel/vulkan/gen7_cmd_buffer.c            |  2 +-
> >  src/intel/vulkan/gen8_cmd_buffer.c            |  2 +-
> >  src/intel/vulkan/genX_cmd_buffer.c            | 19 +++--
> >  src/intel/vulkan/genX_gpu_memcpy.c            |  4 +-
> >  src/intel/vulkan/genX_state.c                 |  6 +-
> >  src/mesa/drivers/dri/i965/genX_state_upload.c | 14 ++--
> >  16 files changed, 177 insertions(+), 258 deletions(-)
> >
> > diff --git a/src/intel/blorp/blorp_genX_exec.h b/src/intel/blorp/blorp_genX_exec.h
> > index 065980616ec..42494ffbc86 100644
> > --- a/src/intel/blorp/blorp_genX_exec.h
> > +++ b/src/intel/blorp/blorp_genX_exec.h
> > @@ -311,7 +311,7 @@ blorp_fill_vertex_buffer_state(struct blorp_batch *batch,
> >     vb[idx].BufferPitch = stride;
> >
> >  #if GEN_GEN >= 6
> > -   vb[idx].VertexBufferMOCS = addr.mocs;
> > +   vb[idx].MOCS = addr.mocs;
> >  #endif
> >
> >  #if GEN_GEN >= 7
> > diff --git a/src/intel/genxml/gen10.xml b/src/intel/genxml/gen10.xml
> > index 2d3bc39b1b9..21cd8a17d91 100644
> > --- a/src/intel/genxml/gen10.xml
> > +++ b/src/intel/genxml/gen10.xml
> > @@ -219,14 +219,9 @@
> >      <field name="Binding Table Index Offset" start="0" end="3" type="uint"/>
> >    </struct>
> >
> > -  <struct name="MEMORY_OBJECT_CONTROL_STATE" length="1">
> > -    <field name="Index to MOCS Tables" start="1" end="6" type="uint"/>
> > -  </struct>
> > -
> >    <struct name="VERTEX_BUFFER_STATE" length="4">
> >      <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
> > -    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
> > +    <field name="MOCS" start="16" end="22" type="uint"/>
> >      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
> >      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
> >      <field name="Buffer Pitch" start="0" end="11" type="uint"/>
> > @@ -495,7 +490,6 @@
> >      <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
> >      <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
> >      <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
> > -    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="MOCS" start="56" end="62" type="uint"/>
> >      <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
> >      <field name="Surface QPitch" start="32" end="46" type="uint"/>
> > @@ -993,7 +987,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
> >      <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
> >      <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
> > -    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
> >        <value name="No Valid Data" value="0"/>
> >      </field>
> > @@ -1085,7 +1079,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1095,7 +1089,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1105,7 +1099,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1116,7 +1110,7 @@
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
> >      <field name="Disable Gather at Set Shader Hint" start="15" end="15" type="uint"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1126,7 +1120,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1157,8 +1151,7 @@
> >      <field name="LOD" start="128" end="131" type="uint"/>
> >      <field name="Depth" start="181" end="191" type="uint"/>
> >      <field name="Minimum Array Element" start="170" end="180" type="uint"/>
> > -    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
> > +    <field name="MOCS" start="160" end="166" type="uint"/>
> >      <field name="Tiled Resource Mode" start="222" end="223" type="uint">
> >        <value name="NONE" value="0"/>
> >        <value name="TILEYF" value="1"/>
> > @@ -1368,7 +1361,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
> >      <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
> >      <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
> > -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
> >    </instruction>
> >
> > @@ -1447,8 +1440,7 @@
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> > -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
> > +    <field name="MOCS" start="57" end="63" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="127" type="address"/>
> >      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> > @@ -1511,8 +1503,7 @@
> >        <value name="WORD" value="1"/>
> >        <value name="DWORD" value="2"/>
> >      </field>
> > -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Buffer Starting Address" start="64" end="127" type="address"/>
> >      <field name="Buffer Size" start="128" end="159" type="uint"/>
> >    </instruction>
> > @@ -2068,8 +2059,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
> >      <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
> >      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> > -    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
> > +    <field name="MOCS" start="54" end="60" type="uint"/>
> >      <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
> >      <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
> >      <field name="Surface Base Address" start="66" end="111" type="address"/>
> > @@ -2104,8 +2094,7 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> >      <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
> > -    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
> > +    <field name="MOCS" start="54" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="127" type="address"/>
> >      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> > @@ -3318,20 +3307,20 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="20"/>
> >      <field name="General State Base Address" start="44" end="95" type="address"/>
> > -    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="General State MOCS" start="36" end="42" type="uint"/>
> >      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
> > -    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
> >      <field name="Surface State Base Address" start="140" end="191" type="address"/>
> > -    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
> >      <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
> >      <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
> > -    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
> >      <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
> >      <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
> > -    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
> >      <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
> >      <field name="Instruction Base Address" start="332" end="383" type="address"/>
> > -    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
> >      <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
> >      <field name="General State Buffer Size" start="396" end="415" type="uint"/>
> >      <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
> > @@ -3342,11 +3331,11 @@
> >      <field name="Instruction Buffer Size" start="492" end="511" type="uint"/>
> >      <field name="Instruction Buffer size Modify Enable" start="480" end="480" type="bool"/>
> >      <field name="Bindless Surface State Base Address" start="524" end="575" type="address"/>
> > -    <field name="Bindless Surface State Memory Object Control State" start="516" end="522" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Bindless Surface State MOCS" start="516" end="522" type="uint"/>
> >      <field name="Bindless Surface State Base Address Modify Enable" start="512" end="512" type="bool"/>
> >      <field name="Bindless Surface State Size" start="588" end="607" type="uint"/>
> >      <field name="Bindless Sampler State Base Address" start="620" end="671" type="address"/>
> > -    <field name="Bindless Sampler State Memory Object Control State" start="612" end="618" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Bindless Sampler State MOCS" start="612" end="618" type="uint"/>
> >      <field name="Bindless Sampler State Base Address Modify Enable" start="608" end="608" type="bool"/>
> >      <field name="Bindless Sampler State Buffer Size" start="684" end="703" type="uint"/>
> >    </instruction>
> > diff --git a/src/intel/genxml/gen11.xml b/src/intel/genxml/gen11.xml
> > index 1239ed011ed..54816458fc3 100644
> > --- a/src/intel/genxml/gen11.xml
> > +++ b/src/intel/genxml/gen11.xml
> > @@ -220,14 +220,9 @@
> >      <field name="Binding Table Index Offset" start="0" end="3" type="uint"/>
> >    </struct>
> >
> > -  <struct name="MEMORY_OBJECT_CONTROL_STATE" length="1">
> > -    <field name="Index to MOCS Tables" start="1" end="6" type="uint"/>
> > -  </struct>
> > -
> >    <struct name="VERTEX_BUFFER_STATE" length="4">
> >      <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
> > -    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
> > +    <field name="MOCS" start="16" end="22" type="uint"/>
> >      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
> >      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
> >      <field name="Buffer Pitch" start="0" end="11" type="uint"/>
> > @@ -496,7 +491,6 @@
> >      <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
> >      <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
> >      <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
> > -    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="MOCS" start="56" end="62" type="uint"/>
> >      <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
> >      <field name="Surface QPitch" start="32" end="46" type="uint"/>
> > @@ -1012,7 +1006,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
> >      <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
> >      <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
> > -    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
> >        <value name="No Valid Data" value="0"/>
> >      </field>
> > @@ -1104,7 +1098,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1114,7 +1108,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1124,7 +1118,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1135,7 +1129,7 @@
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
> >      <field name="Disable Gather at Set Shader Hint" start="15" end="15" type="uint"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1145,7 +1139,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1176,8 +1170,7 @@
> >      <field name="LOD" start="128" end="131" type="uint"/>
> >      <field name="Depth" start="181" end="191" type="uint"/>
> >      <field name="Minimum Array Element" start="170" end="180" type="uint"/>
> > -    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
> > +    <field name="MOCS" start="160" end="166" type="uint"/>
> >      <field name="Tiled Resource Mode" start="222" end="223" type="uint">
> >        <value name="NONE" value="0"/>
> >        <value name="TILEYF" value="1"/>
> > @@ -1386,7 +1379,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
> >      <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
> >      <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
> > -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
> >    </instruction>
> >
> > @@ -1463,8 +1456,7 @@
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> > -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
> > +    <field name="MOCS" start="57" end="63" type="uint"/>
> >      <field name="Tiled Resource Mode" start="55" end="56" type="uint">
> >        <value name="NONE" value="0"/>
> >        <value name="TILEYF" value="1"/>
> > @@ -1531,8 +1523,7 @@
> >        <value name="WORD" value="1"/>
> >        <value name="DWORD" value="2"/>
> >      </field>
> > -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Buffer Starting Address" start="64" end="127" type="address"/>
> >      <field name="Buffer Size" start="128" end="159" type="uint"/>
> >    </instruction>
> > @@ -2088,8 +2079,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
> >      <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
> >      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> > -    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
> > +    <field name="MOCS" start="54" end="60" type="uint"/>
> >      <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
> >      <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
> >      <field name="Surface Base Address" start="66" end="111" type="address"/>
> > @@ -2124,8 +2114,7 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> >      <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
> > -    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
> > +    <field name="MOCS" start="54" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="127" type="address"/>
> >      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> > @@ -3321,20 +3310,20 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="20"/>
> >      <field name="General State Base Address" start="44" end="95" type="address"/>
> > -    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="General State MOCS" start="36" end="42" type="uint"/>
> >      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
> > -    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
> >      <field name="Surface State Base Address" start="140" end="191" type="address"/>
> > -    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
> >      <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
> >      <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
> > -    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
> >      <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
> >      <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
> > -    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
> >      <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
> >      <field name="Instruction Base Address" start="332" end="383" type="address"/>
> > -    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
> >      <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
> >      <field name="General State Buffer Size" start="396" end="415" type="uint"/>
> >      <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
> > @@ -3345,11 +3334,11 @@
> >      <field name="Instruction Buffer Size" start="492" end="511" type="uint"/>
> >      <field name="Instruction Buffer size Modify Enable" start="480" end="480" type="bool"/>
> >      <field name="Bindless Surface State Base Address" start="524" end="575" type="address"/>
> > -    <field name="Bindless Surface State Memory Object Control State" start="516" end="522" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Bindless Surface State MOCS" start="516" end="522" type="uint"/>
> >      <field name="Bindless Surface State Base Address Modify Enable" start="512" end="512" type="bool"/>
> >      <field name="Bindless Surface State Size" start="588" end="607" type="uint"/>
> >      <field name="Bindless Sampler State Base Address" start="620" end="671" type="address"/>
> > -    <field name="Bindless Sampler State Memory Object Control State" start="612" end="618" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Bindless Sampler State MOCS" start="612" end="618" type="uint"/>
> >      <field name="Bindless Sampler State Base Address Modify Enable" start="608" end="608" type="bool"/>
> >      <field name="Bindless Sampler State Buffer Size" start="684" end="703" type="uint"/>
> >    </instruction>
> > diff --git a/src/intel/genxml/gen6.xml b/src/intel/genxml/gen6.xml
> > index fff1e5a8411..b4976b33c34 100644
> > --- a/src/intel/genxml/gen6.xml
> > +++ b/src/intel/genxml/gen6.xml
> > @@ -126,8 +126,7 @@
> >        <value name="VERTEXDATA" value="0"/>
> >        <value name="INSTANCEDATA" value="1"/>
> >      </field>
> > -    <field name="Vertex Buffer Memory Object Control State" start="16" end="19" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Vertex Buffer MOCS" start="16" end="19" type="uint"/>
> > +    <field name="MOCS" start="16" end="19" type="uint"/>
> >      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
> >      <field name="Vertex Fetch Invalidate" start="12" end="12" type="bool" default="0"/>
> >      <field name="Buffer Pitch" start="0" end="11" type="uint"/>
> > @@ -384,7 +383,6 @@
> >        <value name="VALIGN_4" value="1"/>
> >      </field>
> >      <field name="Y Offset" start="180" end="183" type="uint"/>
> > -    <field name="Surface Object Control State" start="176" end="179" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="MOCS" start="176" end="179" type="uint"/>
> >    </struct>
> >
> > @@ -642,7 +640,7 @@
> >      <field name="Buffer 2 Valid" start="14" end="14" type="bool"/>
> >      <field name="Buffer 1 Valid" start="13" end="13" type="bool"/>
> >      <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="MOCS" start="8" end="11" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> >      <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -656,7 +654,7 @@
> >      <field name="Buffer 2 Valid" start="14" end="14" type="bool"/>
> >      <field name="Buffer 1 Valid" start="13" end="13" type="bool"/>
> >      <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="MOCS" start="8" end="11" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> >      <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -670,7 +668,7 @@
> >      <field name="Buffer 2 Valid" start="14" end="14" type="bool"/>
> >      <field name="Buffer 1 Valid" start="13" end="13" type="bool"/>
> >      <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="MOCS" start="8" end="11" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> >      <field name="Constant Body" start="32" end="159" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -720,8 +718,7 @@
> >      <field name="Render Target View Extent" start="129" end="137" type="uint"/>
> >      <field name="Depth Coordinate Offset Y" start="176" end="191" type="int"/>
> >      <field name="Depth Coordinate Offset X" start="160" end="175" type="int"/>
> > -    <field name="Depth Buffer Object Control State" start="219" end="223" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Depth Buffer MOCS" start="219" end="223" type="uint"/>
> > +    <field name="MOCS" start="219" end="223" type="uint"/>
> >    </instruction>
> >
> >    <instruction name="3DSTATE_DRAWING_RECTANGLE" bias="2" length="4" engine="render">
> > @@ -804,8 +801,7 @@
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="1"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="15"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> > -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="60" type="uint"/>
> > +    <field name="MOCS" start="57" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="95" type="address"/>
> >    </instruction>
> > @@ -815,8 +811,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="10"/>
> > -    <field name="Memory Object Control State" start="12" end="15" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="IndexBufferMOCS" start="12" end="15" type="uint"/>
> > +    <field name="MOCS" start="12" end="15" type="uint"/>
> >      <field name="Cut Index Enable" start="10" end="10" type="bool"/>
> >      <field name="Index Format" start="8" end="9" type="uint" prefix="INDEX">
> >        <value name="BYTE" value="0"/>
> > @@ -1068,8 +1063,7 @@
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="1"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="14"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> > -    <field name="Stencil Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Stencil Buffer MOCS" start="57" end="60" type="uint"/>
> > +    <field name="MOCS" start="57" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="95" type="address"/>
> >    </instruction>
> > @@ -1696,26 +1690,20 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="8"/>
> >      <field name="General State Base Address" start="44" end="63" type="address"/>
> > -    <field name="General State Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="General State MOCS" start="40" end="43" type="uint"/>
> > -    <field name="Stateless Data Port Access Memory Object Control State" start="36" end="39" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="Stateless Data Port Access MOCS" start="36" end="39" type="uint"/>
> >      <field name="Stateless Data Port Access Force Write Thru" start="35" end="35" type="uint"/>
> >      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
> >      <field name="Surface State Base Address" start="76" end="95" type="address"/>
> > -    <field name="Surface State Memory Object Control State" start="72" end="75" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="Surface State MOCS" start="72" end="75" type="uint"/>
> >      <field name="Surface State Base Address Modify Enable" start="64" end="64" type="bool"/>
> >      <field name="Dynamic State Base Address" start="108" end="127" type="address"/>
> > -    <field name="Dynamic State Memory Object Control State" start="104" end="107" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="Dynamic State MOCS" start="104" end="107" type="uint"/>
> >      <field name="Dynamic State Base Address Modify Enable" start="96" end="96" type="bool"/>
> >      <field name="Indirect Object Base Address" start="140" end="159" type="address"/>
> > -    <field name="Indirect Object Memory Object Control State" start="136" end="139" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="Indirect Object MOCS" start="136" end="139" type="uint"/>
> >      <field name="Indirect Object Base Address Modify Enable" start="128" end="128" type="bool"/>
> >      <field name="Instruction Base Address" start="172" end="191" type="address"/>
> > -    <field name="Instruction Memory Object Control State" start="168" end="171" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="Instruction MOCS" start="168" end="171" type="uint"/>
> >      <field name="Instruction Base Address Modify Enable" start="160" end="160" type="bool"/>
> >      <field name="General State Access Upper Bound" start="204" end="223" type="address"/>
> > diff --git a/src/intel/genxml/gen7.xml b/src/intel/genxml/gen7.xml
> > index 49b08281993..893c12b8af9 100644
> > --- a/src/intel/genxml/gen7.xml
> > +++ b/src/intel/genxml/gen7.xml
> > @@ -157,7 +157,7 @@
> >      <group count="4" start="0" size="16">
> >        <field name="Read Length" start="0" end="15" type="uint"/>
> >      </group>
> > -    <field name="Constant Buffer Object Control State" start="64" end="68" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="64" end="68" type="uint"/>
> >      <group count="4" start="64" size="32">
> >        <field name="Buffer" start="5" end="31" type="address"/>
> >      </group>
> > @@ -169,8 +169,7 @@
> >        <value name="VERTEXDATA" value="0"/>
> >        <value name="INSTANCEDATA" value="1"/>
> >      </field>
> > -    <field name="Vertex Buffer Memory Object Control State" start="16" end="19" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Vertex Buffer MOCS" start="16" end="19" type="uint"/>
> > +    <field name="MOCS" start="16" end="19" type="uint"/>
> >      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
> >      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
> >      <field name="Vertex Fetch Invalidate" start="12" end="12" type="bool" default="0"/>
> > @@ -443,7 +442,6 @@
> >      <field name="Strbuf Minimum Array Element" start="128" end="154" type="uint"/>
> >      <field name="X Offset" start="185" end="191" type="uint"/>
> >      <field name="Y Offset" start="180" end="183" type="uint"/>
> > -    <field name="Surface Object Control State" start="176" end="179" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="MOCS" start="176" end="179" type="uint"/>
> >      <field name="Surface Min LOD" start="164" end="167" type="uint"/>
> >      <field name="MIP Count / LOD" start="160" end="163" type="uint"/>
> > @@ -815,8 +813,7 @@
> >        <value name="SURFTYPE_CUBE (must be zero)" value="0"/>
> >      </field>
> >      <field name="Minimum Array Element" start="138" end="148" type="uint"/>
> > -    <field name="Depth Buffer Object Control State" start="128" end="131" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Depth Buffer MOCS" start="128" end="131" type="uint"/>
> > +    <field name="MOCS" start="128" end="131" type="uint"/>
> >      <field name="Depth Coordinate Offset Y" start="176" end="191" type="int"/>
> >      <field name="Depth Coordinate Offset X" start="160" end="175" type="int"/>
> >      <field name="Render Target View Extent" start="213" end="223" type="uint"/>
> > @@ -949,8 +946,7 @@
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> > -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="60" type="uint"/>
> > +    <field name="MOCS" start="57" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="95" type="address"/>
> >    </instruction>
> > @@ -996,8 +992,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="10"/>
> > -    <field name="Memory Object Control State" start="12" end="15" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="IndexBufferMOCS" start="12" end="15" type="uint"/>
> > +    <field name="MOCS" start="12" end="15" type="uint"/>
> >      <field name="Cut Index Enable" start="10" end="10" type="bool"/>
> >      <field name="Index Format" start="8" end="9" type="uint" prefix="INDEX">
> >        <value name="BYTE" value="0"/>
> > @@ -1422,8 +1417,7 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="24"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
> >      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> > -    <field name="SO Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="SO Buffer MOCS" start="57" end="60" type="uint"/>
> > +    <field name="MOCS" start="57" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="43" type="uint"/>
> >      <field name="Surface Base Address" start="66" end="95" type="address"/>
> >      <field name="Surface End Address" start="98" end="127" type="address"/>
> > @@ -1454,8 +1448,7 @@
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> > -    <field name="Stencil Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Stencil Buffer MOCS" start="57" end="60" type="uint"/>
> > +    <field name="MOCS" start="57" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="95" type="address"/>
> >    </instruction>
> > @@ -2238,21 +2231,21 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="8"/>
> >      <field name="General State Base Address" start="44" end="63" type="address"/>
> > -    <field name="General State Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Stateless Data Port Access Memory Object Control State" start="36" end="39" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="General State MOCS" start="40" end="43" type="uint"/>
> > +    <field name="Stateless Data Port Access MOCS" start="36" end="39" type="uint"/>
> >      <field name="Stateless Data Port Access Force Write Thru" start="35" end="35" type="uint"/>
> >      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
> >      <field name="Surface State Base Address" start="76" end="95" type="address"/>
> > -    <field name="Surface State Memory Object Control State" start="72" end="75" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Surface State MOCS" start="72" end="75" type="uint"/>
> >      <field name="Surface State Base Address Modify Enable" start="64" end="64" type="bool"/>
> >      <field name="Dynamic State Base Address" start="108" end="127" type="address"/>
> > -    <field name="Dynamic State Memory Object Control State" start="104" end="107" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Dynamic State MOCS" start="104" end="107" type="uint"/>
> >      <field name="Dynamic State Base Address Modify Enable" start="96" end="96" type="bool"/>
> >      <field name="Indirect Object Base Address" start="140" end="159" type="address"/>
> > -    <field name="Indirect Object Memory Object Control State" start="136" end="139" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Indirect Object MOCS" start="136" end="139" type="uint"/>
> >      <field name="Indirect Object Base Address Modify Enable" start="128" end="128" type="bool"/>
> >      <field name="Instruction Base Address" start="172" end="191" type="address"/>
> > -    <field name="Instruction Memory Object Control State" start="168" end="171" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Instruction MOCS" start="168" end="171" type="uint"/>
> >      <field name="Instruction Base Address Modify Enable" start="160" end="160" type="bool"/>
> >      <field name="General State Access Upper Bound" start="204" end="223" type="address"/>
> >      <field name="General State Access Upper Bound Modify Enable" start="192" end="192" type="bool"/>
> > @@ -2290,7 +2283,7 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="3"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="0"/>
> >      <field name="SW Tessellation Base Address" start="44" end="63" type="address"/>
> > -    <field name="SW Tessellation Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="SW Tessellation MOCS" start="40" end="43" type="uint"/>
> >    </instruction>
> >
> >    <register name="IA_VERTICES_COUNT" length="2" num="0x2310">
> > diff --git a/src/intel/genxml/gen75.xml b/src/intel/genxml/gen75.xml
> > index 6ce31b49241..4a858eb7fea 100644
> > --- a/src/intel/genxml/gen75.xml
> > +++ b/src/intel/genxml/gen75.xml
> > @@ -165,7 +165,7 @@
> >      <group count="4" start="0" size="16">
> >        <field name="Read Length" start="0" end="15" type="uint"/>
> >      </group>
> > -    <field name="Constant Buffer Object Control State" start="64" end="68" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="64" end="68" type="uint"/>
> >      <group count="4" start="64" size="32">
> >        <field name="Buffer" start="5" end="31" type="address"/>
> >      </group>
> > @@ -188,8 +188,7 @@
> >        <value name="VERTEXDATA" value="0"/>
> >        <value name="INSTANCEDATA" value="1"/>
> >      </field>
> > -    <field name="Vertex Buffer Memory Object Control State" start="16" end="19" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Vertex Buffer MOCS" start="16" end="19" type="uint"/>
> > +    <field name="MOCS" start="16" end="19" type="uint"/>
> >      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
> >      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
> >      <field name="Vertex Fetch Invalidate" start="12" end="12" type="bool" default="0"/>
> > @@ -463,7 +462,6 @@
> >      <field name="Strbuf Minimum Array Element" start="128" end="154" type="uint"/>
> >      <field name="X Offset" start="185" end="191" type="uint"/>
> >      <field name="Y Offset" start="180" end="183" type="uint"/>
> > -    <field name="Surface Object Control State" start="176" end="179" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="MOCS" start="176" end="179" type="uint"/>
> >      <field name="Surface Min LOD" start="164" end="167" type="uint"/>
> >      <field name="MIP Count / LOD" start="160" end="163" type="uint"/>
> > @@ -826,7 +824,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> >      <field name="Binding Table Pool Base Address" start="44" end="63" type="address"/>
> >      <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
> > -    <field name="Surface Object Control State" start="39" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="39" end="42" type="uint"/>
> >      <field name="Binding Table Pool Upper Bound" start="76" end="95" type="address"/>
> >    </instruction>
> >
> > @@ -999,7 +997,7 @@
> >        <value name="SURFTYPE_CUBE (must be zero)" value="0"/>
> >      </field>
> >      <field name="Minimum Array Element" start="138" end="148" type="uint"/>
> > -    <field name="Depth Buffer Object Control State" start="128" end="131" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="128" end="131" type="uint"/>
> >      <field name="Depth Buffer MOCS" start="128" end="131" type="uint"/>
> >      <field name="Depth Coordinate Offset Y" start="176" end="191" type="int"/>
> >      <field name="Depth Coordinate Offset X" start="160" end="175" type="int"/>
> > @@ -1160,7 +1158,7 @@
> >      <field name="Gather Pool Base Address" start="44" end="63" type="address"/>
> >      <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
> >      <field start="36" end="37" type="mbo"/>
> > -    <field name="Memory Object Control State" start="32" end="35" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="32" end="35" type="uint"/>
> >      <field name="Gather Pool Upper Bound" start="76" end="95" type="address"/>
> >    </instruction>
> >
> > @@ -1233,8 +1231,7 @@
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> > -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="60" type="uint"/>
> > +    <field name="MOCS" start="57" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="95" type="address"/>
> >    </instruction>
> > @@ -1284,8 +1281,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="10"/>
> > -    <field name="Memory Object Control State" start="12" end="15" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="IndexBufferMOCS" start="12" end="15" type="uint"/>
> > +    <field name="MOCS" start="12" end="15" type="uint"/>
> >      <field name="Index Format" start="8" end="9" type="uint" prefix="INDEX">
> >        <value name="BYTE" value="0"/>
> >        <value name="WORD" value="1"/>
> > @@ -1736,8 +1732,7 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="24"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
> >      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> > -    <field name="SO Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="SO Buffer MOCS" start="57" end="60" type="uint"/>
> > +    <field name="MOCS" start="57" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="43" type="uint"/>
> >      <field name="Surface Base Address" start="66" end="95" type="address"/>
> >      <field name="Surface End Address" start="98" end="127" type="address"/>
> > @@ -1769,8 +1764,7 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="1"/>
> >      <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
> > -    <field name="Stencil Buffer Object Control State" start="57" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Stencil Buffer MOCS" start="57" end="60" type="uint"/>
> > +    <field name="MOCS" start="57" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="95" type="address"/>
> >    </instruction>
> > @@ -2702,20 +2696,20 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="8"/>
> >      <field name="General State Base Address" start="44" end="63" type="address"/>
> > -    <field name="General State Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Stateless Data Port Access Memory Object Control State" start="36" end="39" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="General State MOCS" start="40" end="43" type="uint"/>
> > +    <field name="Stateless Data Port Access MOCS" start="36" end="39" type="uint"/>
> >      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
> >      <field name="Surface State Base Address" start="76" end="95" type="address"/>
> > -    <field name="Surface State Memory Object Control State" start="72" end="75" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Surface State MOCS" start="72" end="75" type="uint"/>
> >      <field name="Surface State Base Address Modify Enable" start="64" end="64" type="bool"/>
> >      <field name="Dynamic State Base Address" start="108" end="127" type="address"/>
> > -    <field name="Dynamic State Memory Object Control State" start="104" end="107" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Dynamic State MOCS" start="104" end="107" type="uint"/>
> >      <field name="Dynamic State Base Address Modify Enable" start="96" end="96" type="bool"/>
> >      <field name="Indirect Object Base Address" start="140" end="159" type="address"/>
> > -    <field name="Indirect Object Memory Object Control State" start="136" end="139" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Indirect Object MOCS" start="136" end="139" type="uint"/>
> >      <field name="Indirect Object Base Address Modify Enable" start="128" end="128" type="bool"/>
> >      <field name="Instruction Base Address" start="172" end="191" type="address"/>
> > -    <field name="Instruction Memory Object Control State" start="168" end="171" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Instruction MOCS" start="168" end="171" type="uint"/>
> >      <field name="Instruction Base Address Modify Enable" start="160" end="160" type="bool"/>
> >      <field name="General State Access Upper Bound" start="204" end="223" type="address"/>
> >      <field name="General State Access Upper Bound Modify Enable" start="192" end="192" type="bool"/>
> > @@ -2753,7 +2747,7 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="3"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="0"/>
> >      <field name="SW Tessellation Base Address" start="44" end="63" type="address"/>
> > -    <field name="SW Tessellation Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="SW Tessellation MOCS" start="40" end="43" type="uint"/>
> >    </instruction>
> >
> >    <register name="IA_VERTICES_COUNT" length="2" num="0x2310">
> > diff --git a/src/intel/genxml/gen8.xml b/src/intel/genxml/gen8.xml
> > index a27cac12843..fd19b0c8b33 100644
> > --- a/src/intel/genxml/gen8.xml
> > +++ b/src/intel/genxml/gen8.xml
> > @@ -216,8 +216,7 @@
> >
> >    <struct name="VERTEX_BUFFER_STATE" length="4">
> >      <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
> > -    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
> > +    <field name="MOCS" start="16" end="22" type="uint"/>
> >      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
> >      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
> >      <field name="Buffer Pitch" start="0" end="11" type="uint"/>
> > @@ -462,7 +461,6 @@
> >      <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
> >      <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
> >      <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
> > -    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="MOCS" start="56" end="62" type="uint"/>
> >      <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
> >      <field name="Surface QPitch" start="32" end="46" type="uint"/>
> > @@ -894,7 +892,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
> >      <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
> >      <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
> > -    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
> >        <value name="No Valid Data" value="0"/>
> >      </field>
> > @@ -986,7 +984,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -996,7 +994,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1006,7 +1004,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1016,7 +1014,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1026,7 +1024,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1059,8 +1057,7 @@
> >      <field name="LOD" start="128" end="131" type="uint"/>
> >      <field name="Depth" start="181" end="191" type="uint"/>
> >      <field name="Minimum Array Element" start="170" end="180" type="uint"/>
> > -    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
> > +    <field name="MOCS" start="160" end="166" type="uint"/>
> >      <field name="Render Target View Extent" start="245" end="255" type="uint"/>
> >      <field name="Surface QPitch" start="224" end="238" type="uint"/>
> >    </instruction>
> > @@ -1221,7 +1218,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
> >      <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
> >      <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
> > -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
> >    </instruction>
> >
> > @@ -1299,8 +1296,7 @@
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> > -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
> > +    <field name="MOCS" start="57" end="63" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="127" type="address"/>
> >      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> > @@ -1356,8 +1352,7 @@
> >        <value name="WORD" value="1"/>
> >        <value name="DWORD" value="2"/>
> >      </field>
> > -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Buffer Starting Address" start="64" end="127" type="address"/>
> >      <field name="Buffer Size" start="128" end="159" type="uint"/>
> >    </instruction>
> > @@ -1837,8 +1832,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
> >      <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
> >      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> > -    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
> > +    <field name="MOCS" start="54" end="60" type="uint"/>
> >      <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
> >      <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
> >      <field name="Surface Base Address" start="66" end="111" type="address"/>
> > @@ -1873,8 +1867,7 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> >      <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
> > -    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
> > +    <field name="MOCS" start="54" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="127" type="address"/>
> >      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> > @@ -2962,20 +2955,20 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="14"/>
> >      <field name="General State Base Address" start="44" end="95" type="address"/>
> > -    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="General State MOCS" start="36" end="42" type="uint"/>
> >      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
> > -    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
> >      <field name="Surface State Base Address" start="140" end="191" type="address"/>
> > -    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
> >      <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
> >      <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
> > -    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
> >      <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
> >      <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
> > -    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
> >      <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
> >      <field name="Instruction Base Address" start="332" end="383" type="address"/>
> > -    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
> >      <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
> >      <field name="General State Buffer Size" start="396" end="415" type="uint"/>
> >      <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
> > @@ -3013,7 +3006,7 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="3"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="0"/>
> >      <field name="SW Tessellation Base Address" start="44" end="79" type="address"/>
> > -    <field name="SW Tessellation Memory Object Control State" start="40" end="43" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="SW Tessellation MOCS" start="40" end="43" type="uint"/>
> >    </instruction>
> >
> >    <register name="IA_VERTICES_COUNT" length="2" num="0x2310">
> > diff --git a/src/intel/genxml/gen9.xml b/src/intel/genxml/gen9.xml
> > index 0f9a1d110e8..9349e24b0f0 100644
> > --- a/src/intel/genxml/gen9.xml
> > +++ b/src/intel/genxml/gen9.xml
> > @@ -219,14 +219,9 @@
> >      <field name="Binding Table Index Offset" start="0" end="3" type="uint"/>
> >    </struct>
> >
> > -  <struct name="MEMORY_OBJECT_CONTROL_STATE" length="1">
> > -    <field name="Index to MOCS Tables" start="1" end="6" type="uint"/>
> > -  </struct>
> > -
> >    <struct name="VERTEX_BUFFER_STATE" length="4">
> >      <field name="Vertex Buffer Index" start="26" end="31" type="uint"/>
> > -    <field name="Memory Object Control State" start="16" end="22" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Vertex Buffer MOCS" start="16" end="22" type="uint"/>
> > +    <field name="MOCS" start="16" end="22" type="uint"/>
> >      <field name="Address Modify Enable" start="14" end="14" type="bool"/>
> >      <field name="Null Vertex Buffer" start="13" end="13" type="bool"/>
> >      <field name="Buffer Pitch" start="0" end="11" type="uint"/>
> > @@ -494,7 +489,6 @@
> >      <field name="Cube Face Enable - Negative Y" start="3" end="3" type="bool"/>
> >      <field name="Cube Face Enable - Positive X" start="4" end="4" type="bool"/>
> >      <field name="Cube Face Enable - Negative X" start="5" end="5" type="bool"/>
> > -    <field name="Memory Object Control State" start="56" end="62" type="MEMORY_OBJECT_CONTROL_STATE"/>
> >      <field name="MOCS" start="56" end="62" type="uint"/>
> >      <field name="Base Mip Level" start="51" end="55" type="u4.1"/>
> >      <field name="Surface QPitch" start="32" end="46" type="uint"/>
> > @@ -952,7 +946,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
> >      <field name="Binding Table Pool Base Address" start="44" end="95" type="address"/>
> >      <field name="Binding Table Pool Enable" start="43" end="43" type="uint"/>
> > -    <field name="Surface Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Binding Table Pool Buffer Size" start="108" end="127" type="uint">
> >        <value name="No Valid Data" value="0"/>
> >      </field>
> > @@ -1044,7 +1038,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="26"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1054,7 +1048,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="22"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1064,7 +1058,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="25"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1074,7 +1068,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="23"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1084,7 +1078,7 @@
> >      <field name="Command SubType" start="27" end="28" type="uint" default="3"/>
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="21"/>
> > -    <field name="Constant Buffer Object Control State" start="8" end="14" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="8" end="14" type="uint"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="9"/>
> >      <field name="Constant Body" start="32" end="351" type="3DSTATE_CONSTANT_BODY"/>
> >    </instruction>
> > @@ -1115,7 +1109,7 @@
> >      <field name="LOD" start="128" end="131" type="uint"/>
> >      <field name="Depth" start="181" end="191" type="uint"/>
> >      <field name="Minimum Array Element" start="170" end="180" type="uint"/>
> > -    <field name="Depth Buffer Object Control State" start="160" end="166" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="160" end="166" type="uint"/>
> >      <field name="Depth Buffer MOCS" start="160" end="166" type="uint"/>
> >      <field name="Tiled Resource Mode" start="222" end="223" type="uint">
> >        <value name="NONE" value="0"/>
> > @@ -1326,7 +1320,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="2"/>
> >      <field name="Gather Pool Base Address" start="44" end="95" type="address"/>
> >      <field name="Gather Pool Enable" start="43" end="43" type="bool"/>
> > -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Gather Pool Buffer Size" start="108" end="127" type="uint"/>
> >    </instruction>
> >
> > @@ -1405,8 +1399,7 @@
> >      <field name="3D Command Opcode" start="24" end="26" type="uint" default="0"/>
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="7"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> > -    <field name="Hierarchical Depth Buffer Object Control State" start="57" end="63" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Hierarchical Depth Buffer MOCS" start="57" end="63" type="uint"/>
> > +    <field name="MOCS" start="57" end="63" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="127" type="address"/>
> >      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> > @@ -1469,8 +1462,7 @@
> >        <value name="WORD" value="1"/>
> >        <value name="DWORD" value="2"/>
> >      </field>
> > -    <field name="Memory Object Control State" start="32" end="38" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="IndexBufferMOCS" start="32" end="38" type="uint"/>
> > +    <field name="MOCS" start="32" end="38" type="uint"/>
> >      <field name="Buffer Starting Address" start="64" end="127" type="address"/>
> >      <field name="Buffer Size" start="128" end="159" type="uint"/>
> >    </instruction>
> > @@ -2020,8 +2012,7 @@
> >      <field name="DWord Length" start="0" end="7" type="uint" default="6"/>
> >      <field name="SO Buffer Enable" start="63" end="63" type="bool"/>
> >      <field name="SO Buffer Index" start="61" end="62" type="uint"/>
> > -    <field name="SO Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="SO Buffer MOCS" start="54" end="60" type="uint"/>
> > +    <field name="MOCS" start="54" end="60" type="uint"/>
> >      <field name="Stream Offset Write Enable" start="53" end="53" type="bool"/>
> >      <field name="Stream Output Buffer Offset Address Enable" start="52" end="52" type="bool"/>
> >      <field name="Surface Base Address" start="66" end="111" type="address"/>
> > @@ -2056,8 +2047,7 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="6"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="3"/>
> >      <field name="Stencil Buffer Enable" start="63" end="63" type="bool"/>
> > -    <field name="Stencil Buffer Object Control State" start="54" end="60" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > -    <field name="Stencil Buffer MOCS" start="54" end="60" type="uint"/>
> > +    <field name="MOCS" start="54" end="60" type="uint"/>
> >      <field name="Surface Pitch" start="32" end="48" type="uint"/>
> >      <field name="Surface Base Address" start="64" end="127" type="address"/>
> >      <field name="Surface QPitch" start="128" end="142" type="uint"/>
> > @@ -3251,20 +3241,20 @@
> >      <field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="1"/>
> >      <field name="DWord Length" start="0" end="7" type="uint" default="17"/>
> >      <field name="General State Base Address" start="44" end="95" type="address"/>
> > -    <field name="General State Memory Object Control State" start="36" end="42" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="General State MOCS" start="36" end="42" type="uint"/>
> >      <field name="General State Base Address Modify Enable" start="32" end="32" type="bool"/>
> > -    <field name="Stateless Data Port Access Memory Object Control State" start="112" end="118" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Stateless Data Port Access MOCS" start="112" end="118" type="uint"/>
> >      <field name="Surface State Base Address" start="140" end="191" type="address"/>
> > -    <field name="Surface State Memory Object Control State" start="132" end="138" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Surface State MOCS" start="132" end="138" type="uint"/>
> >      <field name="Surface State Base Address Modify Enable" start="128" end="128" type="bool"/>
> >      <field name="Dynamic State Base Address" start="204" end="255" type="address"/>
> > -    <field name="Dynamic State Memory Object Control State" start="196" end="202" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Dynamic State MOCS" start="196" end="202" type="uint"/>
> >      <field name="Dynamic State Base Address Modify Enable" start="192" end="192" type="bool"/>
> >      <field name="Indirect Object Base Address" start="268" end="319" type="address"/>
> > -    <field name="Indirect Object Memory Object Control State" start="260" end="266" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Indirect Object MOCS" start="260" end="266" type="uint"/>
> >      <field name="Indirect Object Base Address Modify Enable" start="256" end="256" type="bool"/>
> >      <field name="Instruction Base Address" start="332" end="383" type="address"/>
> > -    <field name="Instruction Memory Object Control State" start="324" end="330" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Instruction MOCS" start="324" end="330" type="uint"/>
> >      <field name="Instruction Base Address Modify Enable" start="320" end="320" type="bool"/>
> >      <field name="General State Buffer Size" start="396" end="415" type="uint"/>
> >      <field name="General State Buffer Size Modify Enable" start="384" end="384" type="bool"/>
> > @@ -3275,7 +3265,7 @@
> >      <field name="Instruction Buffer Size" start="492" end="511" type="uint"/>
> >      <field name="Instruction Buffer size Modify Enable" start="480" end="480" type="bool"/>
> >      <field name="Bindless Surface State Base Address" start="524" end="575" type="address"/>
> > -    <field name="Bindless Surface State Memory Object Control State" start="516" end="522" type="MEMORY_OBJECT_CONTROL_STATE"/>
> > +    <field name="Bindless Surface State MOCS" start="516" end="522" type="uint"/>
> >      <field name="Bindless Surface State Base Address Modify Enable" start="512" end="512" type="bool"/>
> >      <field name="Bindless Surface State Size" start="588" end="607" type="uint"/>
> >    </instruction>
> > diff --git a/src/intel/isl/isl_emit_depth_stencil.c b/src/intel/isl/isl_emit_depth_stencil.c
> > index 9cf5a476687..d2dec3761e5 100644
> > --- a/src/intel/isl/isl_emit_depth_stencil.c
> > +++ b/src/intel/isl/isl_emit_depth_stencil.c
> > @@ -94,7 +94,7 @@ isl_genX(emit_depth_stencil_hiz_s)(const struct isl_device *dev, void *batch,
> >  #endif
> >        db.SurfaceBaseAddress = info->depth_address;
> >  #if GEN_GEN >= 6
> > -      db.DepthBufferMOCS = info->mocs;
> > +      db.MOCS = info->mocs;
> >  #endif
> >
> >  #if GEN_GEN <= 6
> > @@ -138,7 +138,7 @@ isl_genX(emit_depth_stencil_hiz_s)(const struct isl_device *dev, void *batch,
> >  #endif
> >        sb.SurfaceBaseAddress = info->stencil_address;
> >  #if GEN_GEN >= 6
> > -      sb.StencilBufferMOCS = info->mocs;
> > +      sb.MOCS = info->mocs;
> >  #endif
> >        sb.SurfacePitch = info->stencil_surf->row_pitch_B - 1;
> >  #if GEN_GEN >= 8
> > @@ -161,7 +161,7 @@ isl_genX(emit_depth_stencil_hiz_s)(const struct isl_device *dev, void *batch,
> >        db.HierarchicalDepthBufferEnable = true;
> >
> >        hiz.SurfaceBaseAddress = info->hiz_address;
> > -      hiz.HierarchicalDepthBufferMOCS = info->mocs;
> > +      hiz.MOCS = info->mocs;
> >        hiz.SurfacePitch = info->hiz_surf->row_pitch_B - 1;
> >  #if GEN_GEN >= 8
> >        /* From the SKL PRM Vol2a:
> > diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
> > index aff076a55d9..b3e9ace7ad8 100644
> > --- a/src/intel/vulkan/anv_private.h
> > +++ b/src/intel/vulkan/anv_private.h
> > @@ -1349,64 +1349,50 @@ _anv_combine_address(struct anv_batch *batch, void *location,
> >             _dst = NULL;                                                 \
> >           }))
> >
> > -#define GEN7_MOCS (struct GEN7_MEMORY_OBJECT_CONTROL_STATE) {  \
> > -   .GraphicsDataTypeGFDT                        = 0,           \
> > -   .LLCCacheabilityControlLLCCC                 = 0,           \
> > -   .L3CacheabilityControlL3CC                   = 1,           \
> > -}
> > +/* MEMORY_OBJECT_CONTROL_STATE:
> > + * .GraphicsDataTypeGFDT                        = 0,
> > + * .LLCCacheabilityControlLLCCC                 = 0,
> > + * .L3CacheabilityControlL3CC                   = 1,
> > + */
> > +#define GEN7_MOCS 1
> >
> > -#define GEN75_MOCS (struct GEN75_MEMORY_OBJECT_CONTROL_STATE) {  \
> > -   .LLCeLLCCacheabilityControlLLCCC             = 0,           \
> > -   .L3CacheabilityControlL3CC                   = 1,           \
> > -}
> > +/* MEMORY_OBJECT_CONTROL_STATE:
> > + * .LLCeLLCCacheabilityControlLLCCC             = 0,
> > + * .L3CacheabilityControlL3CC                   = 1,
> > + */
> > +#define GEN75_MOCS 1
> >
> > -#define GEN8_MOCS (struct GEN8_MEMORY_OBJECT_CONTROL_STATE) {  \
> > -      .MemoryTypeLLCeLLCCacheabilityControl = WB,              \
> > -      .TargetCache = L3DefertoPATforLLCeLLCselection,          \
> > -      .AgeforQUADLRU = 0                                       \
> > -   }
> > +/* MEMORY_OBJECT_CONTROL_STATE:
> > + * .MemoryTypeLLCeLLCCacheabilityControl = WB,
> > + * .TargetCache = L3DefertoPATforLLCeLLCselection,
> > + * .AgeforQUADLRU = 0
> > + */
> > +#define GEN8_MOCS 0x78
> >
> > -#define GEN8_EXTERNAL_MOCS (struct GEN8_MEMORY_OBJECT_CONTROL_STATE) {     \
> > -      .MemoryTypeLLCeLLCCacheabilityControl = UCwithFenceifcoherentcycle,  \
> > -      .TargetCache = L3DefertoPATforLLCeLLCselection,                      \
> > -      .AgeforQUADLRU = 0                                                   \
> > -   }
> > +/* MEMORY_OBJECT_CONTROL_STATE:
> > + * .MemoryTypeLLCeLLCCacheabilityControl = UCwithFenceifcoherentcycle,
> > + * .TargetCache = L3DefertoPATforLLCeLLCselection,
> > + * .AgeforQUADLRU = 0
> > + */
> > +#define GEN8_EXTERNAL_MOCS 0x18
> >
> >  /* Skylake: MOCS is now an index into an array of 62 different caching
> >   * configurations programmed by the kernel.
> >   */
> >
> > -#define GEN9_MOCS (struct GEN9_MEMORY_OBJECT_CONTROL_STATE) {  \
> > -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */              \
> > -      .IndextoMOCSTables                           = 2         \
> > -   }
> > +/* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */
> > +#define GEN9_MOCS 2
> >
> > -#define GEN9_EXTERNAL_MOCS (struct GEN9_MEMORY_OBJECT_CONTROL_STATE) {  \
> > -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */                       \
> > -      .IndextoMOCSTables                           = 1                  \
> > -   }
> > +/* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */
> > +#define GEN9_EXTERNAL_MOCS 1
> >
> >  /* Cannonlake MOCS defines are duplicates of Skylake MOCS defines. */
> > -#define GEN10_MOCS (struct GEN10_MEMORY_OBJECT_CONTROL_STATE) {  \
> > -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */              \
> > -      .IndextoMOCSTables                           = 2         \
> > -   }
> > -
> > -#define GEN10_EXTERNAL_MOCS (struct GEN10_MEMORY_OBJECT_CONTROL_STATE) {   \
> > -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */                          \
> > -      .IndextoMOCSTables                           = 1                     \
> > -   }
> > +#define GEN10_MOCS GEN9_MOCS
> > +#define GEN10_EXTERNAL_MOCS GEN9_EXTERNAL_MOCS
> >
> >  /* Ice Lake MOCS defines are duplicates of Skylake MOCS defines. */
> > -#define GEN11_MOCS (struct GEN11_MEMORY_OBJECT_CONTROL_STATE) {  \
> > -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */              \
> > -      .IndextoMOCSTables                           = 2         \
> > -   }
> > -
> > -#define GEN11_EXTERNAL_MOCS (struct GEN11_MEMORY_OBJECT_CONTROL_STATE) {   \
> > -      /* TC=LLC/eLLC, LeCC=WB, LRUM=3, L3CC=WB */                          \
> > -      .IndextoMOCSTables                           = 1                     \
> > -   }
> > +#define GEN11_MOCS GEN9_MOCS
> > +#define GEN11_EXTERNAL_MOCS GEN9_EXTERNAL_MOCS
> >
> >  struct anv_device_memory {
> >     struct anv_bo *                              bo;
> > diff --git a/src/intel/vulkan/gen7_cmd_buffer.c b/src/intel/vulkan/gen7_cmd_buffer.c
> > index da51cb9781c..08bebd44adb 100644
> > --- a/src/intel/vulkan/gen7_cmd_buffer.c
> > +++ b/src/intel/vulkan/gen7_cmd_buffer.c
> > @@ -246,7 +246,7 @@ genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
> >           ib.CutIndexEnable             = pipeline->primitive_restart;
> >  #endif
> >           ib.IndexFormat                = cmd_buffer->state.gfx.gen7.index_type;
> > -         ib.IndexBufferMOCS            = anv_mocs_for_bo(cmd_buffer->device,
> > +         ib.MOCS                       = anv_mocs_for_bo(cmd_buffer->device,
> >                                                           buffer->address.bo);
> >
> >           ib.BufferStartingAddress      = anv_address_add(buffer->address,
> > diff --git a/src/intel/vulkan/gen8_cmd_buffer.c b/src/intel/vulkan/gen8_cmd_buffer.c
> > index 752d04f3013..5bacfed71c8 100644
> > --- a/src/intel/vulkan/gen8_cmd_buffer.c
> > +++ b/src/intel/vulkan/gen8_cmd_buffer.c
> > @@ -565,7 +565,7 @@ void genX(CmdBindIndexBuffer)(
> >
> >     anv_batch_emit(&cmd_buffer->batch, GENX(3DSTATE_INDEX_BUFFER), ib) {
> >        ib.IndexFormat                = vk_to_gen_index_type[indexType];
> > -      ib.IndexBufferMOCS            = anv_mocs_for_bo(cmd_buffer->device,
> > +      ib.MOCS                       = anv_mocs_for_bo(cmd_buffer->device,
> >                                                        buffer->address.bo);
> >        ib.BufferStartingAddress      = anv_address_add(buffer->address, offset);
> >        ib.BufferSize                 = buffer->size - offset;
> > diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
> > index fb70cd2e386..1aaf83e97e8 100644
> > --- a/src/intel/vulkan/genX_cmd_buffer.c
> > +++ b/src/intel/vulkan/genX_cmd_buffer.c
> > @@ -86,26 +86,26 @@ genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer)
> >
> >     anv_batch_emit(&cmd_buffer->batch, GENX(STATE_BASE_ADDRESS), sba) {
> >        sba.GeneralStateBaseAddress = (struct anv_address) { NULL, 0 };
> > -      sba.GeneralStateMemoryObjectControlState = GENX(MOCS);
> > +      sba.GeneralStateMOCS = GENX(MOCS);
> >        sba.GeneralStateBaseAddressModifyEnable = true;
> >
> >        sba.SurfaceStateBaseAddress =
> >           anv_cmd_buffer_surface_base_address(cmd_buffer);
> > -      sba.SurfaceStateMemoryObjectControlState = GENX(MOCS);
> > +      sba.SurfaceStateMOCS = GENX(MOCS);
> >        sba.SurfaceStateBaseAddressModifyEnable = true;
> >
> >        sba.DynamicStateBaseAddress =
> >           (struct anv_address) { &device->dynamic_state_pool.block_pool.bo, 0 };
> > -      sba.DynamicStateMemoryObjectControlState = GENX(MOCS);
> > +      sba.DynamicStateMOCS = GENX(MOCS);
> >        sba.DynamicStateBaseAddressModifyEnable = true;
> >
> >        sba.IndirectObjectBaseAddress = (struct anv_address) { NULL, 0 };
> > -      sba.IndirectObjectMemoryObjectControlState = GENX(MOCS);
> > +      sba.IndirectObjectMOCS = GENX(MOCS);
> >        sba.IndirectObjectBaseAddressModifyEnable = true;
> >
> >        sba.InstructionBaseAddress =
> >           (struct anv_address) { &device->instruction_state_pool.block_pool.bo, 0 };
> > -      sba.InstructionMemoryObjectControlState = GENX(MOCS);
> > +      sba.InstructionMOCS = GENX(MOCS);
> >        sba.InstructionBaseAddressModifyEnable = true;
> >
> >  #  if (GEN_GEN >= 8)
> > @@ -124,13 +124,13 @@ genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer)
> >  #  endif
> >  #  if (GEN_GEN >= 9)
> >        sba.BindlessSurfaceStateBaseAddress = (struct anv_address) { NULL, 0 };
> > -      sba.BindlessSurfaceStateMemoryObjectControlState = GENX(MOCS);
> > +      sba.BindlessSurfaceStateMOCS = GENX(MOCS);
> >        sba.BindlessSurfaceStateBaseAddressModifyEnable = true;
> >        sba.BindlessSurfaceStateSize = 0;
> >  #  endif
> >  #  if (GEN_GEN >= 10)
> >        sba.BindlessSamplerStateBaseAddress = (struct anv_address) { NULL, 0 };
> > -      sba.BindlessSamplerStateMemoryObjectControlState = GENX(MOCS);
> > +      sba.BindlessSamplerStateMOCS = GENX(MOCS);
> >        sba.BindlessSamplerStateBaseAddressModifyEnable = true;
> >        sba.BindlessSamplerStateBufferSize = 0;
> >  #  endif
> > @@ -2572,8 +2572,7 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer)
> >           struct GENX(VERTEX_BUFFER_STATE) state = {
> >              .VertexBufferIndex = vb,
> >
> > -            .VertexBufferMOCS = anv_mocs_for_bo(cmd_buffer->device,
> > -                                                buffer->address.bo),
> > +            .MOCS = anv_mocs_for_bo(cmd_buffer->device, buffer->address.bo),
> >  #if GEN_GEN <= 7
> >              .BufferAccessType = pipeline->vb[vb].instanced ? INSTANCEDATA : VERTEXDATA,
> >              .InstanceDataStepRate = pipeline->vb[vb].instance_divisor,
> > @@ -2691,7 +2690,7 @@ emit_vertex_bo(struct anv_cmd_buffer *cmd_buffer,
> >           .VertexBufferIndex = index,
> >           .AddressModifyEnable = true,
> >           .BufferPitch = 0,
> > -         .VertexBufferMOCS = anv_mocs_for_bo(cmd_buffer->device, addr.bo),
> > +         .MOCS = anv_mocs_for_bo(cmd_buffer->device, addr.bo),
> >  #if (GEN_GEN >= 8)
> >           .BufferStartingAddress = addr,
> >           .BufferSize = size
> > diff --git a/src/intel/vulkan/genX_gpu_memcpy.c b/src/intel/vulkan/genX_gpu_memcpy.c
> > index 1bee1c6dc17..ea35daa4126 100644
> > --- a/src/intel/vulkan/genX_gpu_memcpy.c
> > +++ b/src/intel/vulkan/genX_gpu_memcpy.c
> > @@ -167,7 +167,7 @@ genX(cmd_buffer_so_memcpy)(struct anv_cmd_buffer *cmd_buffer,
> >           .AddressModifyEnable = true,
> >           .BufferStartingAddress = src,
> >           .BufferPitch = bs,
> > -         .VertexBufferMOCS = anv_mocs_for_bo(cmd_buffer->device, src.bo),
> > +         .MOCS = anv_mocs_for_bo(cmd_buffer->device, src.bo),
> >  #if (GEN_GEN >= 8)
> >           .BufferSize = size,
> >  #else
> > @@ -227,7 +227,7 @@ genX(cmd_buffer_so_memcpy)(struct anv_cmd_buffer *cmd_buffer,
> >
> >     anv_batch_emit(&cmd_buffer->batch, GENX(3DSTATE_SO_BUFFER), sob) {
> >        sob.SOBufferIndex = 0;
> > -      sob.SOBufferMOCS = anv_mocs_for_bo(cmd_buffer->device, dst.bo),
> > +      sob.MOCS = anv_mocs_for_bo(cmd_buffer->device, dst.bo),
> >        sob.SurfaceBaseAddress = dst;
> >
> >  #if GEN_GEN >= 8
> > diff --git a/src/intel/vulkan/genX_state.c b/src/intel/vulkan/genX_state.c
> > index 42800a2581e..0f6b77492fb 100644
> > --- a/src/intel/vulkan/genX_state.c
> > +++ b/src/intel/vulkan/genX_state.c
> > @@ -91,11 +91,9 @@ gen10_emit_wa_lri_to_cache_mode_zero(struct anv_batch *batch)
> >  VkResult
> >  genX(init_device_state)(struct anv_device *device)
> >  {
> > -   GENX(MEMORY_OBJECT_CONTROL_STATE_pack)(NULL, &device->default_mocs,
> > -                                          &GENX(MOCS));
> > +   device->default_mocs = GENX(MOCS);
> >  #if GEN_GEN >= 8
> > -   GENX(MEMORY_OBJECT_CONTROL_STATE_pack)(NULL, &device->external_mocs,
> > -                                          &GENX(EXTERNAL_MOCS));
> > +   device->external_mocs = GENX(EXTERNAL_MOCS);
> >  #else
> >     device->external_mocs = device->default_mocs;
> >  #endif
> > diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c
> > index 8e3fcbf12ec..93147a253ed 100644
> > --- a/src/mesa/drivers/dri/i965/genX_state_upload.c
> > +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
> > @@ -363,15 +363,15 @@ genX(emit_vertex_buffer_state)(struct brw_context *brw,
> >  #endif
> >
> >  #if GEN_GEN == 11
> > -      .VertexBufferMOCS = ICL_MOCS_WB,
> > +      .MOCS = ICL_MOCS_WB,
> >  #elif GEN_GEN == 10
> > -      .VertexBufferMOCS = CNL_MOCS_WB,
> > +      .MOCS = CNL_MOCS_WB,
> >  #elif GEN_GEN == 9
> > -      .VertexBufferMOCS = SKL_MOCS_WB,
> > +      .MOCS = SKL_MOCS_WB,
> >  #elif GEN_GEN == 8
> > -      .VertexBufferMOCS = BDW_MOCS_WB,
> > +      .MOCS = BDW_MOCS_WB,
> >  #elif GEN_GEN == 7
> > -      .VertexBufferMOCS = GEN7_MOCS_L3,
> > +      .MOCS = GEN7_MOCS_L3,
> >  #endif
> >     };
> >
> > @@ -965,7 +965,7 @@ genX(emit_index_buffer)(struct brw_context *brw)
> >         */
> >        ib.BufferStartingAddress = ro_32_bo(brw->ib.bo, 0);
> >  #if GEN_GEN >= 8
> > -      ib.IndexBufferMOCS = GEN_GEN >= 9 ? SKL_MOCS_WB : BDW_MOCS_WB;
> > +      ib.MOCS = GEN_GEN >= 9 ? SKL_MOCS_WB : BDW_MOCS_WB;
> >        ib.BufferSize = brw->ib.size;
> >  #else
> >        ib.BufferEndingAddress = ro_bo(brw->ib.bo, brw->ib.size - 1);
> > @@ -3847,7 +3847,7 @@ genX(upload_3dstate_so_buffers)(struct brw_context *brw)
> >           sob.SOBufferEnable = true;
> >           sob.StreamOffsetWriteEnable = true;
> >           sob.StreamOutputBufferOffsetAddressEnable = true;
> > -         sob.SOBufferMOCS = mocs_wb;
> > +         sob.MOCS = mocs_wb;
> >
> >           sob.SurfaceSize = MAX2(xfb_obj->Size[i] / 4, 1) - 1;
> >           sob.StreamOutputBufferOffsetAddress =
> > --
> > 2.19.1
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
On Tue, Dec 11, 2018 at 10:31 PM Kenneth Graunke <kenneth@whitecape.org>
wrote:

> When we first started using genxml, we decided to represent MOCS as an
> actual structure, and pack values.  However, in many places, it was more
> convenient to use a numeric value rather than treating it as a struct,
> so we added secondary setters in a bunch of places as well.
>
> We were not entirely consistent, either.  Some places only had one.
> Gen6 had both kinds of setters for STATE_BASE_ADDRESS, but newer gens
> only had the struct-based setters.  The names were sometimes "Constant
> Buffer Object Control State" instead of "Memory", making it harder to
> find.  Many had prefixes like "Vertex Buffer MOCS"...in a vertex buffer
> packet...which is a bit redundant.
>
> On modern hardware, MOCS is simply an index into a table, but we were
> still carrying around the structure with an "Index to MOCS Table" field,
> in addition to the direct numeric setters.  This is clunky - we really
> just want a number on new hardware.
>

This gets a bit sticky because the "Index to MOCS Table" field starts at
bit 1 not 0 so the MOCS value in your patch isn't actually the index, it's
index * 2.  Do we want to "fix" this and make the MOCS value the thing we
actually want on gen9+?

--Jason
On Wed, Dec 12, 2018 at 11:09 AM Jason Ekstrand <jason@jlekstrand.net>
wrote:

> On Tue, Dec 11, 2018 at 10:31 PM Kenneth Graunke <kenneth@whitecape.org>
> wrote:
>
>> When we first started using genxml, we decided to represent MOCS as an
>> actual structure, and pack values.  However, in many places, it was more
>> convenient to use a numeric value rather than treating it as a struct,
>> so we added secondary setters in a bunch of places as well.
>>
>> We were not entirely consistent, either.  Some places only had one.
>> Gen6 had both kinds of setters for STATE_BASE_ADDRESS, but newer gens
>> only had the struct-based setters.  The names were sometimes "Constant
>> Buffer Object Control State" instead of "Memory", making it harder to
>> find.  Many had prefixes like "Vertex Buffer MOCS"...in a vertex buffer
>> packet...which is a bit redundant.
>>
>> On modern hardware, MOCS is simply an index into a table, but we were
>> still carrying around the structure with an "Index to MOCS Table" field,
>> in addition to the direct numeric setters.  This is clunky - we really
>> just want a number on new hardware.
>>
>
> This gets a bit sticky because the "Index to MOCS Table" field starts at
> bit 1 not 0 so the MOCS value in your patch isn't actually the index, it's
> index * 2.  Do we want to "fix" this and make the MOCS value the thing we
> actually want on gen9+?
>

One other comment:  While the MEMORY_OBJECT_CONTROL_STATE field isn't set
by drivers it is decoded by aubinator (though sometimes not correctly :-/)
and may be useful to keep around for that reason.

Note: Neither of those is a NAK. :-)
On Wednesday, December 12, 2018 9:09:54 AM PST Jason Ekstrand wrote:
> On Tue, Dec 11, 2018 at 10:31 PM Kenneth Graunke <kenneth@whitecape.org>
> wrote:
> 
> > When we first started using genxml, we decided to represent MOCS as an
> > actual structure, and pack values.  However, in many places, it was more
> > convenient to use a numeric value rather than treating it as a struct,
> > so we added secondary setters in a bunch of places as well.
> >
> > We were not entirely consistent, either.  Some places only had one.
> > Gen6 had both kinds of setters for STATE_BASE_ADDRESS, but newer gens
> > only had the struct-based setters.  The names were sometimes "Constant
> > Buffer Object Control State" instead of "Memory", making it harder to
> > find.  Many had prefixes like "Vertex Buffer MOCS"...in a vertex buffer
> > packet...which is a bit redundant.
> >
> > On modern hardware, MOCS is simply an index into a table, but we were
> > still carrying around the structure with an "Index to MOCS Table" field,
> > in addition to the direct numeric setters.  This is clunky - we really
> > just want a number on new hardware.
> >
> 
> This gets a bit sticky because the "Index to MOCS Table" field starts at
> bit 1 not 0 so the MOCS value in your patch isn't actually the index, it's
> index * 2.  Do we want to "fix" this and make the MOCS value the thing we
> actually want on gen9+?
> 
> --Jason

That's a good point.  It's not great either way, but...

Adjusting the MOCS fields in the XML by 1-bit could be confusing when
reading the XML.  But, the decoder would see the correct index, rather
than 2x the index.  So, that does seem better?

I'll probably go with this for now but I'd be happy to shift things
by a bit and fix the numeric values to be real indices on Gen9+.

--Ken
On Wednesday, December 12, 2018 9:17:38 AM PST Jason Ekstrand wrote:
> On Wed, Dec 12, 2018 at 11:09 AM Jason Ekstrand <jason@jlekstrand.net>
> wrote:
> 
> > On Tue, Dec 11, 2018 at 10:31 PM Kenneth Graunke <kenneth@whitecape.org>
> > wrote:
> >
> >> When we first started using genxml, we decided to represent MOCS as an
> >> actual structure, and pack values.  However, in many places, it was more
> >> convenient to use a numeric value rather than treating it as a struct,
> >> so we added secondary setters in a bunch of places as well.
> >>
> >> We were not entirely consistent, either.  Some places only had one.
> >> Gen6 had both kinds of setters for STATE_BASE_ADDRESS, but newer gens
> >> only had the struct-based setters.  The names were sometimes "Constant
> >> Buffer Object Control State" instead of "Memory", making it harder to
> >> find.  Many had prefixes like "Vertex Buffer MOCS"...in a vertex buffer
> >> packet...which is a bit redundant.
> >>
> >> On modern hardware, MOCS is simply an index into a table, but we were
> >> still carrying around the structure with an "Index to MOCS Table" field,
> >> in addition to the direct numeric setters.  This is clunky - we really
> >> just want a number on new hardware.
> >>
> >
> > This gets a bit sticky because the "Index to MOCS Table" field starts at
> > bit 1 not 0 so the MOCS value in your patch isn't actually the index, it's
> > index * 2.  Do we want to "fix" this and make the MOCS value the thing we
> > actually want on gen9+?
> >
> 
> One other comment:  While the MEMORY_OBJECT_CONTROL_STATE field isn't set
> by drivers it is decoded by aubinator (though sometimes not correctly :-/)
> and may be useful to keep around for that reason.
> 
> Note: Neither of those is a NAK. :-)

On Gen6-8, that may be true.  But, I always found the MOCS printouts to
be confusing and mess up the flow of the decode:

0xffffffffe60001f0:  0x78060003:  3DSTATE_STENCIL_BUFFER                        
                                  
0xffffffffe60001f0:  0x78060003 : Dword 0
    DWord Length: 3
0xffffffffe60001f4:  0x00000000 : Dword 1
    Surface Pitch: 0
    Stencil Buffer MOCS: 0
    Stencil Buffer Object Control State: <struct MEMORY_OBJECT_CONTROL_STATE>
0xffffffffe60001f4:  0x00000000 : Dword 0
    Index to MOCS Tables: 0
    Stencil Buffer Enable: false

Suddenly, we're in Dword 0...of a field in Dword 1 of the packet?  And
we print one field...but then we're right back to printing the parent
structure fields.  (I guess we could print substructures better.)

In the meantime, the new output does flow better:

0xffffffffe60001f0:  0x78060003:  3DSTATE_STENCIL_BUFFER                                                          
0xffffffffe60001f0:  0x78060003 : Dword 0
    DWord Length: 3
0xffffffffe60001f4:  0x00000000 : Dword 1
    Surface Pitch: 0
    MOCS: 0
    Stencil Buffer Enable: false
0xffffffffe60001f8:  0x00000000 : Dword 2
0xffffffffe60001fc:  0x00000000 : Dword 3
    Surface Base Address: 0x00000000
0xffffffffe6000200:  0x00000000 : Dword 4
    Surface QPitch: 0

Reading STATE_BASE_ADDRESS was especially bad, and now it's mostly OK.

Of course, you can still compare the numeric value against MOCS defines
in the codebase to tell which one it's using.  I suspect what we really
want for nice decoding is not a structure, or a uint, but a genxml enum
value.  We'd just have MOCS_WB, MOCS_PTE, MOCS_L3, or whatever other few
options we actually use, and print that.

--Ken