mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 22:20:09 +01:00
zink: rework texture_barrier hook
we can be more precise with this and avoid flushing unnecessarily Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9791>
This commit is contained in:
parent
8578adeaa6
commit
812f7ecb13
1 changed files with 44 additions and 3 deletions
|
|
@ -1957,9 +1957,50 @@ static void
|
|||
zink_texture_barrier(struct pipe_context *pctx, unsigned flags)
|
||||
{
|
||||
struct zink_context *ctx = zink_context(pctx);
|
||||
if (ctx->batch.has_work)
|
||||
pctx->flush(pctx, NULL, 0);
|
||||
zink_flush_queue(ctx);
|
||||
if (!ctx->framebuffer || !ctx->framebuffer->state.num_attachments)
|
||||
return;
|
||||
|
||||
VkMemoryBarrier bmb;
|
||||
bmb.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
|
||||
bmb.pNext = NULL;
|
||||
bmb.srcAccessMask = 0;
|
||||
bmb.dstAccessMask = 0;
|
||||
struct zink_surface *surf = zink_surface(ctx->framebuffer->surfaces[ctx->framebuffer->state.num_attachments - 1]);
|
||||
struct zink_resource *res = zink_resource(surf->base.texture);
|
||||
zink_batch_no_rp(ctx);
|
||||
if (res->aspect != VK_IMAGE_ASPECT_COLOR_BIT) {
|
||||
VkMemoryBarrier dmb;
|
||||
dmb.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
|
||||
dmb.pNext = NULL;
|
||||
dmb.srcAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
|
||||
dmb.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT;
|
||||
vkCmdPipelineBarrier(
|
||||
ctx->batch.state->cmdbuf,
|
||||
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
|
||||
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
|
||||
0,
|
||||
1, &dmb,
|
||||
0, NULL,
|
||||
0, NULL
|
||||
);
|
||||
} else {
|
||||
bmb.srcAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
bmb.dstAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_READ_BIT;
|
||||
}
|
||||
if (ctx->framebuffer->state.num_attachments > 1) {
|
||||
bmb.srcAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
bmb.dstAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_READ_BIT;
|
||||
}
|
||||
if (bmb.srcAccessMask)
|
||||
vkCmdPipelineBarrier(
|
||||
ctx->batch.state->cmdbuf,
|
||||
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
||||
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
||||
0,
|
||||
1, &bmb,
|
||||
0, NULL,
|
||||
0, NULL
|
||||
);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue