Open Michael-Lfx opened 5 years ago
从StagingBuffer到Image,要么vkQueueWaitIdle(),要么vkWaitForFences()。不加的话还是会有潜在同步问题,实测发现 CommandBuffer::submit 到 queue 然后立即删除 CommandBuffer,不加vkQueueWaitIdle()、vkWaitForFences()在Metal上会出错:删除处于忙碌状态的对象。
StagingBuffer
Image
vkQueueWaitIdle()
vkWaitForFences()
CommandBuffer::submit
queue
CommandBuffer
因为通过 staging buffer 传输完成之后的操作(对纹理采样或者呈现)也是一种入队,异步的操作,在barrier 之后,这些操作是绝对安全的,但是 删除对象是一种完全同步的操作,队列里的资源正在被引用这时删除是绝对会出问题的,所以如果(假设),这个删除操作也可以异步入队执行(实际不行),那么这个删除操作也是绝对安全的。
Staging Buffer 优化
vkCmdCopyBufferToImage 资源同步优化
从
StagingBuffer
到Image
,要么vkQueueWaitIdle()
,要么vkWaitForFences()
。不加的话还是会有潜在同步问题,实测发现CommandBuffer::submit
到queue
然后立即删除CommandBuffer
,不加vkQueueWaitIdle()
、vkWaitForFences()
在Metal上会出错:删除处于忙碌状态的对象。Image Layout 优化