radv: Fix various non-critical integer overflows
[mesa.git] / src / amd / vulkan / radv_meta_resolve_fs.c
index 1d6427b73fb1982f1bce0023f7f2021b42aee5e4..12ff91ab3f33ddf3e4a5ab05929304502d3b7b32 100644 (file)
@@ -231,7 +231,27 @@ create_resolve_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, rp + dst_layout);
        }
 
@@ -318,7 +338,7 @@ enum {
 };
 
 static const char *
-get_resolve_mode_str(VkResolveModeFlagBitsKHR resolve_mode)
+get_resolve_mode_str(VkResolveModeFlagBits resolve_mode)
 {
        switch (resolve_mode) {
        case VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR:
@@ -337,7 +357,7 @@ get_resolve_mode_str(VkResolveModeFlagBitsKHR resolve_mode)
 static nir_shader *
 build_depth_stencil_resolve_fragment_shader(struct radv_device *dev, int samples,
                                            int index,
-                                           VkResolveModeFlagBitsKHR resolve_mode)
+                                           VkResolveModeFlagBits resolve_mode)
 {
        nir_builder b;
        char name[64];
@@ -454,7 +474,7 @@ static VkResult
 create_depth_stencil_resolve_pipeline(struct radv_device *device,
                                      int samples_log2,
                                      int index,
-                                     VkResolveModeFlagBitsKHR resolve_mode)
+                                     VkResolveModeFlagBits resolve_mode)
 {
        VkRenderPass *render_pass;
        VkPipeline *pipeline;
@@ -535,7 +555,7 @@ create_depth_stencil_resolve_pipeline(struct radv_device *device,
                                                        .pAttachments = &(VkAttachmentDescription) {
                                                                .format = src_format,
                                                                .loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
-                                                               .storeOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+                                                               .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
                                                                .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
                                                                .stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE,
                                                                .initialLayout = VK_IMAGE_LAYOUT_GENERAL,
@@ -555,7 +575,27 @@ create_depth_stencil_resolve_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, render_pass);
        }
 
@@ -608,7 +648,12 @@ create_depth_stencil_resolve_pipeline(struct radv_device *device,
                        .cullMode = VK_CULL_MODE_NONE,
                        .frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE
                },
-               .pMultisampleState = NULL,
+               .pMultisampleState = &(VkPipelineMultisampleStateCreateInfo) {
+                       .sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
+                       .rasterizationSamples = 1,
+                       .sampleShadingEnable = false,
+                       .pSampleMask = (VkSampleMask[]) { UINT32_MAX },
+               },
                .pColorBlendState = &(VkPipelineColorBlendStateCreateInfo) {
                        .sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
                        .attachmentCount = 0,
@@ -880,7 +925,7 @@ emit_depth_stencil_resolve(struct radv_cmd_buffer *cmd_buffer,
                           const VkOffset2D *dst_offset,
                           const VkExtent2D *resolve_extent,
                           VkImageAspectFlags aspects,
-                          VkResolveModeFlagBitsKHR resolve_mode)
+                          VkResolveModeFlagBits resolve_mode)
 {
        struct radv_device *device = cmd_buffer->device;
        const uint32_t samples = src_iview->image->info.samples;
@@ -1050,7 +1095,7 @@ void radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer,
                                                             .baseArrayLayer = src_base_layer + layer,
                                                             .layerCount = 1,
                                                     },
-                                            });
+                                            }, NULL);
 
                        struct radv_image_view dest_iview;
                        radv_image_view_init(&dest_iview, cmd_buffer->device,
@@ -1066,7 +1111,7 @@ void radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer,
                                                             .baseArrayLayer = dest_base_layer + layer,
                                                             .layerCount = 1,
                                                     },
-                                            });
+                                            }, NULL);
 
 
                        VkFramebuffer fb;
@@ -1082,20 +1127,21 @@ void radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer,
                                       .layers = 1
                                }, &cmd_buffer->pool->alloc, &fb);
 
-                       radv_CmdBeginRenderPass(radv_cmd_buffer_to_handle(cmd_buffer),
-                                               &(VkRenderPassBeginInfo) {
-                                                       .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
-                                                               .renderPass = rp,
-                                                               .framebuffer = fb,
-                                                               .renderArea = {
-                                                               .offset = { dstOffset.x, dstOffset.y, },
-                                                               .extent = { extent.width, extent.height },
-                                                       },
+                       radv_cmd_buffer_begin_render_pass(cmd_buffer,
+                                                         &(VkRenderPassBeginInfo) {
+                                                               .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
+                                                                       .renderPass = rp,
+                                                                       .framebuffer = fb,
+                                                                       .renderArea = {
+                                                                               .offset = { dstOffset.x, dstOffset.y, },
+                                                                               .extent = { extent.width, extent.height },
+                                                                       },
                                                                .clearValueCount = 0,
                                                                .pClearValues = NULL,
-                                               }, VK_SUBPASS_CONTENTS_INLINE);
-
+                                               });
 
+                       radv_cmd_buffer_set_subpass(cmd_buffer,
+                                                   &cmd_buffer->state.pass->subpasses[0]);
 
                        emit_resolve(cmd_buffer,
                                     &src_iview,
@@ -1104,7 +1150,7 @@ void radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer,
                                     &(VkOffset2D) { dstOffset.x, dstOffset.y },
                                     &(VkExtent2D) { extent.width, extent.height });
 
-                       radv_CmdEndRenderPass(radv_cmd_buffer_to_handle(cmd_buffer));
+                       radv_cmd_buffer_end_render_pass(cmd_buffer);
 
                        radv_DestroyFramebuffer(radv_device_to_handle(cmd_buffer->device), fb, &cmd_buffer->pool->alloc);
                }
@@ -1176,7 +1222,7 @@ radv_cmd_buffer_resolve_subpass_fs(struct radv_cmd_buffer *cmd_buffer)
 void
 radv_depth_stencil_resolve_subpass_fs(struct radv_cmd_buffer *cmd_buffer,
                                      VkImageAspectFlags aspects,
-                                     VkResolveModeFlagBitsKHR resolve_mode)
+                                     VkResolveModeFlagBits resolve_mode)
 {
        struct radv_framebuffer *fb = cmd_buffer->state.framebuffer;
        const struct radv_subpass *subpass = cmd_buffer->state.subpass;
@@ -1228,7 +1274,7 @@ radv_depth_stencil_resolve_subpass_fs(struct radv_cmd_buffer *cmd_buffer,
                                        .baseArrayLayer = 0,
                                        .layerCount = 1,
                                },
-                             });
+                             }, NULL);
 
        emit_depth_stencil_resolve(cmd_buffer, &tsrc_iview, dst_iview,
                                   &(VkOffset2D) { 0, 0 },