mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 05:48:07 +02:00
pvr: prepare pvr_winsys_render_ctx_create_info for multi-arch
Reviewed-by: Ashish Chauhan <ashish.chauhan@imgtec.com Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39348>
This commit is contained in:
parent
2736dd1220
commit
a98e22d0f7
5 changed files with 43 additions and 21 deletions
|
|
@ -771,7 +771,7 @@ pvr_rogue_get_geom_state_stream_out_words(struct pvr_pds_upload *pds_program,
|
|||
|
||||
static void pvr_render_ctx_ws_static_state_init(
|
||||
struct pvr_render_ctx *ctx,
|
||||
struct pvr_winsys_render_ctx_static_state *static_state)
|
||||
struct PVR_PER_ARCH(winsys_render_ctx_static_state) * static_state)
|
||||
{
|
||||
uint64_t *q_dst;
|
||||
uint32_t *d_dst;
|
||||
|
|
@ -850,7 +850,11 @@ static void pvr_render_ctx_ws_create_info_init(
|
|||
create_info->priority = priority;
|
||||
create_info->vdm_callstack_addr = ctx->vdm_callstack_bo->vma->dev_addr;
|
||||
|
||||
pvr_render_ctx_ws_static_state_init(ctx, &create_info->static_state);
|
||||
#if defined(PVR_BUILD_ARCH_ROGUE)
|
||||
pvr_render_ctx_ws_static_state_init(ctx, &create_info->static_state.rogue);
|
||||
#else
|
||||
# error "Missing arch"
|
||||
#endif
|
||||
}
|
||||
|
||||
VkResult pvr_arch_render_ctx_create(struct pvr_device *device,
|
||||
|
|
|
|||
|
|
@ -143,12 +143,16 @@ void pvr_drm_winsys_free_list_destroy(struct pvr_winsys_free_list *free_list)
|
|||
}
|
||||
|
||||
static void pvr_drm_render_ctx_static_state_init(
|
||||
enum pvr_device_arch arch,
|
||||
struct pvr_winsys_render_ctx_create_info *create_info,
|
||||
uint8_t *stream_ptr_start,
|
||||
uint32_t *stream_len_ptr)
|
||||
{
|
||||
struct pvr_winsys_render_ctx_static_state *ws_static_state =
|
||||
&create_info->static_state;
|
||||
/* TODO: handle non-rogue GPUs */
|
||||
assert(arch == PVR_DEVICE_ARCH_ROGUE);
|
||||
struct pvr_rogue_winsys_render_ctx_static_state *ws_static_state =
|
||||
&create_info->static_state.rogue;
|
||||
|
||||
uint64_t *stream_ptr = (uint64_t *)stream_ptr_start;
|
||||
|
||||
/* Leave space for stream header. */
|
||||
|
|
@ -231,7 +235,8 @@ VkResult pvr_drm_winsys_render_ctx_create(
|
|||
goto err_free_ctx;
|
||||
}
|
||||
|
||||
pvr_drm_render_ctx_static_state_init(create_info,
|
||||
pvr_drm_render_ctx_static_state_init(dev_info->ident.arch,
|
||||
create_info,
|
||||
static_ctx_state_fw_stream,
|
||||
&ctx_args.static_context_state_len);
|
||||
|
||||
|
|
|
|||
|
|
@ -190,19 +190,21 @@ struct pvr_winsys_render_ctx_create_info {
|
|||
enum pvr_winsys_ctx_priority priority;
|
||||
pvr_dev_addr_t vdm_callstack_addr;
|
||||
|
||||
struct pvr_winsys_render_ctx_static_state {
|
||||
uint64_t vdm_ctx_state_base_addr;
|
||||
uint64_t geom_ctx_state_base_addr;
|
||||
union {
|
||||
struct pvr_rogue_winsys_render_ctx_static_state {
|
||||
uint64_t vdm_ctx_state_base_addr;
|
||||
uint64_t geom_ctx_state_base_addr;
|
||||
|
||||
struct {
|
||||
uint64_t vdm_ctx_store_task0;
|
||||
uint32_t vdm_ctx_store_task1;
|
||||
uint64_t vdm_ctx_store_task2;
|
||||
struct {
|
||||
uint64_t vdm_ctx_store_task0;
|
||||
uint32_t vdm_ctx_store_task1;
|
||||
uint64_t vdm_ctx_store_task2;
|
||||
|
||||
uint64_t vdm_ctx_resume_task0;
|
||||
uint32_t vdm_ctx_resume_task1;
|
||||
uint64_t vdm_ctx_resume_task2;
|
||||
} geom_state[2];
|
||||
uint64_t vdm_ctx_resume_task0;
|
||||
uint32_t vdm_ctx_resume_task1;
|
||||
uint64_t vdm_ctx_resume_task2;
|
||||
} geom_state[2];
|
||||
} rogue;
|
||||
} static_state;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -432,8 +432,13 @@ static void pvr_srv_render_ctx_fw_static_state_init(
|
|||
struct pvr_winsys_render_ctx_create_info *create_info,
|
||||
struct rogue_fwif_static_rendercontext_state *static_state)
|
||||
{
|
||||
struct pvr_winsys_render_ctx_static_state *ws_static_state =
|
||||
&create_info->static_state;
|
||||
#if defined(PVR_BUILD_ARCH_ROGUE)
|
||||
struct pvr_rogue_winsys_render_ctx_static_state *ws_static_state =
|
||||
&create_info->static_state.rogue;
|
||||
#else
|
||||
# error "Missing arch"
|
||||
#endif
|
||||
|
||||
struct rogue_fwif_ta_regs_cswitch *regs =
|
||||
&static_state->ctx_switch_geom_regs[0];
|
||||
|
||||
|
|
|
|||
|
|
@ -186,11 +186,15 @@ void pvr_srv_render_target_dataset_destroy(
|
|||
}
|
||||
|
||||
static void pvr_srv_render_ctx_fw_static_state_init(
|
||||
enum pvr_device_arch arch,
|
||||
struct pvr_winsys_render_ctx_create_info *create_info,
|
||||
struct rogue_fwif_static_rendercontext_state *static_state)
|
||||
{
|
||||
struct pvr_winsys_render_ctx_static_state *ws_static_state =
|
||||
&create_info->static_state;
|
||||
/* TODO: handle non-rogue GPUs */
|
||||
assert(arch == PVR_DEVICE_ARCH_ROGUE);
|
||||
struct pvr_rogue_winsys_render_ctx_static_state *ws_static_state =
|
||||
&create_info->static_state.rogue;
|
||||
|
||||
struct rogue_fwif_ta_regs_cswitch *regs =
|
||||
&static_state->ctx_switch_geom_regs[0];
|
||||
|
||||
|
|
@ -247,7 +251,9 @@ VkResult pvr_srv_winsys_render_ctx_create(
|
|||
if (result != VK_SUCCESS)
|
||||
goto err_close_timeline_geom;
|
||||
|
||||
pvr_srv_render_ctx_fw_static_state_init(create_info, &static_state);
|
||||
pvr_srv_render_ctx_fw_static_state_init(dev_info->ident.arch,
|
||||
create_info,
|
||||
&static_state);
|
||||
|
||||
/* TODO: Add support for reset framework. Currently we subtract
|
||||
* reset_cmd.regs size from reset_cmd size to only pass empty flags field.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue