mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 20:00:11 +01:00
zink: rework texture_barrier hook
according to spec, for fbfetch this should match the subpass self-dependency of * stage FRAGMENT_STAGE -> FRAGMENT_STAGE * access 0 -> INPUT_ATTACHMENT_READ zs fbfetch doesn't seem to be a thing, so that code is left for historical and/or future purposes Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15831>
This commit is contained in:
parent
aced1ac2d3
commit
4f6f34456a
1 changed files with 34 additions and 27 deletions
|
|
@ -3439,45 +3439,52 @@ static void
|
|||
zink_texture_barrier(struct pipe_context *pctx, unsigned flags)
|
||||
{
|
||||
struct zink_context *ctx = zink_context(pctx);
|
||||
VkAccessFlags dst = flags == PIPE_TEXTURE_BARRIER_FRAMEBUFFER ?
|
||||
VK_ACCESS_INPUT_ATTACHMENT_READ_BIT :
|
||||
VK_ACCESS_SHADER_READ_BIT;
|
||||
|
||||
if (!ctx->framebuffer || !ctx->framebuffer->state.num_attachments)
|
||||
return;
|
||||
|
||||
zink_batch_no_rp(ctx);
|
||||
if (ctx->fb_state.zsbuf) {
|
||||
VkMemoryBarrier dmb;
|
||||
dmb.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
|
||||
if (zink_screen(ctx->base.screen)->info.have_KHR_synchronization2) {
|
||||
VkDependencyInfo dep = {0};
|
||||
dep.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO;
|
||||
dep.dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;
|
||||
dep.memoryBarrierCount = 1;
|
||||
|
||||
VkMemoryBarrier2 dmb = {0};
|
||||
dmb.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2;
|
||||
dmb.pNext = NULL;
|
||||
dmb.srcAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
|
||||
dmb.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
|
||||
dmb.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
dmb.dstAccessMask = dst;
|
||||
dmb.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
dmb.dstStageMask = VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT;
|
||||
dep.pMemoryBarriers = &dmb;
|
||||
|
||||
/* if zs fbfetch is a thing?
|
||||
if (ctx->fb_state.zsbuf) {
|
||||
const VkPipelineStageFlagBits2 depth_flags = VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT;
|
||||
dmb.dstAccessMask |= VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT;
|
||||
dmb.srcStageMask |= depth_flags;
|
||||
dmb.dstStageMask |= depth_flags;
|
||||
}
|
||||
*/
|
||||
VKCTX(CmdPipelineBarrier2)(ctx->batch.state->cmdbuf, &dep);
|
||||
} else {
|
||||
VkMemoryBarrier bmb = {0};
|
||||
bmb.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
|
||||
bmb.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
bmb.dstAccessMask = dst;
|
||||
VKCTX(CmdPipelineBarrier)(
|
||||
ctx->batch.state->cmdbuf,
|
||||
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
|
||||
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
|
||||
0,
|
||||
1, &dmb,
|
||||
1, &bmb,
|
||||
0, NULL,
|
||||
0, NULL
|
||||
);
|
||||
}
|
||||
if (!ctx->fb_state.nr_cbufs)
|
||||
return;
|
||||
|
||||
VkMemoryBarrier bmb;
|
||||
bmb.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
|
||||
bmb.pNext = NULL;
|
||||
bmb.srcAccessMask = 0;
|
||||
bmb.dstAccessMask = 0;
|
||||
bmb.srcAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
bmb.dstAccessMask |= VK_ACCESS_SHADER_READ_BIT;
|
||||
VKCTX(CmdPipelineBarrier)(
|
||||
ctx->batch.state->cmdbuf,
|
||||
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
|
||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
|
||||
0,
|
||||
1, &bmb,
|
||||
0, NULL,
|
||||
0, NULL
|
||||
);
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue