diff --git a/src/intel/genxml/gen125.xml b/src/intel/genxml/gen125.xml index bbf0a257992..b2b6567cf77 100644 --- a/src/intel/genxml/gen125.xml +++ b/src/intel/genxml/gen125.xml @@ -1764,6 +1764,7 @@ + diff --git a/src/intel/vulkan/anv_genX.h b/src/intel/vulkan/anv_genX.h index 94cb208a103..477f1688353 100644 --- a/src/intel/vulkan/anv_genX.h +++ b/src/intel/vulkan/anv_genX.h @@ -90,7 +90,8 @@ void genX(cmd_buffer_emit_hashing_mode)(struct anv_cmd_buffer *cmd_buffer, void genX(flush_pipeline_select_3d)(struct anv_cmd_buffer *cmd_buffer); void genX(flush_pipeline_select_gpgpu)(struct anv_cmd_buffer *cmd_buffer); -void genX(emit_pipeline_select)(struct anv_batch *batch, uint32_t pipeline); +void genX(emit_pipeline_select)(struct anv_batch *batch, uint32_t pipeline, + const struct anv_device *device); void genX(apply_task_urb_workaround)(struct anv_cmd_buffer *cmd_buffer); diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 71ba9f0a46c..e8b992d020a 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -6815,14 +6815,23 @@ genX(CmdTraceRaysIndirect2KHR)( * flush_pipeline_select() */ void -genX(emit_pipeline_select)(struct anv_batch *batch, uint32_t pipeline) +genX(emit_pipeline_select)(struct anv_batch *batch, uint32_t pipeline, + const struct anv_device *device) { anv_batch_emit(batch, GENX(PIPELINE_SELECT), ps) { - ps.MaskBits = GFX_VER == 12 ? 0x13 : 0x3; + ps.MaskBits = GFX_VERx10 >= 125 ? 0x93 : GFX_VER >= 12 ? 0x13 : 0x3; #if GFX_VER == 12 ps.MediaSamplerDOPClockGateEnable = true; #endif ps.PipelineSelection = pipeline; +#if GFX_VERx10 == 125 + /* It might still be better to only enable this when the compute + * pipeline will have DPAS instructions. + */ + ps.SystolicModeEnable = pipeline == GPGPU && + device->vk.enabled_extensions.KHR_cooperative_matrix && + device->vk.enabled_features.cooperativeMatrix; +#endif } } @@ -6972,7 +6981,7 @@ genX(flush_pipeline_select)(struct anv_cmd_buffer *cmd_buffer, } #endif - genX(emit_pipeline_select)(&cmd_buffer->batch, pipeline); + genX(emit_pipeline_select)(&cmd_buffer->batch, pipeline, cmd_buffer->device); #if GFX_VER == 9 if (devinfo->platform == INTEL_PLATFORM_GLK) { diff --git a/src/intel/vulkan/genX_gpu_memcpy.c b/src/intel/vulkan/genX_gpu_memcpy.c index 742aea1fa83..5e78d2ab387 100644 --- a/src/intel/vulkan/genX_gpu_memcpy.c +++ b/src/intel/vulkan/genX_gpu_memcpy.c @@ -256,7 +256,7 @@ genX(emit_so_memcpy_init)(struct anv_memcpy_state *state, const struct intel_l3_config *cfg = intel_get_default_l3_config(device->info); genX(emit_l3_config)(batch, device, cfg); - genX(emit_pipeline_select)(batch, _3D); + genX(emit_pipeline_select)(batch, _3D, device); emit_common_so_memcpy(batch, device, cfg); } diff --git a/src/intel/vulkan/genX_init_state.c b/src/intel/vulkan/genX_init_state.c index b4757376b7e..f4892d687b4 100644 --- a/src/intel/vulkan/genX_init_state.c +++ b/src/intel/vulkan/genX_init_state.c @@ -352,7 +352,7 @@ init_render_queue_state(struct anv_queue *queue, bool is_companion_rcs_batch) }; GENX(VERTEX_ELEMENT_STATE_pack)(NULL, device->empty_vs_input, &empty_ve); - genX(emit_pipeline_select)(&batch, _3D); + genX(emit_pipeline_select)(&batch, _3D, device); #if GFX_VER == 9 anv_batch_write_reg(&batch, GENX(CACHE_MODE_1), cm1) { @@ -595,7 +595,7 @@ init_render_queue_state(struct anv_queue *queue, bool is_companion_rcs_batch) ANV_NULL_ADDRESS, 0, ANV_PIPE_FLUSH_BITS | ANV_PIPE_INVALIDATE_BITS); - genX(emit_pipeline_select)(&batch, GPGPU); + genX(emit_pipeline_select)(&batch, GPGPU, device); anv_batch_emit(&batch, GENX(CFE_STATE), cfe) { cfe.MaximumNumberofThreads = devinfo->max_cs_threads * devinfo->subslice_total; @@ -604,7 +604,7 @@ init_render_queue_state(struct anv_queue *queue, bool is_companion_rcs_batch) ANV_NULL_ADDRESS, 0, ANV_PIPE_FLUSH_BITS | ANV_PIPE_INVALIDATE_BITS); - genX(emit_pipeline_select)(&batch, _3D); + genX(emit_pipeline_select)(&batch, _3D, device); #endif anv_batch_emit(&batch, GENX(MI_BATCH_BUFFER_END), bbe); @@ -628,7 +628,7 @@ init_compute_queue_state(struct anv_queue *queue) .end = (void *) cmds + sizeof(cmds), }; - genX(emit_pipeline_select)(&batch, GPGPU); + genX(emit_pipeline_select)(&batch, GPGPU, queue->device); #if GFX_VER == 12 if (queue->device->info->has_aux_map) {