我正在查看文档IDXGIKeyedMutex
,但我对以下内容有点不确定:
完成对表面的渲染后,必须调用 ReleaseSync 方法。
我的问题是“当你完成渲染”是什么意思?是在删除纹理作为即时上下文的渲染目标之后,当我调用Flush
即时上下文时,还是在调用之前需要某种其他形式的 GPU 围栏/同步ReleaseSync
?
还有为什么D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX
首选D3D11_RESOURCE_MISC_SHARED
呢?
我正在查看文档IDXGIKeyedMutex
,但我对以下内容有点不确定:
完成对表面的渲染后,必须调用 ReleaseSync 方法。
我的问题是“当你完成渲染”是什么意思?是在删除纹理作为即时上下文的渲染目标之后,当我调用Flush
即时上下文时,还是在调用之前需要某种其他形式的 GPU 围栏/同步ReleaseSync
?
还有为什么D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX
首选D3D11_RESOURCE_MISC_SHARED
呢?
在调用 ID3D11DeviceContext::Draw 调用或其他调用以发出 GPU 命令以写入缓冲区(即 ID3D11DeviceContext::CopyResource)之后,您应该调用 IDXGIKeyedMutex::ReleaseSync。您不需要显式调用 Flush。有关使用 AcquireSync/ReleaseSync 的示例,请查看http://code.msdn.microsoft.com/DXGISyncSharedSurf
D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX 优于 D3D11_RESOURCE_MISC_SHARED,因为它可以与 D3D11_RESOURCE_MISC_SHARED_NTHANDLE 一起使用,从而为跨进程表面共享提供更好的安全性。