对于使用 D3D11_RESOURCE_MISC_GDI_COMPATIBLE 创建的纹理,ID3D11Surface1 的 GetDC/ReleaseDC 的线程安全规则是什么?
在 GetDC 和 ReleaseDC 之间,我可以与另一个线程交互 ID3D11Device 和 ID3D11DeviceContext,而不会出现数据竞争或因隐式同步而阻塞吗?还是应该避免 GPU 空闲强制为执行 GDI 渲染的线程创建单独的 D3D11Device,并通过复制到 D3D11_RESOURCE_MISC_SHARED_KEYED_MUTEX 将其传回到“主”D3D11Device?
即以下是否有效?
在 GetDC 和 ReleaseDC 之间,我可以与另一个线程交互 ID3D11Device 和 ID3D11DeviceContext,而不会出现数据竞争或因隐式同步而阻塞吗?还是应该避免 GPU 空闲强制为执行 GDI 渲染的线程创建单独的 D3D11Device,并通过复制到 D3D11_RESOURCE_MISC_SHARED_KEYED_MUTEX 将其传回到“主”D3D11Device?
即以下是否有效?
thread 1:
D3D11Device::CreateTexture2D // Create texture 1
IDXGISurface1::GetDC // Get DC for texture 1
... // Draw to texture1 using GDI
IDXGISurtface1::ReleaseDC // Release DC for texture1
thread 2:
// Is this valid if thread 1 is drawing using GDI?
D3D11DeviceContext::OMSetRenderTargets
D3D11DeviceContext::Draw // Draw texture2.