diff --git a/src/amd/vulkan/radv_meta_blit.c b/src/amd/vulkan/radv_meta_blit.c index c07d86f242c..a95466c9485 100644 --- a/src/amd/vulkan/radv_meta_blit.c +++ b/src/amd/vulkan/radv_meta_blit.c @@ -267,21 +267,11 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, unsigned fs_key = 0; VkFormat format = VK_FORMAT_UNDEFINED; - VkRenderingAttachmentInfo color_att = {0}, depth_att = {0}, stencil_att = {0}; - switch (src_iview->vk.aspects) { case VK_IMAGE_ASPECT_COLOR_BIT: { - unsigned dst_layout = radv_meta_dst_layout_from_layout(dest_image_layout); - VkImageLayout layout = radv_meta_dst_layout_to_layout(dst_layout); fs_key = radv_format_meta_fs_key(device, dest_image->vk.format); format = radv_fs_key_format_exemplars[fs_key]; - color_att.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO; - color_att.imageView = radv_image_view_to_handle(dest_iview); - color_att.imageLayout = layout; - color_att.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; - color_att.storeOp = VK_ATTACHMENT_STORE_OP_STORE; - switch (src_image->vk.image_type) { case VK_IMAGE_TYPE_1D: pipeline = &device->meta_state.blit.pipeline_1d_src[fs_key]; @@ -298,16 +288,8 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, break; } case VK_IMAGE_ASPECT_DEPTH_BIT: { - enum radv_blit_ds_layout ds_layout = radv_meta_blit_ds_to_type(dest_image_layout); - VkImageLayout layout = radv_meta_blit_ds_to_layout(ds_layout); format = VK_FORMAT_D32_SFLOAT; - depth_att.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO; - depth_att.imageView = radv_image_view_to_handle(dest_iview); - depth_att.imageLayout = layout; - depth_att.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; - depth_att.storeOp = VK_ATTACHMENT_STORE_OP_STORE; - switch (src_image->vk.image_type) { case VK_IMAGE_TYPE_1D: pipeline = &device->meta_state.blit.depth_only_1d_pipeline; @@ -324,16 +306,8 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, break; } case VK_IMAGE_ASPECT_STENCIL_BIT: { - enum radv_blit_ds_layout ds_layout = radv_meta_blit_ds_to_type(dest_image_layout); - VkImageLayout layout = radv_meta_blit_ds_to_layout(ds_layout); format = VK_FORMAT_S8_UINT; - stencil_att.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO; - stencil_att.imageView = radv_image_view_to_handle(dest_iview); - stencil_att.imageLayout = layout; - stencil_att.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; - stencil_att.storeOp = VK_ATTACHMENT_STORE_OP_STORE; - switch (src_image->vk.image_type) { case VK_IMAGE_TYPE_1D: pipeline = &device->meta_state.blit.stencil_only_1d_pipeline; @@ -408,17 +382,50 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, .layerCount = 1, }; - switch (src_iview->image->vk.aspects) { - case VK_IMAGE_ASPECT_COLOR_BIT: + VkRenderingAttachmentInfo color_att; + if (src_iview->image->vk.aspects == VK_IMAGE_ASPECT_COLOR_BIT) { + unsigned dst_layout = radv_meta_dst_layout_from_layout(dest_image_layout); + VkImageLayout layout = radv_meta_dst_layout_to_layout(dst_layout); + + color_att = (VkRenderingAttachmentInfo) { + .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, + .imageView = radv_image_view_to_handle(dest_iview), + .imageLayout = layout, + .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD, + .storeOp = VK_ATTACHMENT_STORE_OP_STORE, + }; rendering_info.colorAttachmentCount = 1; rendering_info.pColorAttachments = &color_att; - break; - case VK_IMAGE_ASPECT_DEPTH_BIT: + } + + VkRenderingAttachmentInfo depth_att; + if (src_iview->image->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT) { + enum radv_blit_ds_layout ds_layout = radv_meta_blit_ds_to_type(dest_image_layout); + VkImageLayout layout = radv_meta_blit_ds_to_layout(ds_layout); + + depth_att = (VkRenderingAttachmentInfo) { + .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, + .imageView = radv_image_view_to_handle(dest_iview), + .imageLayout = layout, + .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD, + .storeOp = VK_ATTACHMENT_STORE_OP_STORE, + }; rendering_info.pDepthAttachment = &depth_att; - break; - case VK_IMAGE_ASPECT_STENCIL_BIT: + } + + VkRenderingAttachmentInfo stencil_att; + if (src_iview->image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) { + enum radv_blit_ds_layout ds_layout = radv_meta_blit_ds_to_type(dest_image_layout); + VkImageLayout layout = radv_meta_blit_ds_to_layout(ds_layout); + + stencil_att = (VkRenderingAttachmentInfo) { + .sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO, + .imageView = radv_image_view_to_handle(dest_iview), + .imageLayout = layout, + .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD, + .storeOp = VK_ATTACHMENT_STORE_OP_STORE, + }; rendering_info.pStencilAttachment = &stencil_att; - break; } radv_CmdBeginRendering(radv_cmd_buffer_to_handle(cmd_buffer), &rendering_info); diff --git a/src/amd/vulkan/radv_meta_blit2d.c b/src/amd/vulkan/radv_meta_blit2d.c index 7580e6b0fd2..8a90bfd1478 100644 --- a/src/amd/vulkan/radv_meta_blit2d.c +++ b/src/amd/vulkan/radv_meta_blit2d.c @@ -298,6 +298,8 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer, }, .layerCount = 1, .pDepthAttachment = &depth_att_info, + .pStencilAttachment = (dst->image->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) ? + &depth_att_info : NULL, }; radv_CmdBeginRendering(radv_cmd_buffer_to_handle(cmd_buffer), &rendering_info); @@ -329,6 +331,8 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer, .extent = { rects[r].width, rects[r].height }, }, .layerCount = 1, + .pDepthAttachment = (dst->image->vk.aspects & VK_IMAGE_ASPECT_DEPTH_BIT) ? + &stencil_att_info : NULL, .pStencilAttachment = &stencil_att_info, };