Module: Mesa
Branch: main
Commit: 67c2a6adc63f97ecebd722230b0a7d66fe69b94a
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=67c2a6adc63f97ecebd722230b0a7d66fe69b94a

Author: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Date:   Thu Mar 17 10:28:55 2022 +0100

radv: convert the meta blit path to dynamic rendering

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Reviewed-by: Jason Ekstrand <jason.ekstr...@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15612>

---

 src/amd/vulkan/radv_meta_blit.c | 364 ++++++++++------------------------------
 src/amd/vulkan/radv_private.h   |   4 -
 2 files changed, 85 insertions(+), 283 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_blit.c b/src/amd/vulkan/radv_meta_blit.c
index ca5e5bd7cf7..d2c7c25b1fa 100644
--- a/src/amd/vulkan/radv_meta_blit.c
+++ b/src/amd/vulkan/radv_meta_blit.c
@@ -32,7 +32,7 @@ struct blit_region {
 };
 
 static VkResult build_pipeline(struct radv_device *device, 
VkImageAspectFlagBits aspect,
-                               enum glsl_sampler_dim tex_dim, unsigned fs_key,
+                               enum glsl_sampler_dim tex_dim, VkFormat format,
                                VkPipeline *pipeline);
 
 static nir_shader *
@@ -261,41 +261,25 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, struct 
radv_image *src_image,
                          device->meta_state.blit.pipeline_layout, 
VK_SHADER_STAGE_VERTEX_BIT, 0, 20,
                          vertex_push_constants);
 
-   VkFramebuffer fb;
-   radv_CreateFramebuffer(radv_device_to_handle(device),
-                          &(VkFramebufferCreateInfo){
-                             .sType = 
VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
-                             .attachmentCount = 1,
-                             .pAttachments =
-                                (VkImageView[]){
-                                   radv_image_view_to_handle(dest_iview),
-                                },
-                             .width = dst_width,
-                             .height = dst_height,
-                             .layers = 1,
-                          },
-                          &cmd_buffer->pool->vk.alloc, &fb);
    VkPipeline *pipeline = NULL;
    unsigned fs_key = 0;
+   VkFormat format = VK_FORMAT_UNDEFINED;
+
+   VkRenderingAttachmentInfo color_att = {0}, depth_att = {0}, stencil_att = 
{0};
+
    switch (src_iview->aspect_mask) {
    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;
 
-      radv_cmd_buffer_begin_render_pass(
-         cmd_buffer,
-         &(VkRenderPassBeginInfo){
-            .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
-            .renderPass = 
device->meta_state.blit.render_pass[fs_key][dst_layout],
-            .framebuffer = fb,
-            .renderArea =
-               {
-                  .offset = {dest_box.offset.x, dest_box.offset.y},
-                  .extent = {dest_box.extent.width, dest_box.extent.height},
-               },
-            .clearValueCount = 0,
-            .pClearValues = NULL,
-         });
       switch (src_image->type) {
       case VK_IMAGE_TYPE_1D:
          pipeline = &device->meta_state.blit.pipeline_1d_src[fs_key];
@@ -313,20 +297,15 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, struct 
radv_image *src_image,
    }
    case VK_IMAGE_ASPECT_DEPTH_BIT: {
       enum radv_blit_ds_layout ds_layout = 
radv_meta_blit_ds_to_type(dest_image_layout);
-      radv_cmd_buffer_begin_render_pass(
-         cmd_buffer,
-         &(VkRenderPassBeginInfo){
-            .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
-            .renderPass = device->meta_state.blit.depth_only_rp[ds_layout],
-            .framebuffer = fb,
-            .renderArea =
-               {
-                  .offset = {dest_box.offset.x, dest_box.offset.y},
-                  .extent = {dest_box.extent.width, dest_box.extent.height},
-               },
-            .clearValueCount = 0,
-            .pClearValues = NULL,
-         });
+      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->type) {
       case VK_IMAGE_TYPE_1D:
          pipeline = &device->meta_state.blit.depth_only_1d_pipeline;
@@ -344,20 +323,15 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, struct 
radv_image *src_image,
    }
    case VK_IMAGE_ASPECT_STENCIL_BIT: {
       enum radv_blit_ds_layout ds_layout = 
radv_meta_blit_ds_to_type(dest_image_layout);
-      radv_cmd_buffer_begin_render_pass(
-         cmd_buffer,
-         &(VkRenderPassBeginInfo){
-            .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
-            .renderPass = device->meta_state.blit.stencil_only_rp[ds_layout],
-            .framebuffer = fb,
-            .renderArea =
-               {
-                  .offset = {dest_box.offset.x, dest_box.offset.y},
-                  .extent = {dest_box.extent.width, dest_box.extent.height},
-               },
-            .clearValueCount = 0,
-            .pClearValues = NULL,
-         });
+      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->type) {
       case VK_IMAGE_TYPE_1D:
          pipeline = &device->meta_state.blit.stencil_only_1d_pipeline;
@@ -377,14 +351,12 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, struct 
radv_image *src_image,
       unreachable("bad VkImageType");
    }
 
-   radv_cmd_buffer_set_subpass(cmd_buffer, 
&cmd_buffer->state.pass->subpasses[0]);
-
    if (!*pipeline) {
       VkResult ret = build_pipeline(device, src_iview->aspect_mask,
-                                    translate_sampler_dim(src_image->type), 
fs_key, pipeline);
+                                    translate_sampler_dim(src_image->type), 
format, pipeline);
       if (ret != VK_SUCCESS) {
          cmd_buffer->record_result = ret;
-         goto fail_pipeline;
+         return;
       }
    }
 
