From ff902ec44bbe91ea40373821f8ae7596478c90fe Mon Sep 17 00:00:00 2001 From: Luigi Santivetti Date: Fri, 6 Feb 2026 21:13:24 +0000 Subject: [PATCH] pvr: expose partial usc mrt init routine Expose the routine in preperation for a later commit. Backport-to: 26.0 Signed-off-by: Luigi Santivetti Acked-by: Frank Binns (cherry picked from commit 6b0fea938b60ffbc954c062688c52657fa293e01) Part-of: --- .pick_status.json | 2 +- src/imagination/vulkan/pvr_arch_cmd_buffer.c | 75 +++++++------------- src/imagination/vulkan/pvr_arch_mrt.c | 31 ++++++++ src/imagination/vulkan/pvr_mrt.h | 8 +++ 4 files changed, 64 insertions(+), 52 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 5c8d742efa4..a87549ce9db 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -5264,7 +5264,7 @@ "description": "pvr: expose partial usc mrt init routine", "nominated": true, "nomination_type": 4, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/imagination/vulkan/pvr_arch_cmd_buffer.c b/src/imagination/vulkan/pvr_arch_cmd_buffer.c index fce50393758..5c1f8a02d43 100644 --- a/src/imagination/vulkan/pvr_arch_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_arch_cmd_buffer.c @@ -4039,37 +4039,6 @@ pvr_can_pbe_resolve_ds_attachment(const struct pvr_device_info *dev_info, return pvr_arch_format_is_pbe_downscalable(dev_info, vk_format); } -static inline VkResult -pvr_mrt_setup_partial_init(struct pvr_device *const device, - struct usc_mrt_setup *mrt_setup, - uint32_t num_renger_targets, - uint32_t num_output_regs, - uint32_t num_tile_buffers) -{ - struct usc_mrt_resource *mrt_resources = NULL; - - if (num_renger_targets) { - const uint32_t size = - num_renger_targets * sizeof(*mrt_setup->mrt_resources); - - mrt_resources = vk_zalloc(&device->vk.alloc, - size, - 8, - VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - if (!mrt_resources) - return VK_ERROR_OUT_OF_HOST_MEMORY; - } - - *mrt_setup = (struct usc_mrt_setup){ - .num_render_targets = num_renger_targets, - .num_output_regs = num_output_regs, - .num_tile_buffers = num_tile_buffers, - .mrt_resources = mrt_resources, - }; - - return VK_SUCCESS; -} - static void pvr_dynamic_rendering_output_attachments_cleanup( const struct pvr_device *device, const VkAllocationCallbacks *const allocator, @@ -4290,11 +4259,12 @@ static VkResult pvr_dynamic_rendering_output_attachments_setup( dr_info->hw_render.tile_buffers_count = mrt_setup.num_tile_buffers; dr_info->hw_render.output_regs_count = mrt_setup.num_output_regs; - result = pvr_mrt_setup_partial_init(cmd_buffer->device, - dr_info->mrt_setup, - pRenderingInfo->colorAttachmentCount, - dr_info->hw_render.output_regs_count, - dr_info->hw_render.tile_buffers_count); + result = + pvr_arch_mrt_setup_partial_init(cmd_buffer->device, + dr_info->mrt_setup, + pRenderingInfo->colorAttachmentCount, + dr_info->hw_render.output_regs_count, + dr_info->hw_render.tile_buffers_count); if (result != VK_SUCCESS) { pvr_arch_destroy_mrt_setup(device, &mrt_setup); vk_command_buffer_set_error(&cmd_buffer->vk, result); @@ -4314,22 +4284,24 @@ static VkResult pvr_dynamic_rendering_output_attachments_setup( } } - result = pvr_mrt_setup_partial_init(cmd_buffer->device, - &dr_info->hw_render.init_setup, - dr_info->hw_render.color_init_count, - dr_info->hw_render.output_regs_count, - dr_info->hw_render.tile_buffers_count); + result = + pvr_arch_mrt_setup_partial_init(cmd_buffer->device, + &dr_info->hw_render.init_setup, + dr_info->hw_render.color_init_count, + dr_info->hw_render.output_regs_count, + dr_info->hw_render.tile_buffers_count); if (result != VK_SUCCESS) { pvr_arch_destroy_mrt_setup(device, &mrt_setup); vk_command_buffer_set_error(&cmd_buffer->vk, result); goto err_finish_mrt_setup; } - result = pvr_mrt_setup_partial_init(cmd_buffer->device, - &dr_info->hw_render.eot_setup, - eot_mrt_count, - dr_info->hw_render.output_regs_count, - dr_info->hw_render.tile_buffers_count); + result = + pvr_arch_mrt_setup_partial_init(cmd_buffer->device, + &dr_info->hw_render.eot_setup, + eot_mrt_count, + dr_info->hw_render.output_regs_count, + dr_info->hw_render.tile_buffers_count); if (result != VK_SUCCESS) { pvr_arch_destroy_mrt_setup(device, &mrt_setup); vk_command_buffer_set_error(&cmd_buffer->vk, result); @@ -5049,11 +5021,12 @@ static void pvr_cmd_buffer_state_from_dynamic_inheritance( goto err_free_attachments; } - result = pvr_mrt_setup_partial_init(cmd_buffer->device, - dr_info->mrt_setup, - inheritance_info->colorAttachmentCount, - mrt_setup.num_output_regs, - mrt_setup.num_tile_buffers); + result = + pvr_arch_mrt_setup_partial_init(cmd_buffer->device, + dr_info->mrt_setup, + inheritance_info->colorAttachmentCount, + mrt_setup.num_output_regs, + mrt_setup.num_tile_buffers); if (result != VK_SUCCESS) { pvr_arch_destroy_mrt_setup(device, &mrt_setup); vk_command_buffer_set_error(&cmd_buffer->vk, result); diff --git a/src/imagination/vulkan/pvr_arch_mrt.c b/src/imagination/vulkan/pvr_arch_mrt.c index 9752e955153..ff7a456cb57 100644 --- a/src/imagination/vulkan/pvr_arch_mrt.c +++ b/src/imagination/vulkan/pvr_arch_mrt.c @@ -187,6 +187,37 @@ static VkResult pvr_alloc_mrt(const struct pvr_device_info *dev_info, return VK_SUCCESS; } +VkResult +pvr_arch_mrt_setup_partial_init(struct pvr_device *const device, + struct usc_mrt_setup *mrt_setup, + uint32_t num_renger_targets, + uint32_t num_output_regs, + uint32_t num_tile_buffers) +{ + struct usc_mrt_resource *mrt_resources = NULL; + + if (num_renger_targets) { + const uint32_t size = + num_renger_targets * sizeof(*mrt_setup->mrt_resources); + + mrt_resources = vk_zalloc(&device->vk.alloc, + size, + 8, + VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (!mrt_resources) + return VK_ERROR_OUT_OF_HOST_MEMORY; + } + + *mrt_setup = (struct usc_mrt_setup){ + .num_render_targets = num_renger_targets, + .num_output_regs = num_output_regs, + .num_tile_buffers = num_tile_buffers, + .mrt_resources = mrt_resources, + }; + + return VK_SUCCESS; +} + VkResult pvr_arch_init_usc_mrt_setup(struct pvr_device *device, uint32_t attachment_count, diff --git a/src/imagination/vulkan/pvr_mrt.h b/src/imagination/vulkan/pvr_mrt.h index e899b83bd47..0d2fe94675c 100644 --- a/src/imagination/vulkan/pvr_mrt.h +++ b/src/imagination/vulkan/pvr_mrt.h @@ -170,6 +170,14 @@ CHECK_MASK_SIZE(pvr_load_op, #undef CHECK_MASK_SIZE #ifdef PVR_PER_ARCH +VkResult PVR_PER_ARCH(mrt_setup_partial_init)( + struct pvr_device *const device, + struct usc_mrt_setup *mrt_setup, + uint32_t num_renger_targets, + uint32_t num_output_regs, + uint32_t num_tile_buffers); + +# define pvr_arch_mrt_setup_partial_init PVR_PER_ARCH(mrt_setup_partial_init) VkResult PVR_PER_ARCH(init_usc_mrt_setup)( struct pvr_device *device,