panvk: Drop panvk_framebuffer
vk_framebuffer provides exactly the same thing, so let the core implement the VkFramebuffer entry points for us. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28104>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user