From 9df8c4ba96c12ea93abcd26640930ac7b27fbadd Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 19 Aug 2020 14:45:09 -0400 Subject: [PATCH] zink: take struct zink_batch param instead of direct cmdbuf in barrier helpers this is weird and prevents us from verifying batch states Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/gallium/drivers/zink/zink_clear.c | 4 ++-- src/gallium/drivers/zink/zink_context.c | 12 ++++++------ src/gallium/drivers/zink/zink_context.h | 4 ++-- src/gallium/drivers/zink/zink_draw.c | 14 +++++++------- src/gallium/drivers/zink/zink_query.c | 2 +- src/gallium/drivers/zink/zink_resource.c | 10 +++++----- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/gallium/drivers/zink/zink_clear.c b/src/gallium/drivers/zink/zink_clear.c index 73c0ae7..fa583c6 100644 --- a/src/gallium/drivers/zink/zink_clear.c +++ b/src/gallium/drivers/zink/zink_clear.c @@ -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); } diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index f68261f..73570e9 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -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, diff --git a/src/gallium/drivers/zink/zink_context.h b/src/gallium/drivers/zink/zink_context.h index 1dd832f..dcfc9a1 100644 --- a/src/gallium/drivers/zink/zink_context.h +++ b/src/gallium/drivers/zink/zink_context.h @@ -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 diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c index d2c6c95..7a07f0b 100644 --- a/src/gallium/drivers/zink/zink_draw.c +++ b/src/gallium/drivers/zink/zink_draw.c @@ -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); } } diff --git a/src/gallium/drivers/zink/zink_query.c b/src/gallium/drivers/zink/zink_query.c index 8ea20df..4b613c4 100644 --- a/src/gallium/drivers/zink/zink_query.c +++ b/src/gallium/drivers/zink/zink_query.c @@ -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 */ diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index f6cfc0d..d49c96a 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -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); } } -- 2.7.4