mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-14 10:08:05 +02:00
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:
parent
d84e6b8f22
commit
83101429bf
5 changed files with 21 additions and 88 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 =
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue