diff --git a/src/panfrost/vulkan/panvk_cmd_buffer.c b/src/panfrost/vulkan/panvk_cmd_buffer.c index 9363c5b6b9d..0ac260f650c 100644 --- a/src/panfrost/vulkan/panvk_cmd_buffer.c +++ b/src/panfrost/vulkan/panvk_cmd_buffer.c @@ -33,6 +33,7 @@ #include "util/rounding.h" #include "vk_format.h" +#include "vk_framebuffer.h" VKAPI_ATTR void VKAPI_CALL panvk_CmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding, @@ -424,9 +425,8 @@ panvk_cmd_fb_info_set_subpass(struct panvk_cmd_buffer *cmdbuf) { const struct panvk_subpass *subpass = cmdbuf->state.subpass; struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info; - const struct panvk_framebuffer *fb = cmdbuf->state.framebuffer; + const struct vk_framebuffer *fb = cmdbuf->state.framebuffer; const struct panvk_clear_value *clears = cmdbuf->state.clear; - struct panvk_image_view *view; fbinfo->nr_samples = 1; fbinfo->rt_count = subpass->color_count; @@ -435,9 +435,12 @@ panvk_cmd_fb_info_set_subpass(struct panvk_cmd_buffer *cmdbuf) for (unsigned cb = 0; cb < subpass->color_count; cb++) { int idx = subpass->color_attachments[cb].idx; - view = idx != VK_ATTACHMENT_UNUSED ? fb->attachments[idx].iview : NULL; - if (!view) + + if (idx == VK_ATTACHMENT_UNUSED) continue; + + VK_FROM_HANDLE(panvk_image_view, view, fb->attachments[idx]); + fbinfo->rts[cb].view = &view->pview; fbinfo->rts[cb].clear = subpass->color_attachments[cb].clear; fbinfo->rts[cb].preload = subpass->color_attachments[cb].preload; @@ -450,7 +453,8 @@ panvk_cmd_fb_info_set_subpass(struct panvk_cmd_buffer *cmdbuf) } if (subpass->zs_attachment.idx != VK_ATTACHMENT_UNUSED) { - view = fb->attachments[subpass->zs_attachment.idx].iview; + VK_FROM_HANDLE(panvk_image_view, view, + fb->attachments[subpass->zs_attachment.idx]); const struct util_format_description *fdesc = util_format_description(view->pview.format); @@ -478,7 +482,7 @@ void panvk_cmd_fb_info_init(struct panvk_cmd_buffer *cmdbuf) { struct pan_fb_info *fbinfo = &cmdbuf->state.fb.info; - const struct panvk_framebuffer *fb = cmdbuf->state.framebuffer; + const struct vk_framebuffer *fb = cmdbuf->state.framebuffer; memset(cmdbuf->state.fb.crc_valid, 0, sizeof(cmdbuf->state.fb.crc_valid)); @@ -499,7 +503,7 @@ panvk_CmdBeginRenderPass2(VkCommandBuffer commandBuffer, { VK_FROM_HANDLE(panvk_cmd_buffer, cmdbuf, commandBuffer); VK_FROM_HANDLE(panvk_render_pass, pass, pRenderPassBegin->renderPass); - VK_FROM_HANDLE(panvk_framebuffer, fb, pRenderPassBegin->framebuffer); + VK_FROM_HANDLE(vk_framebuffer, fb, pRenderPassBegin->framebuffer); cmdbuf->state.pass = pass; cmdbuf->state.subpass = pass->subpasses; diff --git a/src/panfrost/vulkan/panvk_cs.h b/src/panfrost/vulkan/panvk_cs.h index eb4205874fb..5cece0eed3e 100644 --- a/src/panfrost/vulkan/panvk_cs.h +++ b/src/panfrost/vulkan/panvk_cs.h @@ -42,7 +42,6 @@ struct panfrost_ptr; struct pan_pool; union panvk_sysval_data; -struct panvk_framebuffer; struct panvk_cmd_state; struct panvk_compute_dim; struct panvk_device; diff --git a/src/panfrost/vulkan/panvk_device.c b/src/panfrost/vulkan/panvk_device.c index 7f0387aa5c5..c99bdec19b3 100644 --- a/src/panfrost/vulkan/panvk_device.c +++ b/src/panfrost/vulkan/panvk_device.c @@ -1660,49 +1660,6 @@ panvk_DestroyBuffer(VkDevice _device, VkBuffer _buffer, vk_buffer_destroy(&device->vk, pAllocator, &buffer->vk); } -VKAPI_ATTR VkResult VKAPI_CALL -panvk_CreateFramebuffer(VkDevice _device, - const VkFramebufferCreateInfo *pCreateInfo, - const VkAllocationCallbacks *pAllocator, - VkFramebuffer *pFramebuffer) -{ - VK_FROM_HANDLE(panvk_device, device, _device); - struct panvk_framebuffer *framebuffer; - - assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO); - - size_t size = sizeof(*framebuffer) + sizeof(struct panvk_attachment_info) * - pCreateInfo->attachmentCount; - framebuffer = vk_object_alloc(&device->vk, pAllocator, size, - VK_OBJECT_TYPE_FRAMEBUFFER); - if (framebuffer == NULL) - return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); - - framebuffer->attachment_count = pCreateInfo->attachmentCount; - framebuffer->width = pCreateInfo->width; - framebuffer->height = pCreateInfo->height; - framebuffer->layers = pCreateInfo->layers; - for (uint32_t i = 0; i < pCreateInfo->attachmentCount; i++) { - VkImageView _iview = pCreateInfo->pAttachments[i]; - struct panvk_image_view *iview = panvk_image_view_from_handle(_iview); - framebuffer->attachments[i].iview = iview; - } - - *pFramebuffer = panvk_framebuffer_to_handle(framebuffer); - return VK_SUCCESS; -} - -VKAPI_ATTR void VKAPI_CALL -panvk_DestroyFramebuffer(VkDevice _device, VkFramebuffer _fb, - const VkAllocationCallbacks *pAllocator) -{ - VK_FROM_HANDLE(panvk_device, device, _device); - VK_FROM_HANDLE(panvk_framebuffer, fb, _fb); - - if (fb) - vk_object_free(&device->vk, pAllocator, fb); -} - VKAPI_ATTR void VKAPI_CALL panvk_DestroySampler(VkDevice _device, VkSampler _sampler, const VkAllocationCallbacks *pAllocator) diff --git a/src/panfrost/vulkan/panvk_private.h b/src/panfrost/vulkan/panvk_private.h index c8ad351d1b4..23b1f523fa4 100644 --- a/src/panfrost/vulkan/panvk_private.h +++ b/src/panfrost/vulkan/panvk_private.h @@ -305,7 +305,7 @@ struct panvk_batch { struct util_dynarray event_ops; struct pan_jc jc; struct { - const struct panvk_framebuffer *info; + const struct vk_framebuffer *info; struct panfrost_ptr desc; } fb; struct { @@ -754,7 +754,7 @@ struct panvk_cmd_state { const struct panvk_render_pass *pass; const struct panvk_subpass *subpass; - const struct panvk_framebuffer *framebuffer; + const struct vk_framebuffer *framebuffer; VkRect2D render_area; struct panvk_clear_value *clear; @@ -993,17 +993,6 @@ struct panvk_attachment_info { struct panvk_image_view *iview; }; -struct panvk_framebuffer { - struct vk_object_base base; - - uint32_t width; - uint32_t height; - uint32_t layers; - - uint32_t attachment_count; - struct panvk_attachment_info attachments[0]; -}; - struct panvk_clear_value { union { uint32_t color[4]; @@ -1082,8 +1071,6 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_set_layout, vk.base, VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_device_memory, base, VkDeviceMemory, VK_OBJECT_TYPE_DEVICE_MEMORY) VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_event, base, VkEvent, VK_OBJECT_TYPE_EVENT) -VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_framebuffer, base, VkFramebuffer, - VK_OBJECT_TYPE_FRAMEBUFFER) VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_image, vk.base, VkImage, VK_OBJECT_TYPE_IMAGE) VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_image_view, vk.base, VkImageView, diff --git a/src/panfrost/vulkan/panvk_vX_device.c b/src/panfrost/vulkan/panvk_vX_device.c index d4eefff168a..9b4e427ac8a 100644 --- a/src/panfrost/vulkan/panvk_vX_device.c +++ b/src/panfrost/vulkan/panvk_vX_device.c @@ -34,6 +34,7 @@ #include "panvk_private.h" #include "vk_drm_syncobj.h" +#include "vk_framebuffer.h" static void panvk_queue_submit_batch(struct panvk_queue *queue, struct panvk_batch *batch, @@ -245,8 +246,8 @@ panvk_per_arch(queue_submit)(struct vk_queue *vk_queue, if (batch->fb.info) { for (unsigned i = 0; i < batch->fb.info->attachment_count; i++) { - struct panvk_image_view *iview = - batch->fb.info->attachments[i].iview; + VK_FROM_HANDLE(panvk_image_view, iview, + batch->fb.info->attachments[i]); struct panvk_image *img = container_of(iview->vk.image, struct panvk_image, vk);