anv/pipeline: Implement the depth compare EQUAL workaround on gen8+
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 5 Mar 2016 17:19:01 +0000 (09:19 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sat, 5 Mar 2016 17:59:28 +0000 (09:59 -0800)
src/intel/vulkan/gen8_pipeline.c

index e8a067851cc6532ab86614231d20ca5cfe3cc5e4..4a5e86741890970a6d4b3d7d1d747435855a4663 100644 (file)
@@ -238,6 +238,14 @@ emit_ds_state(struct anv_pipeline *pipeline,
       .BackfaceStencilTestFunction = vk_to_gen_compare_op[info->back.compareOp],
    };
 
+   /* From the Broadwell PRM:
+    *
+    *    "If Depth_Test_Enable = 1 AND Depth_Test_func = EQUAL, the
+    *    Depth_Write_Enable must be set to 0."
+    */
+   if (info->depthTestEnable && info->depthCompareOp == VK_COMPARE_OP_EQUAL)
+      wm_depth_stencil.DepthBufferWriteEnable = false;
+
    GENX(3DSTATE_WM_DEPTH_STENCIL_pack)(NULL, dw, &wm_depth_stencil);
 }