我有两个队列,队列 A 和队列 B,来自不同的队列系列。队列A当前拥有独占共享模式的镜像所有权。我想提前将图像的所有权释放给队列B,因为我知道它将是下一个使用它的人。但是,我不知道布局队列 B 是否需要图像。
问题是释放屏障(在队列 A 上)和获取屏障(在队列 B 上)都需要指定源图像布局和目标图像布局。在事先不知道布局的情况下,如何将图像发布到队列B?
我认为最好的方法是在记录到队列 B 时使用两个图像内存屏障:第一个从队列 A 获取图像(不更改布局),第二个执行布局转换。问题是我不知道如何创建依赖项以确保获取图像后发生布局转换。有没有办法在两个连续图像内存屏障之间创建这种依赖关系?
队列 A 必须知道队列 B 想要什么布局,或者队列 B 必须知道队列 A 将图像保留在哪个布局队列中。也就是说,其中一个队列必须知道另一个队列正在使用什么布局;他们不可能都互相不了解。
当您执行释放/获取对时,释放的目标访问掩码将被忽略,并且目标的源访问掩码将被忽略。本质上,该对的源访问掩码是释放的源访问掩码,并且该对的目的地访问掩码是获取的目的地访问掩码。
因此,如果您希望队列 B 在获取之后执行布局转换,则该屏障需要与获取屏障的目标范围和访问掩码正确同步。