From 83101429bf742109336689331bcbeace569bec69 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 22 Sep 2021 14:51:45 -0500 Subject: [PATCH] anv: Convert to vk_framebuffer Reviewed-by: Ivan Briano Part-of: --- src/intel/vulkan/anv_device.c | 57 ------------------------------ src/intel/vulkan/anv_private.h | 20 +++-------- src/intel/vulkan/genX_cmd_buffer.c | 28 ++++++++------- src/intel/vulkan/gfx7_cmd_buffer.c | 2 +- src/intel/vulkan/gfx8_cmd_buffer.c | 2 +- 5 files changed, 21 insertions(+), 88 deletions(-) diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 13435d962e3..c6f38a5707d 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -4536,63 +4536,6 @@ void anv_DestroySampler( vk_object_free(&device->vk, pAllocator, sampler); } -VkResult anv_CreateFramebuffer( - VkDevice _device, - const VkFramebufferCreateInfo* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkFramebuffer* pFramebuffer) -{ - ANV_FROM_HANDLE(anv_device, device, _device); - struct anv_framebuffer *framebuffer; - - assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO); - - size_t size = sizeof(*framebuffer); - - /* VK_KHR_imageless_framebuffer extension says: - * - * If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR, - * parameter pAttachments is ignored. - */ - if (!(pCreateInfo->flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR)) - size += sizeof(struct anv_image_view *) * 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->width = pCreateInfo->width; - framebuffer->height = pCreateInfo->height; - framebuffer->layers = pCreateInfo->layers; - - if (!(pCreateInfo->flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR)) { - for (uint32_t i = 0; i < pCreateInfo->attachmentCount; i++) { - ANV_FROM_HANDLE(anv_image_view, iview, pCreateInfo->pAttachments[i]); - framebuffer->attachments[i] = iview; - } - framebuffer->attachment_count = pCreateInfo->attachmentCount; - } - - *pFramebuffer = anv_framebuffer_to_handle(framebuffer); - - return VK_SUCCESS; -} - -void anv_DestroyFramebuffer( - VkDevice _device, - VkFramebuffer _fb, - const VkAllocationCallbacks* pAllocator) -{ - ANV_FROM_HANDLE(anv_device, device, _device); - ANV_FROM_HANDLE(anv_framebuffer, fb, _fb); - - if (!fb) - return; - - vk_object_free(&device->vk, pAllocator, fb); -} - static const VkTimeDomainEXT anv_time_domains[] = { VK_TIME_DOMAIN_DEVICE_EXT, VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT, diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 672aab99ff1..3fe7352a64a 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -73,6 +73,7 @@ #include "vk_device.h" #include "vk_drm_syncobj.h" #include "vk_enum_defines.h" +#include "vk_framebuffer.h" #include "vk_image.h" #include "vk_instance.h" #include "vk_physical_device.h" @@ -2943,17 +2944,6 @@ struct anv_cmd_ray_tracing_state { } scratch; }; -struct anv_framebuffer { - struct vk_object_base base; - - uint32_t width; - uint32_t height; - uint32_t layers; - - uint32_t attachment_count; - struct anv_image_view * attachments[0]; -}; - struct anv_subpass_attachment { VkImageUsageFlagBits usage; uint32_t attachment; @@ -3036,7 +3026,7 @@ struct anv_render_pass { struct anv_dynamic_render_pass { struct anv_render_pass pass; struct anv_subpass subpass; - struct anv_framebuffer framebuffer; + struct vk_framebuffer framebuffer; struct anv_render_pass_attachment rp_attachments[MAX_DYN_RENDER_ATTACHMENTS]; struct anv_subpass_attachment sp_attachments[MAX_DYN_RENDER_ATTACHMENTS]; @@ -3059,7 +3049,7 @@ struct anv_cmd_state { VkShaderStageFlags descriptors_dirty; VkShaderStageFlags push_constants_dirty; - struct anv_framebuffer * framebuffer; + struct vk_framebuffer * framebuffer; struct anv_render_pass * pass; struct anv_subpass * subpass; VkRect2D render_area; @@ -3289,7 +3279,7 @@ void gfx7_cmd_buffer_emit_scissor(struct anv_cmd_buffer *cmd_buffer); void anv_cmd_buffer_setup_attachments(struct anv_cmd_buffer *cmd_buffer, struct anv_render_pass *pass, - struct anv_framebuffer *framebuffer, + struct vk_framebuffer *framebuffer, const VkClearValue *clear_values); void anv_cmd_buffer_emit_state_base_address(struct anv_cmd_buffer *cmd_buffer); @@ -4738,8 +4728,6 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(anv_descriptor_update_template, base, VK_DEFINE_NONDISP_HANDLE_CASTS(anv_device_memory, base, VkDeviceMemory, VK_OBJECT_TYPE_DEVICE_MEMORY) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_event, base, VkEvent, VK_OBJECT_TYPE_EVENT) -VK_DEFINE_NONDISP_HANDLE_CASTS(anv_framebuffer, base, VkFramebuffer, - VK_OBJECT_TYPE_FRAMEBUFFER) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_image, vk.base, VkImage, VK_OBJECT_TYPE_IMAGE) VK_DEFINE_NONDISP_HANDLE_CASTS(anv_image_view, vk.base, VkImageView, VK_OBJECT_TYPE_IMAGE_VIEW); diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index f05001a48c3..d342cdac2d1 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -1570,7 +1570,7 @@ cmd_buffer_alloc_state_attachments(struct anv_cmd_buffer *cmd_buffer, static VkResult genX(cmd_buffer_setup_attachments)(struct anv_cmd_buffer *cmd_buffer, const struct anv_render_pass *pass, - const struct anv_framebuffer *framebuffer, + const struct vk_framebuffer *framebuffer, const VkRenderPassBeginInfo *begin) { struct anv_cmd_state *state = &cmd_buffer->state; @@ -1592,7 +1592,8 @@ genX(cmd_buffer_setup_attachments)(struct anv_cmd_buffer *cmd_buffer, ANV_FROM_HANDLE(anv_image_view, iview, attach_begin->pAttachments[i]); state->attachments[i].image_view = iview; } else if (framebuffer && i < framebuffer->attachment_count) { - state->attachments[i].image_view = framebuffer->attachments[i]; + ANV_FROM_HANDLE(anv_image_view, iview, framebuffer->attachments[i]); + state->attachments[i].image_view = iview; } else { state->attachments[i].image_view = NULL; } @@ -1852,8 +1853,8 @@ genX(BeginCommandBuffer)( } else { subpass = &pass->subpasses[pBeginInfo->pInheritanceInfo->subpass]; - ANV_FROM_HANDLE(anv_framebuffer, framebuffer, - pBeginInfo->pInheritanceInfo->framebuffer); + VK_FROM_HANDLE(vk_framebuffer, framebuffer, + pBeginInfo->pInheritanceInfo->framebuffer); cmd_buffer->state.pass = pass; cmd_buffer->state.subpass = subpass; @@ -6383,7 +6384,7 @@ clear_color_attachment(struct anv_cmd_buffer *cmd_buffer, uint32_t base_layer) { struct anv_cmd_state *cmd_state = &cmd_buffer->state; - struct anv_framebuffer *fb = cmd_state->framebuffer; + struct vk_framebuffer *fb = cmd_state->framebuffer; VkRect2D render_area = cmd_state->render_area; bool is_multiview = cmd_state->subpass->view_mask != 0; @@ -6588,7 +6589,7 @@ cmd_buffer_begin_subpass(struct anv_cmd_buffer *cmd_buffer, "begin subpass deps/attachments"); VkRect2D render_area = cmd_state->render_area; - struct anv_framebuffer *fb = cmd_state->framebuffer; + struct vk_framebuffer *fb = cmd_state->framebuffer; bool is_multiview = subpass->view_mask != 0; @@ -6851,7 +6852,7 @@ static void cmd_buffer_mark_images_written(struct anv_cmd_buffer *cmd_buffer, struct anv_cmd_state *cmd_state, struct anv_subpass *subpass, - struct anv_framebuffer *fb) + struct vk_framebuffer *fb) { for (uint32_t i = 0; i < subpass->attachment_count; ++i) { struct anv_subpass_attachment *att = &subpass->attachments[i]; @@ -6910,7 +6911,7 @@ static void cmd_buffer_resolve_attachments(struct anv_cmd_buffer *cmd_buffer, struct anv_cmd_state *cmd_state, struct anv_subpass *subpass, - struct anv_framebuffer *fb, + struct vk_framebuffer *fb, uint32_t subpass_id) { struct anv_attachment_state *attachments = cmd_state->attachments; @@ -7154,7 +7155,7 @@ static void cmd_buffer_do_layout_transitions(struct anv_cmd_buffer *cmd_buffer, struct anv_cmd_state *cmd_state, struct anv_subpass *subpass, - struct anv_framebuffer *fb, + struct vk_framebuffer *fb, uint32_t subpass_id) { struct anv_render_pass *pass = cmd_state->pass; @@ -7239,7 +7240,7 @@ cmd_buffer_end_subpass(struct anv_cmd_buffer *cmd_buffer) struct anv_cmd_state *cmd_state = &cmd_buffer->state; struct anv_subpass *subpass = cmd_state->subpass; uint32_t subpass_id = anv_get_subpass_id(&cmd_buffer->state); - struct anv_framebuffer *fb = cmd_buffer->state.framebuffer; + struct vk_framebuffer *fb = cmd_buffer->state.framebuffer; cmd_buffer_clear_state_pointers(cmd_state); @@ -7266,7 +7267,8 @@ void genX(CmdBeginRenderPass2)( { ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer); ANV_FROM_HANDLE(anv_render_pass, pass, pRenderPassBeginInfo->renderPass); - ANV_FROM_HANDLE(anv_framebuffer, framebuffer, pRenderPassBeginInfo->framebuffer); + VK_FROM_HANDLE(vk_framebuffer, framebuffer, + pRenderPassBeginInfo->framebuffer); VkResult result; if (!is_render_queue_cmd_buffer(cmd_buffer)) { @@ -7637,7 +7639,7 @@ cmd_buffer_end_rendering(struct anv_cmd_buffer *cmd_buffer) struct anv_cmd_state *cmd_state = &cmd_buffer->state; struct anv_subpass *subpass = cmd_state->subpass; uint32_t subpass_id = anv_get_subpass_id(&cmd_buffer->state); - struct anv_framebuffer *fb = cmd_buffer->state.framebuffer; + struct vk_framebuffer *fb = cmd_buffer->state.framebuffer; cmd_buffer_clear_state_pointers(cmd_state); @@ -7649,7 +7651,7 @@ cmd_buffer_end_rendering(struct anv_cmd_buffer *cmd_buffer) } static void -setup_dynamic_framebuffer(struct anv_framebuffer *fb, +setup_dynamic_framebuffer(struct vk_framebuffer *fb, const VkRenderingInfoKHR *info) { fb->width = info->renderArea.extent.width + info->renderArea.offset.x; diff --git a/src/intel/vulkan/gfx7_cmd_buffer.c b/src/intel/vulkan/gfx7_cmd_buffer.c index edaae56ceed..98c57c05beb 100644 --- a/src/intel/vulkan/gfx7_cmd_buffer.c +++ b/src/intel/vulkan/gfx7_cmd_buffer.c @@ -48,7 +48,7 @@ clamp_int64(int64_t x, int64_t min, int64_t max) void gfx7_cmd_buffer_emit_scissor(struct anv_cmd_buffer *cmd_buffer) { - struct anv_framebuffer *fb = cmd_buffer->state.framebuffer; + struct vk_framebuffer *fb = cmd_buffer->state.framebuffer; uint32_t count = cmd_buffer->state.gfx.dynamic.scissor.count; const VkRect2D *scissors = cmd_buffer->state.gfx.dynamic.scissor.scissors; const VkViewport *viewports = diff --git a/src/intel/vulkan/gfx8_cmd_buffer.c b/src/intel/vulkan/gfx8_cmd_buffer.c index 2c4d048f9e9..60d3bab9423 100644 --- a/src/intel/vulkan/gfx8_cmd_buffer.c +++ b/src/intel/vulkan/gfx8_cmd_buffer.c @@ -37,7 +37,7 @@ void gfx8_cmd_buffer_emit_viewport(struct anv_cmd_buffer *cmd_buffer) { - struct anv_framebuffer *fb = cmd_buffer->state.framebuffer; + struct vk_framebuffer *fb = cmd_buffer->state.framebuffer; uint32_t count = cmd_buffer->state.gfx.dynamic.viewport.count; const VkViewport *viewports = cmd_buffer->state.gfx.dynamic.viewport.viewports;