Skip to content

Commit 3f3679e

Browse files
committed
Compute结束后增加内存屏障,解决草地在mali芯片上闪烁问题。
# Conflicts: # src/igl/vulkan/ComputeCommandEncoder.cpp
1 parent 1dd20a2 commit 3f3679e

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

src/igl/vulkan/ComputeCommandEncoder.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,20 @@ void ComputeCommandEncoder::endEncoding() {
4444

4545
isEncoding_ = false;
4646

47+
// Ensure compute shader writes (to buffers/images) are visible to subsequent
48+
// graphics passes. Without this barrier, Mali/Immortalis may read stale data
49+
// because it does not provide implicit synchronization like Adreno does.
50+
VkMemoryBarrier computeToGraphicsBarrier = {
51+
.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
52+
.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT,
53+
.dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
54+
VK_ACCESS_INDEX_READ_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT,
55+
};
56+
ctx_.vf_.vkCmdPipelineBarrier(cmdBuffer_, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
57+
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
58+
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
59+
0, 1, &computeToGraphicsBarrier, 0, nullptr, 0, nullptr);
60+
4761
for (size_t i = 0; i < numRestoreLayouts_; ++i) {
4862
const VulkanImage* const img = restoreLayout_[i];
4963
if (img->isSampledImage()) {

0 commit comments

Comments
 (0)