[Mesa-dev] [PATCH 09/20] anv/pipeline: Make emit_3dstate_sbe safe to call without a FS

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


---
 src/intel/vulkan/gen7_pipeline.c      | 5 +----
 src/intel/vulkan/gen8_pipeline.c      | 3 +--
 src/intel/vulkan/genX_pipeline_util.h | 8 ++++++++
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/intel/vulkan/gen7_pipeline.c b/src/intel/vulkan/gen7_pipeline.c
index 52577f5..3765d14 100644
--- a/src/intel/vulkan/gen7_pipeline.c
+++ b/src/intel/vulkan/gen7_pipeline.c
@@ -106,10 +106,9 @@ genX(graphics_pipeline_create)(
 
    emit_3dstate_vs(pipeline);
    emit_3dstate_gs(pipeline);
+   emit_3dstate_sbe(pipeline);
 
    if (!anv_pipeline_has_stage(pipeline, MESA_SHADER_FRAGMENT)) {
-      anv_batch_emit(&pipeline->batch, GENX(3DSTATE_SBE), sbe);
-
       anv_batch_emit(&pipeline->batch, GENX(3DSTATE_WM), wm) {
          wm.StatisticsEnable                    = true;
          wm.ThreadDispatchEnable                = false;
@@ -136,8 +135,6 @@ genX(graphics_pipeline_create)(
       if (wm_prog_data->urb_setup[VARYING_SLOT_PRIMITIVE_ID] != -1)
          anv_finishme("primitive_id needs sbe swizzling setup");
 
-      emit_3dstate_sbe(pipeline);
-
       anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PS), ps) {
          ps.KernelStartPointer0           = fs_bin->kernel.offset;
          ps.KernelStartPointer1           = 0;
diff --git a/src/intel/vulkan/gen8_pipeline.c b/src/intel/vulkan/gen8_pipeline.c
index 5816bd4..f2499dc 100644
--- a/src/intel/vulkan/gen8_pipeline.c
+++ b/src/intel/vulkan/gen8_pipeline.c
@@ -111,6 +111,7 @@ genX(graphics_pipeline_create)(
 
    emit_3dstate_gs(pipeline);
    emit_3dstate_vs(pipeline);
+   emit_3dstate_sbe(pipeline);
 
    const int num_thread_bias = GEN_GEN == 8 ? 2 : 1;
    if (!anv_pipeline_has_stage(pipeline, MESA_SHADER_FRAGMENT)) {
@@ -122,8 +123,6 @@ genX(graphics_pipeline_create)(
       const struct anv_shader_bin *fs_bin =
          pipeline->shaders[MESA_SHADER_FRAGMENT];
 
-      emit_3dstate_sbe(pipeline);
-
       anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PS), ps) {
          ps.KernelStartPointer0     = fs_bin->kernel.offset;
          ps.KernelStartPointer1     = 0;
diff --git a/src/intel/vulkan/genX_pipeline_util.h b/src/intel/vulkan/genX_pipeline_util.h
index 515cc9a..3906529 100644
--- a/src/intel/vulkan/genX_pipeline_util.h
+++ b/src/intel/vulkan/genX_pipeline_util.h
@@ -366,6 +366,14 @@ emit_3dstate_sbe(struct anv_pipeline *pipeline)
    const struct brw_wm_prog_data *wm_prog_data = get_wm_prog_data(pipeline);
    const struct brw_vue_map *fs_input_map;
 
+   if (!anv_pipeline_has_stage(pipeline, MESA_SHADER_FRAGMENT)) {
+      anv_batch_emit(&pipeline->batch, GENX(3DSTATE_SBE), sbe);
+#if GEN_GEN >= 8
+      anv_batch_emit(&pipeline->batch, GENX(3DSTATE_SBE_SWIZ), sbe);
+#endif
+      return;
+   }
+
    if (gs_prog_data)
       fs_input_map = &gs_prog_data->base.vue_map;
    else
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list