diff --git a/src/imagination/vulkan/pvr_job_transfer.c b/src/imagination/vulkan/pvr_job_transfer.c index 30effb0568b..96988f35062 100644 --- a/src/imagination/vulkan/pvr_job_transfer.c +++ b/src/imagination/vulkan/pvr_job_transfer.c @@ -5038,6 +5038,17 @@ pvr_submit_info_stream_init(struct pvr_transfer_ctx *ctx, assert(cmd->fw_stream_len <= ARRAY_SIZE(cmd->fw_stream)); } +static void +pvr_submit_info_flags_init(const struct pvr_device_info *const dev_info, + const struct pvr_transfer_prep_data *const prep_data, + uint32_t *const flags) +{ + *flags = prep_data->flags; + + if (PVR_HAS_FEATURE(dev_info, gpu_multicore_support)) + *flags |= PVR_WINSYS_TRANSFER_FLAG_SINGLE_CORE; +} + static void pvr_transfer_job_ws_submit_info_init( struct pvr_transfer_ctx *ctx, struct pvr_transfer_submit *submit, @@ -5045,6 +5056,7 @@ static void pvr_transfer_job_ws_submit_info_init( struct pvr_winsys_transfer_submit_info *submit_info) { const struct pvr_device *const device = ctx->device; + const struct pvr_device_info *const dev_info = &device->pdevice->dev_info; submit_info->frame_num = device->global_queue_present_count; submit_info->job_num = device->global_cmd_buffer_submit_count; @@ -5056,8 +5068,7 @@ static void pvr_transfer_job_ws_submit_info_init( struct pvr_transfer_prep_data *prep_data = &submit->prep_array[i]; pvr_submit_info_stream_init(ctx, prep_data, cmd); - - cmd->flags = prep_data->flags; + pvr_submit_info_flags_init(dev_info, prep_data, &cmd->flags); } } diff --git a/src/imagination/vulkan/winsys/pvr_winsys.h b/src/imagination/vulkan/winsys/pvr_winsys.h index 08d4989ed55..469d41dea3e 100644 --- a/src/imagination/vulkan/winsys/pvr_winsys.h +++ b/src/imagination/vulkan/winsys/pvr_winsys.h @@ -251,6 +251,8 @@ struct pvr_winsys_transfer_ctx { struct pvr_winsys *ws; }; +#define PVR_WINSYS_TRANSFER_FLAG_SINGLE_CORE BITFIELD_BIT(0U) + #define PVR_TRANSFER_MAX_PREPARES_PER_SUBMIT 16U #define PVR_TRANSFER_MAX_RENDER_TARGETS 3U diff --git a/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_transfer.c b/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_transfer.c index 3e925f30270..31daa6925d6 100644 --- a/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_transfer.c +++ b/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_transfer.c @@ -228,6 +228,9 @@ static void pvr_srv_transfer_cmds_init( submit_cmd->fw_stream, submit_cmd->fw_stream_len, dev_info); + + if (submit_info->cmds[i].flags & PVR_WINSYS_TRANSFER_FLAG_SINGLE_CORE) + cmd->flags |= ROGUE_FWIF_CMDTRANSFER_SINGLE_CORE; } }