// 1. Define the Dependency
auto localReadBarrier = vk::ImageMemoryBarrier2{
.srcStageMask = vk::PipelineStageFlagBits2::eColorAttachmentOutput,
.srcAccessMask = vk::AccessFlagBits2::eColorAttachmentWrite,
.dstStageMask = vk::PipelineStageFlagBits2::eFragmentShader,
.dstAccessMask = vk::AccessFlagBits2::eInputAttachmentRead,
.oldLayout = vk::ImageLayout::eRenderingLocalRead,
.newLayout = vk::ImageLayout::eRenderingLocalRead,
.image = gBufferAttachment.image(),
.subresourceRange = subresourceRange
};
commandBuffer.pipelineBarrier2(vk::DependencyInfo{.imageMemoryBarrierCount = 1, .pImageMemoryBarriers = &localReadBarrier});
// 2. Perform the Rendering
// You must include the local read information in your RenderingInfo
auto localReadInfo = vk::RenderingInputAttachmentIndexInfo{
.colorAttachmentCount = 1,
.pColorAttachmentInputIndices = &colorIndex
};
auto renderingInfo = vk::RenderingInfo{
.pNext = &localReadInfo,
// ...
};
commandBuffer.beginRendering(renderingInfo);
// ... record your on-tile reads in your Slang shader ...
commandBuffer.endRendering();