@@ -424,18 +396,33 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, struct 
radv_image *src_image,
                                                 abs(dest_offset_1.y - 
dest_offset_0.y)},
                       });
 
-   radv_CmdDraw(radv_cmd_buffer_to_handle(cmd_buffer), 3, 1, 0, 0);
+   VkRenderingInfo rendering_info = {
+      .sType = VK_STRUCTURE_TYPE_RENDERING_INFO,
+      .renderArea = {
+         .offset = { 0, 0 },
+         .extent = { dst_width, dst_height },
+      },
+      .layerCount = 1,
+   };
 
-fail_pipeline:
-   radv_cmd_buffer_end_render_pass(cmd_buffer);
+   switch (src_iview->aspect_mask) {
+   case VK_IMAGE_ASPECT_COLOR_BIT:
+      rendering_info.colorAttachmentCount = 1;
+      rendering_info.pColorAttachments = &color_att;
+      break;
+   case VK_IMAGE_ASPECT_DEPTH_BIT:
+      rendering_info.pDepthAttachment = &depth_att;
+      break;
+   case VK_IMAGE_ASPECT_STENCIL_BIT:
+      rendering_info.pStencilAttachment = &stencil_att;
+      break;
+   }
 
-   /* At the point where we emit the draw call, all data from the
-    * descriptor sets, etc. has been used.  We are free to delete it.
-    */
-   /* TODO: above comment is not valid for at least descriptor sets/pools,
-    * as we may not free them till after execution finishes. Check others. */
+   radv_CmdBeginRendering(radv_cmd_buffer_to_handle(cmd_buffer), 
&rendering_info);
 
-   radv_DestroyFramebuffer(radv_device_to_handle(device), fb, 
&cmd_buffer->pool->vk.alloc);
+   radv_CmdDraw(radv_cmd_buffer_to_handle(cmd_buffer), 3, 1, 0, 0);
+
+   radv_CmdEndRendering(radv_cmd_buffer_to_handle(cmd_buffer));
 }
 
 static bool
@@ -640,10 +627,6 @@ radv_device_finish_meta_blit_state(struct radv_device 
*device)
    struct radv_meta_state *state = &device->meta_state;
 
    for (unsigned i = 0; i < NUM_META_FS_KEYS; ++i) {
-      for (unsigned j = 0; j < RADV_META_DST_LAYOUT_COUNT; ++j) {
-         radv_DestroyRenderPass(radv_device_to_handle(device), 
state->blit.render_pass[i][j],
-                                &state->alloc);
-      }
       radv_DestroyPipeline(radv_device_to_handle(device), 
state->blit.pipeline_1d_src[i],
                            &state->alloc);
       radv_DestroyPipeline(radv_device_to_handle(device), 
state->blit.pipeline_2d_src[i],
@@ -652,14 +635,6 @@ radv_device_finish_meta_blit_state(struct radv_device 
*device)
                            &state->alloc);
    }
 
