用于管理异步计算队列和图形队列上的任务之间的同步。
并不是所有平台都支持图形栅栏。请参阅 SystemInfo.supportsGraphicsFence。
GraphicsFence 表示 GPU 处理过程中的一个点,位于某个特定计算着色器分发或绘制调用完成之后。可用于实现异步计算队列或图形队列上运行的任务之间的同步,方法是让一个或多个队列等待,直到通过给定栅栏。在使用异步计算时,这一点非常重要,因为提高 GPU 性能的关键在于各种任务可在图形队列和异步计算队列上同时运行。
对于两个 GPU 任务分别写入和读取同一资源的情况,不需要使用 GPUFence 进行同步。Unity 会自动处理这些资源依赖关系。
GPUFence 应通过 Graphics.CreateGraphicsFence 或 CommandBuffer.CreateGraphicsFence 创建。尝试使用尚未通过这些函数之一创建的 GraphicsFence 会导致异常。
使用 GraphicsFences 有可能产生循环依赖,执行时会使 GPU 死锁。Unity 会在编辑器中检测这类循环依赖关系,如果存在,会在调用 Graphics.CreateGraphicsFence、Graphics.WaitOnGraphicsFence、Graphics.ExecuteCommandBuffer、Graphics.ExecuteCommandBufferAsync、ScriptableRenderContext.ExecuteCommandBuffer、ScriptableRenderContext.ExecuteCommandBufferAsync 后引发异常。
另请参阅:SystemInfo.supportsGraphicsFence、Graphics.CreateGraphicsFence、Graphics.WaitOnGraphicsFence、CommandBuffer.CreateGraphicsFence、CommandBuffer.WaitOnAsyncGraphicsFence、Graphics.ExecuteCommandBuffer、Graphics.ExecuteCommandBufferAsync、ScriptableRenderContext.ExecuteCommandBuffer、ScriptableRenderContext.ExecuteCommandBufferAsync。
passed | 确定 GraphicsFence 是否已通过。允许 CPU 确定 GPU 是否已通过其处理过程中由 GraphicsFence 表示的点。 |