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);
}
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);
}
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);
}
}
}
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)
isr
};
vkCmdPipelineBarrier(
- cmdbuf,
+ batch->cmdbuf,
res->access_stage ?: VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
pipeline,
0,
}
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);
};
vkCmdPipelineBarrier(
- cmdbuf,
+ batch->cmdbuf,
res->access_stage ? res->access_stage : pipeline_access_stage(res->access),
pipeline,
0,
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
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;
* - 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);
}
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);
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);
}
}
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);
}
}
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 */
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);
}
}
* 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);
}
}