zink: take struct zink_batch param instead of direct cmdbuf in barrier helpers
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 19 Aug 2020 18:45:09 +0000 (14:45 -0400)
committerMarge Bot <eric+marge@anholt.net>
Fri, 19 Feb 2021 02:05:13 +0000 (02:05 +0000)
this is weird and prevents us from verifying batch states

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8945>

src/gallium/drivers/zink/zink_clear.c
src/gallium/drivers/zink/zink_context.c
src/gallium/drivers/zink/zink_context.h
src/gallium/drivers/zink/zink_draw.c
src/gallium/drivers/zink/zink_query.c
src/gallium/drivers/zink/zink_resource.c

index 73c0ae7..fa583c6 100644 (file)
@@ -127,7 +127,7 @@ clear_color_no_rp(struct zink_batch *batch, struct zink_resource *res, const uni
    color.float32[3] = pcolor->f[3];
 
    if (res->layout != VK_IMAGE_LAYOUT_GENERAL && res->layout != VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
-      zink_resource_barrier(batch->cmdbuf, res, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0);
+      zink_resource_barrier(batch, res, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0);
    vkCmdClearColorImage(batch->cmdbuf, res->image, res->layout, &color, 1, &range);
 }
 
@@ -144,7 +144,7 @@ clear_zs_no_rp(struct zink_batch *batch, struct zink_resource *res, VkImageAspec
    VkClearDepthStencilValue zs_value = {depth, stencil};
 
    if (res->layout != VK_IMAGE_LAYOUT_GENERAL && res->layout != VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
-      zink_resource_barrier(batch->cmdbuf, res, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0);
+      zink_resource_barrier(batch, res, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0);
    vkCmdClearDepthStencilImage(batch->cmdbuf, res->image, res->layout, &zs_value, 1, &range);
 }
 
index f68261f..73570e9 100644 (file)
@@ -809,14 +809,14 @@ framebuffer_state_buffer_barriers_setup(struct zink_context *ctx,
          surf = ctx->framebuffer->null_surface;
       struct zink_resource *res = zink_resource(surf->texture);
       if (res->layout != VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL)
-         zink_resource_barrier(batch->cmdbuf, res,
+         zink_resource_barrier(batch, res,
                                VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, 0);
    }
 
    if (state->zsbuf) {
       struct zink_resource *res = zink_resource(state->zsbuf->texture);
       if (res->layout != VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL)
-         zink_resource_barrier(batch->cmdbuf, res,
+         zink_resource_barrier(batch, res,
                                VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, 0);
    }
 }
@@ -1086,7 +1086,7 @@ zink_resource_image_needs_barrier(struct zink_resource *res, VkImageLayout new_l
 }
 
 void
-zink_resource_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res,
+zink_resource_barrier(struct zink_batch *batch, struct zink_resource *res,
                       VkImageLayout new_layout, VkPipelineStageFlags pipeline)
 {
    if (!pipeline)
@@ -1112,7 +1112,7 @@ zink_resource_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res,
       isr
    };
    vkCmdPipelineBarrier(
-      cmdbuf,
+      batch->cmdbuf,
       res->access_stage ?: VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
       pipeline,
       0,
@@ -1175,7 +1175,7 @@ zink_resource_buffer_needs_barrier(struct zink_resource *res, VkAccessFlags flag
 }
 
 void
-zink_resource_buffer_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline)
+zink_resource_buffer_barrier(struct zink_batch *batch, struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline)
 {
    if (!pipeline)
       pipeline = pipeline_access_stage(flags);
@@ -1194,7 +1194,7 @@ zink_resource_buffer_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res,
    };
 
    vkCmdPipelineBarrier(
-      cmdbuf,
+      batch->cmdbuf,
       res->access_stage ? res->access_stage : pipeline_access_stage(res->access),
       pipeline,
       0,
index 1dd832f..dcfc9a1 100644 (file)
@@ -215,12 +215,12 @@ bool
 zink_resource_buffer_needs_barrier(struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline);
 
 void
-zink_resource_buffer_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline);
+zink_resource_buffer_barrier(struct zink_batch *batch, struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline);
 
 bool
 zink_resource_image_needs_barrier(struct zink_resource *res, VkImageLayout new_layout, VkPipelineStageFlags pipeline);
 void
-zink_resource_barrier(VkCommandBuffer cmdbuf, struct zink_resource *res,
+zink_resource_barrier(struct zink_batch *batch, struct zink_resource *res,
                       VkImageLayout new_layout, VkPipelineStageFlags pipeline);
 
 bool
index d2c6c95..7a07f0b 100644 (file)
@@ -59,10 +59,10 @@ zink_emit_xfb_counter_barrier(struct zink_context *ctx)
          continue;
       struct zink_resource *res = zink_resource(t->counter_buffer);
       if (t->counter_buffer_valid)
-          zink_resource_buffer_barrier(batch->cmdbuf, res, VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT,
+          zink_resource_buffer_barrier(batch, res, VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT,
                                        VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT);
       else
-          zink_resource_buffer_barrier(batch->cmdbuf, res, VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT,
+          zink_resource_buffer_barrier(batch, res, VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT,
                                        VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT);
    }
    ctx->xfb_barrier = false;
@@ -83,7 +83,7 @@ zink_emit_xfb_vertex_input_barrier(struct zink_context *ctx, struct zink_resourc
     * - 20.3.1. Drawing Transform Feedback
     */
    struct zink_batch *batch = zink_batch_no_rp(ctx);
-   zink_resource_buffer_barrier(batch->cmdbuf, res, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
+   zink_resource_buffer_barrier(batch, res, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
                                 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT);
 }
 
@@ -111,7 +111,7 @@ zink_emit_stream_output_targets(struct pipe_context *pctx)
                                              VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT,
                                              VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT)) {
          batch = zink_batch_no_rp(ctx);
-         zink_resource_buffer_barrier(batch->cmdbuf, zink_resource(t->base.buffer),
+         zink_resource_buffer_barrier(batch, zink_resource(t->base.buffer),
                                       VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT, VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT);
       }
       zink_batch_reference_resource_rw(batch, zink_resource(t->base.buffer), true);
@@ -137,7 +137,7 @@ barrier_vertex_buffers(struct zink_context *ctx)
          if (zink_resource_buffer_needs_barrier(res, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
                                                 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)) {
             struct zink_batch *batch = zink_batch_no_rp(ctx);
-            zink_resource_buffer_barrier(batch->cmdbuf, res, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
+            zink_resource_buffer_barrier(batch, res, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
                                          VK_PIPELINE_STAGE_VERTEX_INPUT_BIT);
          }
       }
@@ -463,10 +463,10 @@ update_descriptors(struct zink_context *ctx, struct zink_screen *screen, bool is
             batch = zink_batch_no_rp(ctx);
 
          if (transitions[i].res->base.target == PIPE_BUFFER)
-            zink_resource_buffer_barrier(batch->cmdbuf, transitions[i].res,
+            zink_resource_buffer_barrier(batch, transitions[i].res,
                                          transitions[i].layout, transitions[i].stage);
          else
-            zink_resource_barrier(batch->cmdbuf, transitions[i].res,
+            zink_resource_barrier(batch, transitions[i].res,
                                   transitions[i].layout, transitions[i].stage);
       }
    }
index 8ea20df..4b613c4 100644 (file)
@@ -799,7 +799,7 @@ zink_get_query_result_resource(struct pipe_context *pctx,
          struct zink_batch *batch = get_batch_for_query(ctx, query, true);
          /* if it's a single query that doesn't need special handling, we can copy it and be done */
          zink_batch_reference_resource_rw(batch, res, true);
-         zink_resource_buffer_barrier(batch->cmdbuf, res, VK_ACCESS_TRANSFER_WRITE_BIT, 0);
+         zink_resource_buffer_barrier(batch, res, VK_ACCESS_TRANSFER_WRITE_BIT, 0);
          vkCmdCopyQueryPoolResults(batch->cmdbuf, query->query_pool, query_id, 1, res->buffer,
                                    offset, 0, size_flags);
          /* this is required for compute batch sync and will be removed later */
index f6cfc0d..d49c96a 100644 (file)
@@ -449,12 +449,12 @@ zink_transfer_copy_bufimage(struct zink_context *ctx,
 
    if (buf2img) {
       if (res->layout != VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) {
-         zink_resource_barrier(batch->cmdbuf, res,
+         zink_resource_barrier(batch, res,
                                VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0);
       }
    } else {
       if (res->layout != VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL) {
-         zink_resource_barrier(batch->cmdbuf, res,
+         zink_resource_barrier(batch, res,
                                VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, 0);
       }
    }
@@ -757,15 +757,15 @@ zink_resource_setup_transfer_layouts(struct zink_batch *batch, struct zink_resou
        * VK_IMAGE_LAYOUT_GENERAL. And since this isn't a present-related
        * operation, VK_IMAGE_LAYOUT_GENERAL seems most appropriate.
        */
-      zink_resource_barrier(batch->cmdbuf, src,
+      zink_resource_barrier(batch, src,
                             VK_IMAGE_LAYOUT_GENERAL, VK_PIPELINE_STAGE_TRANSFER_BIT);
    } else {
       if (src->layout != VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL)
-         zink_resource_barrier(batch->cmdbuf, src,
+         zink_resource_barrier(batch, src,
                                VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT);
 
       if (dst->layout != VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
-         zink_resource_barrier(batch->cmdbuf, dst,
+         zink_resource_barrier(batch, dst,
                                VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT);
    }
 }