From 5a10ab8a1562e0217b916618d30cb23165b2c679 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Sat, 12 Nov 2016 10:58:48 -0800 Subject: [PATCH] anv/pipeline: Make emit_3dstate_sbe safe to call without a FS Reviewed-by: Kristian H. Kristensen Reviewed-by: Timothy Arceri --- 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 52577f5ecae..3765d14b909 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 5816bd42284..f2499dc0f53 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 515cc9a0a48..3906529713f 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.30.2