I did a simple thing where I wrote some data to a device-local memory buffer using a compute shader, and then copied the output to an image using vkCmdCopyBufferToImage. This worked fine on nVidia but not so much on Mali - which is not surprising, because I had forgotten to add the following barrier:
VkMemoryBarrier barrier{ VK_STRUCTURE_TYPE_MEMORY_BARRIER };
barrier.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT;
barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
vkCmdPipelineBarrier(cmdInit, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 1, &barrier, 0, nullptr, 0, nullptr);
Adding this fixed it right up. However, the validation layer didn't trigger without it even though this barrier is clearly required, which is the bug I'm reporting here.
I did a simple thing where I wrote some data to a device-local memory buffer using a compute shader, and then copied the output to an image using vkCmdCopyBufferToImage. This worked fine on nVidia but not so much on Mali - which is not surprising, because I had forgotten to add the following barrier:
Adding this fixed it right up. However, the validation layer didn't trigger without it even though this barrier is clearly required, which is the bug I'm reporting here.