[Mesa-dev] [PATCH 14/20] anv/pipeline: Move 3DSTATE_PS_EXTRA setup into a helper

Jason Ekstrand jason at jlekstrand.net
Sat Nov 12 21:34:56 UTC 2016


---
 src/intel/vulkan/gen8_pipeline.c      | 28 +---------------------------
 src/intel/vulkan/genX_pipeline_util.h | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 27 deletions(-)

diff --git a/src/intel/vulkan/gen8_pipeline.c b/src/intel/vulkan/gen8_pipeline.c
index 78514da..1059c9c 100644
--- a/src/intel/vulkan/gen8_pipeline.c
+++ b/src/intel/vulkan/gen8_pipeline.c
@@ -89,38 +89,12 @@ genX(graphics_pipeline_create)(
                      pCreateInfo->pRasterizationState);
    emit_3dstate_streamout(pipeline, pCreateInfo->pRasterizationState);
 
-   const struct brw_wm_prog_data *wm_prog_data = get_wm_prog_data(pipeline);
-
    emit_3dstate_wm(pipeline, pCreateInfo->pMultisampleState);
    emit_3dstate_gs(pipeline);
    emit_3dstate_vs(pipeline);
    emit_3dstate_sbe(pipeline);
    emit_3dstate_ps(pipeline);
-
-   if (!anv_pipeline_has_stage(pipeline, MESA_SHADER_FRAGMENT)) {
-      anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PS_EXTRA), extra) {
-         extra.PixelShaderValid = false;
-      }
-   } else {
-
-      anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PS_EXTRA), ps) {
-         ps.PixelShaderValid              = true;
-         ps.PixelShaderKillsPixel         = wm_prog_data->uses_kill;
-         ps.PixelShaderComputedDepthMode  = wm_prog_data->computed_depth_mode;
-         ps.AttributeEnable               = wm_prog_data->num_varying_inputs > 0;
-         ps.oMaskPresenttoRenderTarget    = wm_prog_data->uses_omask;
-         ps.PixelShaderIsPerSample        = wm_prog_data->persample_dispatch;
-         ps.PixelShaderUsesSourceDepth    = wm_prog_data->uses_src_depth;
-         ps.PixelShaderUsesSourceW        = wm_prog_data->uses_src_w;
-#if GEN_GEN >= 9
-         ps.PixelShaderPullsBary    = wm_prog_data->pulls_bary;
-         ps.InputCoverageMaskState  = wm_prog_data->uses_sample_mask ?
-            ICMS_INNER_CONSERVATIVE : ICMS_NONE;
-#else
-         ps.PixelShaderUsesInputCoverageMask = wm_prog_data->uses_sample_mask;
-#endif
-      }
-   }
+   emit_3dstate_ps_extra(pipeline);
 
    *pPipeline = anv_pipeline_to_handle(pipeline);
 
diff --git a/src/intel/vulkan/genX_pipeline_util.h b/src/intel/vulkan/genX_pipeline_util.h
index f12226d..7402158 100644
--- a/src/intel/vulkan/genX_pipeline_util.h
+++ b/src/intel/vulkan/genX_pipeline_util.h
@@ -1257,4 +1257,36 @@ emit_3dstate_ps(struct anv_pipeline *pipeline)
    }
 }
 
+#if GEN_GEN >= 8
+static void
+emit_3dstate_ps_extra(struct anv_pipeline *pipeline)
+{
+   const struct brw_wm_prog_data *wm_prog_data = get_wm_prog_data(pipeline);
+
+   if (!anv_pipeline_has_stage(pipeline, MESA_SHADER_FRAGMENT)) {
+      anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PS_EXTRA), ps);
+      return;
+   }
+
+   anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PS_EXTRA), ps) {
+      ps.PixelShaderValid              = true;
+      ps.AttributeEnable               = wm_prog_data->num_varying_inputs > 0;
+      ps.oMaskPresenttoRenderTarget    = wm_prog_data->uses_omask;
+      ps.PixelShaderIsPerSample        = wm_prog_data->persample_dispatch;
+      ps.PixelShaderKillsPixel         = wm_prog_data->uses_kill;
+      ps.PixelShaderComputedDepthMode  = wm_prog_data->computed_depth_mode;
+      ps.PixelShaderUsesSourceDepth    = wm_prog_data->uses_src_depth;
+      ps.PixelShaderUsesSourceW        = wm_prog_data->uses_src_w;
+
+#if GEN_GEN >= 9
+      ps.PixelShaderPullsBary    = wm_prog_data->pulls_bary;
+      ps.InputCoverageMaskState  = wm_prog_data->uses_sample_mask ?
+                                   ICMS_INNER_CONSERVATIVE : ICMS_NONE;
+#else
+      ps.PixelShaderUsesInputCoverageMask = wm_prog_data->uses_sample_mask;
+#endif
+   }
+}
+#endif
+
 #endif /* GENX_PIPELINE_UTIL_H */
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list