所以我创建了一堆缓冲区和图像,我需要出于某种原因设置内存屏障。
我如何知道在srcAccessMask
字段中为新创建的缓冲区或图像的屏障结构指定什么,看到那时我不会为它指定访问标记?如何确定为缓冲区或图像应用的第一个内存屏障指定的初始访问标志?
为Vk*MemoryBarrier
中的其他参数指定初始值非常简单,因为我可以清楚地知道图像的原始布局,但我并不清楚{{1}的值是什么可能是我第一次设置屏障。
它是否基于在创建相关对象期间指定的用法标志?或者是否有其他方法可以用来查找?
答案 0 :(得分:3)
因此,我们假设<ListView x:Name="MyList" ItemsSource="{Binding Data}">
<ListView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding Name}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
和vkCreateImage
。
规范说明它定义了一些预定的操作。因此,假设所有工作在返回后立即完成是健康的。此外,它甚至没有记忆。
因此,任何同步需求都是绑定到它的内存。让我们假设它只是来自VK_LAYOUT_UNDEFINED
的新记忆。同样,在规范中没有说它定义了一些预定的操作。
即便如此,实际上只有两种选择。要么实现对内存没有任何作用,要么对它进行空填充(出于安全原因)。在它填充空的情况下,必须以您无法访问原始数据的方式完成(即使使用同步错误)。因此,假设记忆没有同步包袱是健康的。在它上面。
所以简单地vkAllocate
(以前没有未完成的预定操作)和srcStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT
(没有先前的写入)应该是正确的。