分配内存后,VkBuffer 或 VkImage 的 VkAccessFlags 值是多少?

What would be the value of VkAccessFlags for a VkBuffer or VkImage after being allocated memory?

所以我创建了一堆缓冲区和图像,出于某种原因我需要设置一个内存屏障。

我怎么知道在 srcAccessMask 字段中为新创建的缓冲区或图像的屏障结构指定什么,因为那时我不会为它指定访问标志?我如何决定为应用于缓冲区或图像的第一个内存屏障指定哪些初始访问标志?

Vk*MemoryBarrier 中的其他参数指定初始值很容易,因为我可以清楚地知道图像的原始布局,但我不清楚 [=10= 的值是多少] 可能是第一次设关

是否基于创建相关对象时指定的使用标志?还是有其他方法可以查出来?

所以,我们假设 vkCreateImageVK_LAYOUT_UNDEFINED

规范中没有任何地方说它定义了一些预定的操作。因此,假设它的所有工作一 returns 就完成是健康的。而且,它连内存都没有。

因此任何同步需求都将是您绑定到它的内存。让我们假设它只是来自 vkAllocate 的新鲜记忆。同样,规范中也没有任何地方说它定义了一些预定的operation.

即便如此,也只有两个选择。实现要么对内存不做任何事情,要么将其空填充(出于安全原因)。如果它用空值填充它,则必须以无法访问原始数据的方式完成(即使使用同步错误)。因此,假设内存上没有 "synchronization baggage" 是健康的。

所以 srcStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT(之前没有未完成的预定操作)和 srcAccessMask = 0(之前没有写入)应该是正确的。