Стандартное использование барьеров относительно простое, но мне было интересно, как ведут себя два (или более) перекрывающихся барьера изображения (особенно в отношении их побочного эффекта — перехода макета). Например. (псевдокод):
begin( commandBuffer );
1: write( image );
2: imageBarrier(
image,
src=STAGE_FRAGMENT(from the write at 1:),
dst=STAGE_FRAGMENT(intended for read in FS of read at 4:),
appropriate src and dst access flags,
newLayout=A
);
3: imageBarrier(
image,
src=STAGE_FRAGMENT(from the write at 1:),
dst=STAGE_TRANSFER(intended for read by transfer of readT at 5:),
appropriate src and dst access flags,
newLayout=B
);
4: read( image ); // through vkCmdDraw -- expects layout A
5: readT( image ); // different kind of read through Transfer -- expects layout B
end( commandBuffer );
- Это вообще законно? (можете ли вы подтвердить это цитатой из спецификации?)
- Какова компоновка изображения в каждой точке программы?
- Для полноты, как правильно/наилучший способ написать это (ситуация с одним производителем, двумя потребителями)? (Поменять местами строки 3: и 4: и сделать это зависимостью чтения-чтения?)