Added few more stubs so that control reaches to DestroyDevice().
[mesa.git] / src / amd / vulkan / radv_meta_blit2d.c
index c99d59c65d082b00e81babbf21030149265b6b37..47939b2244306fc94af29ce05aacb35d2e7ca3b4 100644 (file)
@@ -79,7 +79,7 @@ create_iview(struct radv_cmd_buffer *cmd_buffer,
                                             .baseArrayLayer = surf->layer,
                                             .layerCount = 1
                                     },
-                            });
+                            }, NULL);
 }
 
 static void
@@ -256,13 +256,17 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer,
                unsigned i;
                for_each_bit(i, dst->aspect_mask) {
                        unsigned aspect_mask = 1u << i;
+                       unsigned src_aspect_mask = aspect_mask;
                        VkFormat depth_format = 0;
                        if (aspect_mask == VK_IMAGE_ASPECT_STENCIL_BIT)
                                depth_format = vk_format_stencil_only(dst->image->vk_format);
                        else if (aspect_mask == VK_IMAGE_ASPECT_DEPTH_BIT)
                                depth_format = vk_format_depth_only(dst->image->vk_format);
+                       else if (src_img)
+                               src_aspect_mask = src_img->aspect_mask;
+
                        struct blit2d_src_temps src_temps;
-                       blit2d_bind_src(cmd_buffer, src_img, src_buf, &src_temps, src_type, depth_format, aspect_mask, log2_samples);
+                       blit2d_bind_src(cmd_buffer, src_img, src_buf, &src_temps, src_type, depth_format, src_aspect_mask, log2_samples);
 
                        struct blit2d_dst_temps dst_temps;
                        blit2d_bind_dst(cmd_buffer, dst, rects[r].dst_x + rects[r].width,
@@ -280,7 +284,10 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer,
                                        VK_SHADER_STAGE_VERTEX_BIT, 0, 16,
                                        vertex_push_constants);
 
-                       if (aspect_mask == VK_IMAGE_ASPECT_COLOR_BIT) {
+                       if (aspect_mask == VK_IMAGE_ASPECT_COLOR_BIT ||
+                           aspect_mask == VK_IMAGE_ASPECT_PLANE_0_BIT ||
+                           aspect_mask == VK_IMAGE_ASPECT_PLANE_1_BIT ||
+                           aspect_mask == VK_IMAGE_ASPECT_PLANE_2_BIT) {
                                unsigned fs_key = radv_format_meta_fs_key(dst_temps.iview.vk_format);
                                unsigned dst_layout = radv_meta_dst_layout_from_layout(dst->current_layout);
 
@@ -292,19 +299,21 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer,
                                        }
                                }
 
-                               radv_CmdBeginRenderPass(radv_cmd_buffer_to_handle(cmd_buffer),
-                                                       &(VkRenderPassBeginInfo) {
-                                                               .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
+                               radv_cmd_buffer_begin_render_pass(cmd_buffer,
+                                                                 &(VkRenderPassBeginInfo) {
+                                                                       .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
                                                                        .renderPass = device->meta_state.blit2d_render_passes[fs_key][dst_layout],
                                                                        .framebuffer = dst_temps.fb,
                                                                        .renderArea = {
-                                                                       .offset = { rects[r].dst_x, rects[r].dst_y, },
-                                                                       .extent = { rects[r].width, rects[r].height },
-                                                               },
+                                                                               .offset = { rects[r].dst_x, rects[r].dst_y, },
+                                                                               .extent = { rects[r].width, rects[r].height },
+                                                                       },
                                                                        .clearValueCount = 0,
-                                                                               .pClearValues = NULL,
-                                                                               }, VK_SUBPASS_CONTENTS_INLINE);
+                                                                       .pClearValues = NULL,
+                                                                 });
 
+                               radv_cmd_buffer_set_subpass(cmd_buffer,
+                                                           &cmd_buffer->state.pass->subpasses[0]);
 
                                bind_pipeline(cmd_buffer, src_type, fs_key, log2_samples);
                        } else if (aspect_mask == VK_IMAGE_ASPECT_DEPTH_BIT) {
@@ -318,19 +327,21 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer,
                                        }
                                }
 
-                               radv_CmdBeginRenderPass(radv_cmd_buffer_to_handle(cmd_buffer),
-                                                       &(VkRenderPassBeginInfo) {
-                                                               .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
+                               radv_cmd_buffer_begin_render_pass(cmd_buffer,
+                                                                 &(VkRenderPassBeginInfo) {
+                                                                       .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
                                                                        .renderPass = device->meta_state.blit2d_depth_only_rp[ds_layout],
                                                                        .framebuffer = dst_temps.fb,
                                                                        .renderArea = {
-                                                                       .offset = { rects[r].dst_x, rects[r].dst_y, },
-                                                                       .extent = { rects[r].width, rects[r].height },
-                                                               },
+                                                                               .offset = { rects[r].dst_x, rects[r].dst_y, },
+                                                                               .extent = { rects[r].width, rects[r].height },
+                                                                       },
                                                                        .clearValueCount = 0,
-                                                                               .pClearValues = NULL,
-                                                                               }, VK_SUBPASS_CONTENTS_INLINE);
+                                                                       .pClearValues = NULL,
+                                                                 });
 
+                               radv_cmd_buffer_set_subpass(cmd_buffer,
+                                                           &cmd_buffer->state.pass->subpasses[0]);
 
                                bind_depth_pipeline(cmd_buffer, src_type, log2_samples);
 
