genxml: Make gen6-7 blending look more like gen8
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 15 Jul 2016 00:52:07 +0000 (17:52 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 15 Jul 2016 22:48:21 +0000 (15:48 -0700)
This renames BLEND_STATE to BLEND_STATE_ENTRY and adds an new struct
BLEND_STATE which is just an array of 8 BLEND_STATE_ENTRYs.  This will make
it much easier to write gen-agnostic blend handling code.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
src/intel/genxml/gen6.xml
src/intel/genxml/gen7.xml
src/intel/genxml/gen75.xml
src/intel/vulkan/gen7_pipeline.c

index 44e28048ac5b621faecf72f03f08784f2ff565a4..dd682dda660dff0f075eff2643201093a3bfc5c7 100644 (file)
@@ -79,7 +79,7 @@
     </group>
   </struct>
 
-  <struct name="BLEND_STATE" length="2">
+  <struct name="BLEND_STATE_ENTRY" length="2">
     <field name="Color Buffer Blend Enable" start="31" end="31" type="bool"/>
     <field name="Independent Alpha Blend Enable" start="30" end="30" type="bool"/>
     <field name="Alpha Blend Function" start="26" end="28" type="uint">
     <field name="Post-Blend Color Clamp Enable" start="32" end="32" type="bool"/>
   </struct>
 
+  <struct name="BLEND_STATE" length="16">
+    <group count="8" start="0" size="64">
+      <field name="Entry" start="0" end="63" type="BLEND_STATE_ENTRY"/>
+    </group>
+  </struct>
+
   <struct name="CC_VIEWPORT" length="2">
     <field name="Minimum Depth" start="0" end="31" type="float"/>
     <field name="Maximum Depth" start="32" end="63" type="float"/>
index 2bbfcb7606a8a8ba17de5051b7f5b8b5704d3654..156400116263fafbac80a929f51ce2417e689263 100644 (file)
     </group>
   </struct>
 
-  <struct name="BLEND_STATE" length="2">
+  <struct name="BLEND_STATE_ENTRY" length="2">
     <field name="Color Buffer Blend Enable" start="31" end="31" type="bool"/>
     <field name="Independent Alpha Blend Enable" start="30" end="30" type="bool"/>
     <field name="Alpha Blend Function" start="26" end="28" type="uint">
     <field name="Post-Blend Color Clamp Enable" start="32" end="32" type="bool"/>
   </struct>
 
+  <struct name="BLEND_STATE" length="16">
+    <group count="8" start="0" size="64">
+      <field name="Entry" start="0" end="63" type="BLEND_STATE_ENTRY"/>
+    </group>
+  </struct>
+
   <struct name="CC_VIEWPORT" length="2">
     <field name="Minimum Depth" start="0" end="31" type="float"/>
     <field name="Maximum Depth" start="32" end="63" type="float"/>
index 9ab432cacb038590cea68350068aa6658be296e0..d813b7b7be2c0910e4a8676bbb160aacf6b3b1fb 100644 (file)
     </group>
   </struct>
 
-  <struct name="BLEND_STATE" length="2">
+  <struct name="BLEND_STATE_ENTRY" length="2">
     <field name="Color Buffer Blend Enable" start="31" end="31" type="bool"/>
     <field name="Independent Alpha Blend Enable" start="30" end="30" type="bool"/>
     <field name="Alpha Blend Function" start="26" end="28" type="uint">
     <field name="Post-Blend Color Clamp Enable" start="32" end="32" type="bool"/>
   </struct>
 
+  <struct name="BLEND_STATE" length="16">
+    <group count="8" start="0" size="64">
+      <field name="Entry" start="0" end="63" type="BLEND_STATE_ENTRY"/>
+    </group>
+  </struct>
+
   <struct name="CC_VIEWPORT" length="2">
     <field name="Minimum Depth" start="0" end="31" type="float"/>
     <field name="Maximum Depth" start="32" end="63" type="float"/>
index 89cb51f891689db7050e9bc9cf465260831e8c31..dba24e78ac1beb3003f1ba6916a56f26fa599bb2 100644 (file)
@@ -86,17 +86,18 @@ gen7_emit_cb_state(struct anv_pipeline *pipeline,
       pipeline->blend_state =
          anv_state_pool_emit(&device->dynamic_state_pool,
             GENX(BLEND_STATE), 64,
-            .ColorBufferBlendEnable = false,
-            .WriteDisableAlpha = true,
-            .WriteDisableRed = true,
-            .WriteDisableGreen = true,
-            .WriteDisableBlue = true);
+            .Entry = { {
+               .ColorBufferBlendEnable = false,
+               .WriteDisableAlpha = true,
+               .WriteDisableRed = true,
+               .WriteDisableGreen = true,
+               .WriteDisableBlue = true
+            } });
    } else {
       const VkPipelineColorBlendAttachmentState *a = &info->pAttachments[0];
-      struct GENX(BLEND_STATE) blend = {
+      struct GENX(BLEND_STATE) blend = { .Entry = { {
          .AlphaToCoverageEnable = ms_info && ms_info->alphaToCoverageEnable,
          .AlphaToOneEnable = ms_info && ms_info->alphaToOneEnable,
-
          .LogicOpEnable = info->logicOpEnable,
          .LogicOpFunction = vk_to_gen_logic_op[info->logicOp],
          .ColorBufferBlendEnable = a->blendEnable,
@@ -113,7 +114,7 @@ gen7_emit_cb_state(struct anv_pipeline *pipeline,
          .WriteDisableRed = !(a->colorWriteMask & VK_COLOR_COMPONENT_R_BIT),
          .WriteDisableGreen = !(a->colorWriteMask & VK_COLOR_COMPONENT_G_BIT),
          .WriteDisableBlue = !(a->colorWriteMask & VK_COLOR_COMPONENT_B_BIT),
-      };
+      } } };
 
       /* Our hardware applies the blend factor prior to the blend function
        * regardless of what function is used.  Technically, this means the
@@ -123,13 +124,13 @@ gen7_emit_cb_state(struct anv_pipeline *pipeline,
        */
       if (a->colorBlendOp == VK_BLEND_OP_MIN ||
           a->colorBlendOp == VK_BLEND_OP_MAX) {
-         blend.SourceBlendFactor = BLENDFACTOR_ONE;
-         blend.DestinationBlendFactor = BLENDFACTOR_ONE;
+         blend.Entry[0].SourceBlendFactor = BLENDFACTOR_ONE;
+         blend.Entry[0].DestinationBlendFactor = BLENDFACTOR_ONE;
       }
       if (a->alphaBlendOp == VK_BLEND_OP_MIN ||
           a->alphaBlendOp == VK_BLEND_OP_MAX) {
-         blend.SourceAlphaBlendFactor = BLENDFACTOR_ONE;
-         blend.DestinationAlphaBlendFactor = BLENDFACTOR_ONE;
+         blend.Entry[0].SourceAlphaBlendFactor = BLENDFACTOR_ONE;
+         blend.Entry[0].DestinationAlphaBlendFactor = BLENDFACTOR_ONE;
       }
 
       pipeline->blend_state = anv_state_pool_alloc(&device->dynamic_state_pool,