https://developer.apple.com/documentation/metal/advanced_command_setup/cpu_and_gpu_synchronization
dynamic vertex buffer通常每帧都要cpu更新里面的数据内容同时gpu就拿来画
1.顶点数据同步
并行这部分cpu gpu工作的解决方案
通常是 开多块vb让cpu gpu可以并行工作
但这个时候 这块资源gpu是否用完 cpu能不能拿来复用 (延迟三帧的情况下 )
用信号量来同步cpu工作
cpu wait until 收到gpu 那边执行完毕的signol (dx应该是用fence)
注册
[commandBuffer addCompletedHandler:^(id<MTLCommandBuffer> buffer) { dispatch_semaphore_signal(block_sema); }];
wait
_inFlightSemaphore = dispatch_semaphore_create(MaxBuffersInFlight);
dispatch_semaphore_wait(_inFlightSemaphore, DISPATCH_TIME_FOREVER);
==================================
2.用nosharedevent 同步一个device (看着还是像dx12 的fence)
https://developer.apple.com/documentation/metal/advanced_command_setup/synchronizing_events_within_a_single_device?language=objc
这个还是比较好理解的 在cmd里面加上signal
wait的那个线程就会一直等到这个signal再开始唤起 可以解决资源依赖