pvr: Extract setup of winsys job submit flags into separate functions

Signed-off-by: Matt Coster <matt.coster@imgtec.com>
Reviewed-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20545>
This commit is contained in:
Matt Coster
2022-12-05 15:29:43 +00:00
committed by Marge Bot
parent 9bf525b4bd
commit 85155e389e
2 changed files with 55 additions and 37 deletions

View File

@@ -160,6 +160,22 @@ static void pvr_submit_info_ext_stream_init(
submit_info->fw_ext_stream_len = 0;
}
static void
pvr_submit_info_flags_init(const struct pvr_device_info *const dev_info,
const struct pvr_sub_cmd_compute *const sub_cmd,
uint32_t *const flags)
{
*flags = 0;
if (sub_cmd->uses_barrier)
*flags |= PVR_WINSYS_COMPUTE_FLAG_PREVENT_ALL_OVERLAP;
if (PVR_HAS_FEATURE(dev_info, gpu_multicore_support) &&
sub_cmd->uses_atomic_ops) {
*flags |= PVR_WINSYS_COMPUTE_FLAG_SINGLE_CORE;
}
}
static void pvr_compute_job_ws_submit_info_init(
struct pvr_compute_ctx *ctx,
struct pvr_sub_cmd_compute *sub_cmd,
@@ -185,14 +201,7 @@ static void pvr_compute_job_ws_submit_info_init(
pvr_submit_info_stream_init(ctx, sub_cmd, submit_info);
pvr_submit_info_ext_stream_init(ctx, submit_info);
if (sub_cmd->uses_barrier)
submit_info->flags |= PVR_WINSYS_COMPUTE_FLAG_PREVENT_ALL_OVERLAP;
if (PVR_HAS_FEATURE(dev_info, gpu_multicore_support) &&
sub_cmd->uses_atomic_ops) {
submit_info->flags |= PVR_WINSYS_COMPUTE_FLAG_SINGLE_CORE;
}
pvr_submit_info_flags_init(dev_info, sub_cmd, &submit_info->flags);
}
VkResult pvr_compute_job_submit(struct pvr_compute_ctx *ctx,

View File

@@ -1261,6 +1261,21 @@ pvr_geom_state_stream_ext_init(struct pvr_render_ctx *ctx,
state->fw_ext_stream_len = 0;
}
static void pvr_geom_state_flags_init(const struct pvr_render_job *const job,
uint32_t *const flags)
{
*flags = 0;
if (!job->rt_dataset->need_frag)
*flags |= PVR_WINSYS_GEOM_FLAG_FIRST_GEOMETRY;
if (job->geometry_terminate)
*flags |= PVR_WINSYS_GEOM_FLAG_LAST_GEOMETRY;
if (job->frag_uses_atomic_ops)
*flags |= PVR_WINSYS_GEOM_FLAG_SINGLE_CORE;
}
static void
pvr_render_job_ws_geometry_state_init(struct pvr_render_ctx *ctx,
struct pvr_render_job *job,
@@ -1268,17 +1283,7 @@ pvr_render_job_ws_geometry_state_init(struct pvr_render_ctx *ctx,
{
pvr_geom_state_stream_init(ctx, job, state);
pvr_geom_state_stream_ext_init(ctx, job, state);
state->flags = 0;
if (!job->rt_dataset->need_frag)
state->flags |= PVR_WINSYS_GEOM_FLAG_FIRST_GEOMETRY;
if (job->geometry_terminate)
state->flags |= PVR_WINSYS_GEOM_FLAG_LAST_GEOMETRY;
if (job->frag_uses_atomic_ops)
state->flags |= PVR_WINSYS_GEOM_FLAG_SINGLE_CORE;
pvr_geom_state_flags_init(job, &state->flags);
}
static inline void
@@ -1655,6 +1660,27 @@ pvr_frag_state_stream_ext_init(struct pvr_render_ctx *ctx,
state->fw_ext_stream_len = 0;
}
static void pvr_frag_state_flags_init(const struct pvr_render_job *const job,
uint32_t *const flags)
{
*flags = 0;
if (job->has_depth_attachment)
*flags |= PVR_WINSYS_FRAG_FLAG_DEPTH_BUFFER_PRESENT;
if (job->has_stencil_attachment)
*flags |= PVR_WINSYS_FRAG_FLAG_STENCIL_BUFFER_PRESENT;
if (job->disable_compute_overlap)
*flags |= PVR_WINSYS_FRAG_FLAG_PREVENT_CDM_OVERLAP;
if (job->frag_uses_atomic_ops)
*flags |= PVR_WINSYS_FRAG_FLAG_SINGLE_CORE;
if (job->get_vis_results)
*flags |= PVR_WINSYS_FRAG_FLAG_GET_VIS_RESULTS;
}
static void
pvr_render_job_ws_fragment_state_init(struct pvr_render_ctx *ctx,
struct pvr_render_job *job,
@@ -1664,24 +1690,7 @@ pvr_render_job_ws_fragment_state_init(struct pvr_render_ctx *ctx,
pvr_frag_state_stream_init(ctx, job, state);
pvr_frag_state_stream_ext_init(ctx, job, state);
/* FIXME: move to its own function? */
state->flags = 0;
if (job->has_depth_attachment)
state->flags |= PVR_WINSYS_FRAG_FLAG_DEPTH_BUFFER_PRESENT;
if (job->has_stencil_attachment)
state->flags |= PVR_WINSYS_FRAG_FLAG_STENCIL_BUFFER_PRESENT;
if (job->disable_compute_overlap)
state->flags |= PVR_WINSYS_FRAG_FLAG_PREVENT_CDM_OVERLAP;
if (job->frag_uses_atomic_ops)
state->flags |= PVR_WINSYS_FRAG_FLAG_SINGLE_CORE;
if (job->get_vis_results)
state->flags |= PVR_WINSYS_FRAG_FLAG_GET_VIS_RESULTS;
pvr_frag_state_flags_init(job, &state->flags);
}
static void pvr_render_job_ws_submit_info_init(