diff options
Diffstat (limited to 'src/intel')
-rw-r--r-- | src/intel/genxml/gen9.xml | 8 | ||||
-rw-r--r-- | src/intel/vulkan/genX_cmd_buffer.c | 21 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/intel/genxml/gen9.xml b/src/intel/genxml/gen9.xml index 1422463693d..f07ed748ac7 100644 --- a/src/intel/genxml/gen9.xml +++ b/src/intel/genxml/gen9.xml @@ -3710,6 +3710,14 @@ <field name="Color Compression Disable Mask" start="31" end="31" type="bool"/> </register> + <register name="SLICE_COMMON_ECO_CHICKEN1" length="1" num="0x731c"> + <field name="GLK Barrier Mode" start="7" end="7" type="uint"> + <value name="GLK_BARRIER_MODE_GPGPU" value="0"/> + <value name="GLK_BARRIER_MODE_3D_HULL" value="1"/> + </field> + <field name="GLK Barrier Mode Mask" start="23" end="23" type="bool"/> + </register> + <register name="GFX_ARB_ERROR_RPT" length="1" num="0x40a0"> <field name="TLB Page Fault Error" start="0" end="0" type="bool"/> <field name="RSTRM PAVP Read Invalid" start="1" end="1" type="bool"/> diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index b7253d52513..ac95f3ad05a 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -2734,6 +2734,8 @@ static void genX(flush_pipeline_select)(struct anv_cmd_buffer *cmd_buffer, uint32_t pipeline) { + UNUSED const struct gen_device_info *devinfo = &cmd_buffer->device->info; + if (cmd_buffer->state.current_pipeline == pipeline) return; @@ -2784,6 +2786,25 @@ genX(flush_pipeline_select)(struct anv_cmd_buffer *cmd_buffer, ps.PipelineSelection = pipeline; } +#if GEN_GEN == 9 + if (devinfo->is_geminilake) { + /* Project: DevGLK + * + * "This chicken bit works around a hardware issue with barrier logic + * encountered when switching between GPGPU and 3D pipelines. To + * workaround the issue, this mode bit should be set after a pipeline + * is selected." + */ + uint32_t scec; + anv_pack_struct(&scec, GENX(SLICE_COMMON_ECO_CHICKEN1), + .GLKBarrierMode = + pipeline == GPGPU ? GLK_BARRIER_MODE_GPGPU + : GLK_BARRIER_MODE_3D_HULL, + .GLKBarrierModeMask = 1); + emit_lri(&cmd_buffer->batch, GENX(SLICE_COMMON_ECO_CHICKEN1_num), scec); + } +#endif + cmd_buffer->state.current_pipeline = pipeline; } |