From 9fa958e95b9ffd61283d20d5d14a0ac007c1def7 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 31 May 2016 20:16:01 -0700 Subject: [PATCH] anv/pipeline: Add support for early depth stencil Signed-off-by: Jason Ekstrand Reviewed-by: Kenneth Graunke Cc: "12.0" --- 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 a53bdc4314b..f069db99477 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 77c81f42106..1300c0d1dff 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.30.2