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:
@@ -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,
|
||||
|
@@ -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(
|
||||
|
Reference in New Issue
Block a user