[Mesa-dev] [PATCH 6/6] anv/pipeline: Add support for early depth stencil

Jason Ekstrand jason at jlekstrand.net
Thu Jun 2 03:56:58 UTC 2016


Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
Cc: "12.0" <mesa-stable at lists.freedesktop.org>
---
 src/intel/vulkan/gen7_pipeline.c | 10 +++++++++-
 src/intel/vulkan/gen8_pipeline.c |  9 ++++++++-
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/intel/vulkan/gen7_pipeline.c b/src/intel/vulkan/gen7_pipeline.c
index a53bdc4..f069db9 100644
--- a/src/intel/vulkan/gen7_pipeline.c
+++ b/src/intel/vulkan/gen7_pipeline.c
@@ -365,12 +365,20 @@ genX(graphics_pipeline_create)(
          wm.ThreadDispatchEnable                = true;
          wm.LineEndCapAntialiasingRegionWidth   = 0; /* 0.5 pixels */
          wm.LineAntialiasingRegionWidth         = 1; /* 1.0 pixels */
-         wm.EarlyDepthStencilControl            = EDSC_NORMAL;
          wm.PointRasterizationRule              = RASTRULE_UPPER_RIGHT;
          wm.PixelShaderComputedDepthMode        = wm_prog_data->computed_depth_mode;
          wm.PixelShaderUsesSourceDepth          = wm_prog_data->uses_src_depth;
          wm.PixelShaderUsesSourceW              = wm_prog_data->uses_src_w;
          wm.PixelShaderUsesInputCoverageMask    = wm_prog_data->uses_sample_mask;
+
+         if (wm_prog_data->early_fragment_tests) {
+            wm.EarlyDepthStencilControl         = EDSC_PREPS;
+         } else if (wm_prog_data->has_side_effects) {
+            wm.EarlyDepthStencilControl         = EDSC_PSEXEC;
+         } else {
+            wm.EarlyDepthStencilControl         = EDSC_NORMAL;
+         }
+
          wm.BarycentricInterpolationMode        = wm_prog_data->barycentric_interp_modes;
       }
    }
diff --git a/src/intel/vulkan/gen8_pipeline.c b/src/intel/vulkan/gen8_pipeline.c
index 77c81f4..1300c0d 100644
--- a/src/intel/vulkan/gen8_pipeline.c
+++ b/src/intel/vulkan/gen8_pipeline.c
@@ -329,10 +329,17 @@ genX(graphics_pipeline_create)(
       wm.StatisticsEnable                    = true;
       wm.LineEndCapAntialiasingRegionWidth   = _05pixels;
       wm.LineAntialiasingRegionWidth         = _10pixels;
-      wm.EarlyDepthStencilControl            = NORMAL;
       wm.ForceThreadDispatchEnable           = NORMAL;
       wm.PointRasterizationRule              = RASTRULE_UPPER_RIGHT;
 
+      if (wm_prog_data && wm_prog_data->early_fragment_tests) {
+         wm.EarlyDepthStencilControl         = PREPS;
+      } else if (wm_prog_data && wm_prog_data->has_side_effects) {
+         wm.EarlyDepthStencilControl         = PSEXEC;
+      } else {
+         wm.EarlyDepthStencilControl         = NORMAL;
+      }
+
       wm.BarycentricInterpolationMode = pipeline->ps_ksp0 == NO_KERNEL ?
          0 : wm_prog_data->barycentric_interp_modes;
    }
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list