-   for (enum radv_blit_ds_layout i = RADV_BLIT_DS_LAYOUT_TILE_ENABLE; i < 
RADV_BLIT_DS_LAYOUT_COUNT;
-        i++) {
-      radv_DestroyRenderPass(radv_device_to_handle(device), 
state->blit.depth_only_rp[i],
-                             &state->alloc);
-      radv_DestroyRenderPass(radv_device_to_handle(device), 
state->blit.stencil_only_rp[i],
-                             &state->alloc);
-   }
-
    radv_DestroyPipeline(radv_device_to_handle(device), 
state->blit.depth_only_1d_pipeline,
                         &state->alloc);
    radv_DestroyPipeline(radv_device_to_handle(device), 
state->blit.depth_only_2d_pipeline,
@@ -682,7 +657,7 @@ radv_device_finish_meta_blit_state(struct radv_device 
*device)
 
 static VkResult
 build_pipeline(struct radv_device *device, VkImageAspectFlagBits aspect,
-               enum glsl_sampler_dim tex_dim, unsigned fs_key, VkPipeline 
*pipeline)
+               enum glsl_sampler_dim tex_dim, VkFormat format, VkPipeline 
*pipeline)
 {
    VkResult result = VK_SUCCESS;
 
@@ -695,20 +670,24 @@ build_pipeline(struct radv_device *device, 
VkImageAspectFlagBits aspect,
 
    nir_shader *fs;
    nir_shader *vs = build_nir_vertex_shader();
-   VkRenderPass rp;
+
+   VkPipelineRenderingCreateInfo rendering_create_info = {
+      .sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO,
+   };
 
    switch (aspect) {
    case VK_IMAGE_ASPECT_COLOR_BIT:
       fs = build_nir_copy_fragment_shader(tex_dim);
-      rp = device->meta_state.blit.render_pass[fs_key][0];
+      rendering_create_info.colorAttachmentCount = 1;
+      rendering_create_info.pColorAttachmentFormats = &format;
       break;
    case VK_IMAGE_ASPECT_DEPTH_BIT:
       fs = build_nir_copy_fragment_shader_depth(tex_dim);
-      rp = device->meta_state.blit.depth_only_rp[0];
+      rendering_create_info.depthAttachmentFormat = format;
       break;
    case VK_IMAGE_ASPECT_STENCIL_BIT:
       fs = build_nir_copy_fragment_shader_stencil(tex_dim);
-      rp = device->meta_state.blit.stencil_only_rp[0];
+      rendering_create_info.stencilAttachmentFormat = format;
       break;
    default:
       unreachable("Unhandled aspect");
@@ -734,6 +713,7 @@ build_pipeline(struct radv_device *device, 
VkImageAspectFlagBits aspect,
 
    VkGraphicsPipelineCreateInfo vk_pipeline_info = {
       .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
+      .pNext = &rendering_create_info,
       .stageCount = ARRAY_SIZE(pipeline_shader_stages),
       .pStages = pipeline_shader_stages,
       .pVertexInputState = &vi_create_info,
@@ -777,7 +757,7 @@ build_pipeline(struct radv_device *device, 
VkImageAspectFlagBits aspect,
          },
       .flags = 0,
       .layout = device->meta_state.blit.pipeline_layout,
-      .renderPass = rp,
+      .renderPass = VK_NULL_HANDLE,
       .subpass = 0,
    };
 
@@ -849,84 +829,23 @@ radv_device_init_meta_blit_color(struct radv_device 
*device, bool on_demand)
    VkResult result;
 
    for (unsigned i = 0; i < NUM_META_FS_KEYS; ++i) {
-      unsigned key = radv_format_meta_fs_key(device, 
radv_fs_key_format_exemplars[i]);
-      for (unsigned j = 0; j < RADV_META_DST_LAYOUT_COUNT; ++j) {
-         VkImageLayout layout = radv_meta_dst_layout_to_layout(j);
-         result = radv_CreateRenderPass2(
-            radv_device_to_handle(device),
-            &(VkRenderPassCreateInfo2){
-               .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,
-               .attachmentCount = 1,
-               .pAttachments =
-                  &(VkAttachmentDescription2){
-                     .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
-                     .format = radv_fs_key_format_exemplars[i],
-                     .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
-                     .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
-                     .initialLayout = layout,
-                     .finalLayout = layout,
-                  },
-               .subpassCount = 1,
-               .pSubpasses =
-                  &(VkSubpassDescription2){
-                     .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
-                     .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS,
-                     .inputAttachmentCount = 0,
-                     .colorAttachmentCount = 1,
-                     .pColorAttachments =
-                        &(VkAttachmentReference2){
-                           .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
-                           .attachment = 0,
-                           .layout = layout,
-                        },
-                     .pResolveAttachments = NULL,
-                     .pDepthStencilAttachment =
-                        &(VkAttachmentReference2){
-                           .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
-                           .attachment = VK_ATTACHMENT_UNUSED,
-                           .layout = VK_IMAGE_LAYOUT_GENERAL,
-                        },
-                     .preserveAttachmentCount = 0,
-                     .pPreserveAttachments = NULL,
-                  },
-               .dependencyCount = 2,
-               .pDependencies =
-                  (VkSubpassDependency2[]){{.sType = 
VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,
-                                            .srcSubpass = VK_SUBPASS_EXTERNAL,
-                                            .dstSubpass = 0,
-                                            .srcStageMask = 
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                            .dstStageMask = 
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-                                            .srcAccessMask = 0,
-                                            .dstAccessMask = 0,
-                                            .dependencyFlags = 0},
-                                           {.sType = 
VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,
-                                            .srcSubpass = 0,
-                                            .dstSubpass = VK_SUBPASS_EXTERNAL,
-                                            .srcStageMask = 
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                            .dstStageMask = 
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-                                            .srcAccessMask = 0,
-                                            .dstAccessMask = 0,
-                                            .dependencyFlags = 0}},
-            },
-            &device->meta_state.alloc, 
&device->meta_state.blit.render_pass[key][j]);
-         if (result != VK_SUCCESS)
-            goto fail;
-      }
+      VkFormat format = radv_fs_key_format_exemplars[i];
+      unsigned key = radv_format_meta_fs_key(device, format);
 
       if (on_demand)
          continue;
 
-      result = build_pipeline(device, VK_IMAGE_ASPECT_COLOR_BIT, 
GLSL_SAMPLER_DIM_1D, key,
+      result = build_pipeline(device, VK_IMAGE_ASPECT_COLOR_BIT, 
GLSL_SAMPLER_DIM_1D, format,
                               &device->meta_state.blit.pipeline_1d_src[key]);
       if (result != VK_SUCCESS)
          goto fail;
 
-      result = build_pipeline(device, VK_IMAGE_ASPECT_COLOR_BIT, 
GLSL_SAMPLER_DIM_2D, key,
+      result = build_pipeline(device, VK_IMAGE_ASPECT_COLOR_BIT, 
GLSL_SAMPLER_DIM_2D, format,
                               &device->meta_state.blit.pipeline_2d_src[key]);
       if (result != VK_SUCCESS)
          goto fail;
 
-      result = build_pipeline(device, VK_IMAGE_ASPECT_COLOR_BIT, 
GLSL_SAMPLER_DIM_3D, key,
+      result = build_pipeline(device, VK_IMAGE_ASPECT_COLOR_BIT, 
GLSL_SAMPLER_DIM_3D, format,
                               &device->meta_state.blit.pipeline_3d_src[key]);
       if (result != VK_SUCCESS)
          goto fail;
@@ -942,79 +861,23 @@ radv_device_init_meta_blit_depth(struct radv_device 
*device, bool on_demand)
 {
    VkResult result;
 
-   for (enum radv_blit_ds_layout ds_layout = RADV_BLIT_DS_LAYOUT_TILE_ENABLE;
-        ds_layout < RADV_BLIT_DS_LAYOUT_COUNT; ds_layout++) {
-      VkImageLayout layout = radv_meta_blit_ds_to_layout(ds_layout);
-      result = radv_CreateRenderPass2(
-         radv_device_to_handle(device),
-         &(VkRenderPassCreateInfo2){
-            .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,
-            .attachmentCount = 1,
-            .pAttachments =
-               &(VkAttachmentDescription2){
-                  .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
-                  .format = VK_FORMAT_D32_SFLOAT,
-                  .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
-                  .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
-                  .initialLayout = layout,
-                  .finalLayout = layout,
-               },
-            .subpassCount = 1,
-            .pSubpasses =
-               &(VkSubpassDescription2){
-                  .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
-                  .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS,
-                  .inputAttachmentCount = 0,
-                  .colorAttachmentCount = 0,
-                  .pColorAttachments = NULL,
-                  .pResolveAttachments = NULL,
-                  .pDepthStencilAttachment =
-                     &(VkAttachmentReference2){
-                        .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
-                        .attachment = 0,
-                        .layout = layout,
-                     },
-                  .preserveAttachmentCount = 0,
-                  .pPreserveAttachments = NULL,
-               },
-            .dependencyCount = 2,
-            .pDependencies =
-               (VkSubpassDependency2[]){{.sType = 
VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,
-                                         .srcSubpass = VK_SUBPASS_EXTERNAL,
-                                         .dstSubpass = 0,
-                                         .srcStageMask = 
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                         .dstStageMask = 
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-                                         .srcAccessMask = 0,
-                                         .dstAccessMask = 0,
-                                         .dependencyFlags = 0},
-                                        {.sType = 
VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,
-                                         .srcSubpass = 0,
-                                         .dstSubpass = VK_SUBPASS_EXTERNAL,
-                                         .srcStageMask = 
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                         .dstStageMask = 
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-                                         .srcAccessMask = 0,
-                                         .dstAccessMask = 0,
-                                         .dependencyFlags = 0}},
-         },
-         &device->meta_state.alloc, 
&device->meta_state.blit.depth_only_rp[ds_layout]);
-      if (result != VK_SUCCESS)
-         goto fail;
-   }
-
    if (on_demand)
       return VK_SUCCESS;
 
-   result = build_pipeline(device, VK_IMAGE_ASPECT_DEPTH_BIT, 
GLSL_SAMPLER_DIM_1D, 0,
+   result = build_pipeline(device, VK_IMAGE_ASPECT_DEPTH_BIT, 
GLSL_SAMPLER_DIM_1D,
+                           VK_FORMAT_D32_SFLOAT,
                            &device->meta_state.blit.depth_only_1d_pipeline);
    if (result != VK_SUCCESS)
       goto fail;
 
-   result = build_pipeline(device, VK_IMAGE_ASPECT_DEPTH_BIT, 
GLSL_SAMPLER_DIM_2D, 0,
+   result = build_pipeline(device, VK_IMAGE_ASPECT_DEPTH_BIT, 
GLSL_SAMPLER_DIM_2D,
+                           VK_FORMAT_D32_SFLOAT,
                            &device->meta_state.blit.depth_only_2d_pipeline);
    if (result != VK_SUCCESS)
       goto fail;
 
-   result = build_pipeline(device, VK_IMAGE_ASPECT_DEPTH_BIT, 
GLSL_SAMPLER_DIM_3D, 0,
+   result = build_pipeline(device, VK_IMAGE_ASPECT_DEPTH_BIT, 
GLSL_SAMPLER_DIM_3D,
+                           VK_FORMAT_D32_SFLOAT,
                            &device->meta_state.blit.depth_only_3d_pipeline);
    if (result != VK_SUCCESS)
       goto fail;
@@ -1028,80 +891,23 @@ radv_device_init_meta_blit_stencil(struct radv_device 
*device, bool on_demand)
 {
    VkResult result;
 
-   for (enum radv_blit_ds_layout ds_layout = RADV_BLIT_DS_LAYOUT_TILE_ENABLE;
-        ds_layout < RADV_BLIT_DS_LAYOUT_COUNT; ds_layout++) {
-      VkImageLayout layout = radv_meta_blit_ds_to_layout(ds_layout);
-      result = radv_CreateRenderPass2(
-         radv_device_to_handle(device),
-         &(VkRenderPassCreateInfo2){
-            .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,
-            .attachmentCount = 1,
-            .pAttachments =
-               &(VkAttachmentDescription2){
-                  .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
-                  .format = VK_FORMAT_S8_UINT,
-                  .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
-                  .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
-                  .initialLayout = layout,
-                  .finalLayout = layout,
-               },
-            .subpassCount = 1,
-            .pSubpasses =
-               &(VkSubpassDescription2){
-                  .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
-                  .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS,
-                  .inputAttachmentCount = 0,
-                  .colorAttachmentCount = 0,
-                  .pColorAttachments = NULL,
-                  .pResolveAttachments = NULL,
-                  .pDepthStencilAttachment =
-                     &(VkAttachmentReference2){
-                        .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,
-                        .attachment = 0,
-                        .layout = layout,
-                     },
-                  .preserveAttachmentCount = 0,
-                  .pPreserveAttachments = NULL,
-               },
-            .dependencyCount = 2,
-            .pDependencies =
-               (VkSubpassDependency2[]){{.sType = 
VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,
-                                         .srcSubpass = VK_SUBPASS_EXTERNAL,
-                                         .dstSubpass = 0,
-                                         .srcStageMask = 
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                         .dstStageMask = 
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-                                         .srcAccessMask = 0,
-                                         .dstAccessMask = 0,
-                                         .dependencyFlags = 0},
-                                        {.sType = 
VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,
-                                         .srcSubpass = 0,
-                                         .dstSubpass = VK_SUBPASS_EXTERNAL,
-                                         .srcStageMask = 
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                         .dstStageMask = 
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-                                         .srcAccessMask = 0,
-                                         .dstAccessMask = 0,
-                                         .dependencyFlags = 0}},
-
-         },
-         &device->meta_state.alloc, 
&device->meta_state.blit.stencil_only_rp[ds_layout]);
-   }
-   if (result != VK_SUCCESS)
-      goto fail;
-
    if (on_demand)
       return VK_SUCCESS;
 
-   result = build_pipeline(device, VK_IMAGE_ASPECT_STENCIL_BIT, 
GLSL_SAMPLER_DIM_1D, 0,
+   result = build_pipeline(device, VK_IMAGE_ASPECT_STENCIL_BIT, 
GLSL_SAMPLER_DIM_1D,
+                           VK_FORMAT_S8_UINT,
                            &device->meta_state.blit.stencil_only_1d_pipeline);
    if (result != VK_SUCCESS)
       goto fail;
 
-   result = build_pipeline(device, VK_IMAGE_ASPECT_STENCIL_BIT, 
GLSL_SAMPLER_DIM_2D, 0,
+   result = build_pipeline(device, VK_IMAGE_ASPECT_STENCIL_BIT, 
GLSL_SAMPLER_DIM_2D,
+                           VK_FORMAT_S8_UINT,
                            &device->meta_state.blit.stencil_only_2d_pipeline);
    if (result != VK_SUCCESS)
       goto fail;
 
-   result = build_pipeline(device, VK_IMAGE_ASPECT_STENCIL_BIT, 
GLSL_SAMPLER_DIM_3D, 0,
+   result = build_pipeline(device, VK_IMAGE_ASPECT_STENCIL_BIT, 
GLSL_SAMPLER_DIM_3D,
+                           VK_FORMAT_S8_UINT,
                            &device->meta_state.blit.stencil_only_3d_pipeline);
    if (result != VK_SUCCESS)
       goto fail;
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index b54395accd2..196d1bf2154 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -489,8 +489,6 @@ struct radv_meta_state {
    VkDescriptorSetLayout clear_dcc_comp_to_single_ds_layout;
 
    struct {
-      VkRenderPass render_pass[NUM_META_FS_KEYS][RADV_META_DST_LAYOUT_COUNT];
-
       /** Pipeline that blits from a 1D image. */
       VkPipeline pipeline_1d_src[NUM_META_FS_KEYS];
 
@@ -500,12 +498,10 @@ struct radv_meta_state {
       /** Pipeline that blits from a 3D image. */
       VkPipeline pipeline_3d_src[NUM_META_FS_KEYS];
 
-      VkRenderPass depth_only_rp[RADV_BLIT_DS_LAYOUT_COUNT];
       VkPipeline depth_only_1d_pipeline;
       VkPipeline depth_only_2d_pipeline;
       VkPipeline depth_only_3d_pipeline;
 
-      VkRenderPass stencil_only_rp[RADV_BLIT_DS_LAYOUT_COUNT];
       VkPipeline stencil_only_1d_pipeline;
       VkPipeline stencil_only_2d_pipeline;
       VkPipeline stencil_only_3d_pipeline;

Reply via email to