From ddb2f6f1faab0b5d1059ebbfc12f8d2a3912bf94 Mon Sep 17 00:00:00 2001 From: Rebecca Mckeever Date: Mon, 7 Oct 2024 15:52:33 -0700 Subject: [PATCH] panvk: Track VkFormats for depth and stencil attachments These can be used directly in vk_meta_rendering_info. Signed-off-by: Rebecca Mckeever Reviewed-by: Lars-Ivar Hesselberg Simonsen Reviewed-by: Boris Brezillon Part-of: --- src/panfrost/vulkan/csf/panvk_cmd_buffer.h | 1 + src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c | 2 ++ src/panfrost/vulkan/jm/panvk_cmd_buffer.h | 1 + src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c | 2 ++ src/panfrost/vulkan/panvk_vX_cmd_meta.c | 29 ++++++--------------- 5 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/panfrost/vulkan/csf/panvk_cmd_buffer.h b/src/panfrost/vulkan/csf/panvk_cmd_buffer.h index 31a6e3fc8a4..5d3add1675d 100644 --- a/src/panfrost/vulkan/csf/panvk_cmd_buffer.h +++ b/src/panfrost/vulkan/csf/panvk_cmd_buffer.h @@ -386,6 +386,7 @@ struct panvk_cmd_graphics_state { struct { struct panvk_image_view *iview; + VkFormat fmt; struct panvk_resolve_attachment resolve; } z_attachment, s_attachment; diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index f4adf963203..96695c29088 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -1735,6 +1735,7 @@ panvk_cmd_begin_rendering_init_state(struct panvk_cmd_buffer *cmdbuf, struct panvk_image *img = container_of(iview->vk.image, struct panvk_image, vk); const VkExtent3D iview_size = iview->vk.extent; + cmdbuf->state.gfx.render.z_attachment.fmt = iview->vk.format; if (iview->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT) { cmdbuf->state.gfx.render.bound_attachments |= @@ -1776,6 +1777,7 @@ panvk_cmd_begin_rendering_init_state(struct panvk_cmd_buffer *cmdbuf, struct panvk_image *img = container_of(iview->vk.image, struct panvk_image, vk); const VkExtent3D iview_size = iview->vk.extent; + cmdbuf->state.gfx.render.s_attachment.fmt = iview->vk.format; if (iview->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) { cmdbuf->state.gfx.render.bound_attachments |= diff --git a/src/panfrost/vulkan/jm/panvk_cmd_buffer.h b/src/panfrost/vulkan/jm/panvk_cmd_buffer.h index 36a9eec2ba8..92ced3ac3a9 100644 --- a/src/panfrost/vulkan/jm/panvk_cmd_buffer.h +++ b/src/panfrost/vulkan/jm/panvk_cmd_buffer.h @@ -146,6 +146,7 @@ struct panvk_cmd_graphics_state { struct { struct panvk_image_view *iview; + VkFormat fmt; struct panvk_resolve_attachment resolve; } z_attachment, s_attachment; diff --git a/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c index 7b7a11f860a..e29a9c32fbf 100644 --- a/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c @@ -1605,6 +1605,7 @@ panvk_cmd_begin_rendering_init_state(struct panvk_cmd_buffer *cmdbuf, struct panvk_image *img = container_of(iview->vk.image, struct panvk_image, vk); const VkExtent3D iview_size = iview->vk.extent; + cmdbuf->state.gfx.render.z_attachment.fmt = iview->vk.format; if (iview->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT) { cmdbuf->state.gfx.render.bound_attachments |= @@ -1648,6 +1649,7 @@ panvk_cmd_begin_rendering_init_state(struct panvk_cmd_buffer *cmdbuf, struct panvk_image *img = container_of(iview->vk.image, struct panvk_image, vk); const VkExtent3D iview_size = iview->vk.extent; + cmdbuf->state.gfx.render.s_attachment.fmt = iview->vk.format; if (iview->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) { cmdbuf->state.gfx.render.bound_attachments |= diff --git a/src/panfrost/vulkan/panvk_vX_cmd_meta.c b/src/panfrost/vulkan/panvk_vX_cmd_meta.c index 6a6aaca2061..cc6dda5c541 100644 --- a/src/panfrost/vulkan/panvk_vX_cmd_meta.c +++ b/src/panfrost/vulkan/panvk_vX_cmd_meta.c @@ -187,29 +187,16 @@ panvk_per_arch(CmdClearAttachments)(VkCommandBuffer commandBuffer, .view_mask = 0, .samples = fbinfo->nr_samples, .color_attachment_count = fbinfo->rt_count, + .depth_attachment_format = cmdbuf->state.gfx.render.z_attachment.fmt, + .stencil_attachment_format = cmdbuf->state.gfx.render.s_attachment.fmt, }; - for (uint32_t i = 0; i < fbinfo->rt_count; i++) { - if (fbinfo->rts[i].view) { - render.color_attachment_formats[i] = - cmdbuf->state.gfx.render.color_attachments.fmts[i]; - render.color_attachment_write_masks[i] = - VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | - VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT; - } - } - - if (fbinfo->zs.view.zs) { - render.depth_attachment_format = - vk_format_from_pipe_format(fbinfo->zs.view.zs->format); - - if (vk_format_has_stencil(render.depth_attachment_format)) - render.stencil_attachment_format = render.depth_attachment_format; - } - - if (fbinfo->zs.view.s) { - render.stencil_attachment_format = - vk_format_from_pipe_format(fbinfo->zs.view.s->format); + for (uint32_t i = 0; i < render.color_attachment_count; i++) { + render.color_attachment_formats[i] = + cmdbuf->state.gfx.render.color_attachments.fmts[i]; + render.color_attachment_write_masks[i] = + VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | + VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT; } panvk_per_arch(cmd_meta_gfx_start)(cmdbuf, &save);