libobs-d3d11: Reset handle and re-lock if texture rebuilt

If a texture has to be rebuilt due to a driver reset and is a keyed
mutex shared texture, make sure to reacquire the shared handle and
acquire the lock.
master
jp9000 2019-03-03 08:43:06 -08:00
parent 8f3ea18276
commit 2f3cb1804e
1 changed files with 18 additions and 0 deletions

View File

@ -89,6 +89,15 @@ void gs_texture_2d::Rebuild(ID3D11Device *dev)
if (FAILED(hr))
throw HRError("Failed to create GDI surface", hr);
}
acquired = false;
if ((td.MiscFlags & D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX) != 0) {
ComQIPtr<IDXGIResource> dxgi_res(texture);
if (dxgi_res)
GetSharedHandle(dxgi_res);
device_texture_acquire_sync(this, 0, INFINITE);
}
}
void gs_texture_2d::RebuildNV12_Y(ID3D11Device *dev)
@ -108,6 +117,15 @@ void gs_texture_2d::RebuildNV12_Y(ID3D11Device *dev)
InitRenderTargets();
tex_uv->RebuildNV12_UV(dev);
acquired = false;
if ((td.MiscFlags & D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX) != 0) {
ComQIPtr<IDXGIResource> dxgi_res(texture);
if (dxgi_res)
GetSharedHandle(dxgi_res);
device_texture_acquire_sync(this, 0, INFINITE);
}
}
void gs_texture_2d::RebuildNV12_UV(ID3D11Device *dev)