anv: Convert to vk_framebuffer

Reviewed-by: Ivan Briano <ivan.briano@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14961>
This commit is contained in:
Jason Ekstrand 2021-09-22 14:51:45 -05:00 committed by Jason Ekstrand
parent d84e6b8f22
commit 83101429bf
5 changed files with 21 additions and 88 deletions

View file

@ -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,

View file

@ -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);

View file

@ -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;

View file

@ -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 =

View file

@ -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;