@@ -345,19 +356,21 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer,
                                        }
                                }
 
-                               radv_CmdBeginRenderPass(radv_cmd_buffer_to_handle(cmd_buffer),
-                                                       &(VkRenderPassBeginInfo) {
-                                                               .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
+                               radv_cmd_buffer_begin_render_pass(cmd_buffer,
+                                                                 &(VkRenderPassBeginInfo) {
+                                                                       .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
                                                                        .renderPass = device->meta_state.blit2d_stencil_only_rp[ds_layout],
                                                                        .framebuffer = dst_temps.fb,
                                                                        .renderArea = {
-                                                                       .offset = { rects[r].dst_x, rects[r].dst_y, },
-                                                                       .extent = { rects[r].width, rects[r].height },
-                                                               },
+                                                                               .offset = { rects[r].dst_x, rects[r].dst_y, },
+                                                                               .extent = { rects[r].width, rects[r].height },
+                                                                       },
                                                                        .clearValueCount = 0,
-                                                                               .pClearValues = NULL,
-                                                                               }, VK_SUBPASS_CONTENTS_INLINE);
+                                                                       .pClearValues = NULL,
+                                                                  });
 
+                               radv_cmd_buffer_set_subpass(cmd_buffer,
+                                                           &cmd_buffer->state.pass->subpasses[0]);
 
                                bind_stencil_pipeline(cmd_buffer, src_type, log2_samples);
                        } else
@@ -380,7 +393,7 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer,
 
 
                        radv_CmdDraw(radv_cmd_buffer_to_handle(cmd_buffer), 3, 1, 0, 0);
-                       radv_CmdEndRenderPass(radv_cmd_buffer_to_handle(cmd_buffer));
+                       radv_cmd_buffer_end_render_pass(cmd_buffer);
 
 fail_pipeline:
                        /* At the point where we emit the draw call, all data from the
@@ -504,7 +517,6 @@ build_nir_texel_fetch(struct nir_builder *b, struct radv_device *device,
        }
        if (is_multisampled) {
                sample_idx = nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_sample_id);
-               sample_idx->num_components = 1;
                nir_ssa_dest_init(&sample_idx->instr, &sample_idx->dest, 1, 32, "sample_idx");
                nir_builder_instr_insert(b, &sample_idx->instr);
        }
@@ -691,7 +703,7 @@ radv_device_finish_meta_blit2d_state(struct radv_device *device)
                                       state->blit2d_stencil_only_rp[j], &state->alloc);
        }
 
-       for (unsigned log2_samples = 0; log2_samples < 1 + MAX_SAMPLES_LOG2; ++log2_samples) {
+       for (unsigned log2_samples = 0; log2_samples < MAX_SAMPLES_LOG2; ++log2_samples) {
                for (unsigned src = 0; src < BLIT2D_NUM_SRC_TYPES; src++) {
                        radv_DestroyPipelineLayout(radv_device_to_handle(device),
                                                   state->blit2d[log2_samples].p_layouts[src],
@@ -810,7 +822,27 @@ blit2d_init_color_pipeline(struct radv_device *device,
                                                .preserveAttachmentCount = 0,
                                                .pPreserveAttachments = NULL,
                                                },
-                                               .dependencyCount = 0,
+                                               .dependencyCount = 2,
+                                               .pDependencies = (VkSubpassDependency[]) {
+                                                       {
+                                                               .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
+                                                       },
+                                                       {
+                                                               .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.blit2d_render_passes[fs_key][dst_layout]);
                }
        }
@@ -981,7 +1013,27 @@ blit2d_init_depth_only_pipeline(struct radv_device *device,
                                                                       .preserveAttachmentCount = 0,
                                                                       .pPreserveAttachments = NULL,
                                                               },
-                                                              .dependencyCount = 0,
+                                                              .dependencyCount = 2,
+                                                              .pDependencies = (VkSubpassDependency[]) {
+                                                               {
+                                                                       .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
+                                                               },
+                                                               {
+                                                                       .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.blit2d_depth_only_rp[ds_layout]);
                }
        }
@@ -1151,7 +1203,27 @@ blit2d_init_stencil_only_pipeline(struct radv_device *device,
                                                                       .preserveAttachmentCount = 0,
                                                                       .pPreserveAttachments = NULL,
                                                               },
-                                                              .dependencyCount = 0,
+                                                              .dependencyCount = 2,
+                                                              .pDependencies = (VkSubpassDependency[]) {
+                                                               {
+                                                                       .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
+                                                               },
+                                                               {
+                                                                       .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.blit2d_stencil_only_rp[ds_layout]);
                }
        }
@@ -1303,7 +1375,7 @@ radv_device_init_meta_blit2d_state(struct radv_device *device, bool on_demand)
        VkResult result;
        bool create_3d = device->physical_device->rad_info.chip_class >= GFX9;
 
-       for (unsigned log2_samples = 0; log2_samples < 1 + MAX_SAMPLES_LOG2; log2_samples++) {
+       for (unsigned log2_samples = 0; log2_samples < MAX_SAMPLES_LOG2; log2_samples++) {
                for (unsigned src = 0; src < BLIT2D_NUM_SRC_TYPES; src++) {
                        if (src == BLIT2D_SRC_TYPE_IMAGE_3D && !create_3d)
                                continue;