diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index 863a9a311..7ec7f2c0a 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -187,6 +187,27 @@ namespace dxvk { if (hr != S_OK) return hr; + + if (desc.MiscFlags == D3D11_RESOURCE_MISC_SHARED) + { + D3D11_TEXTURE2D_DESC texture_desc; + texture2D->GetDesc(&texture_desc); + texture_desc.Usage = D3D11_USAGE_STAGING; + texture_desc.BindFlags = 0; + texture_desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + texture_desc.MiscFlags = 0; + texture_desc.MipLevels = 1; + ID3D11Texture2D *rb_texture; + CreateTexture2D(&texture_desc, NULL, &rb_texture); + + D3D11_MAPPED_SUBRESOURCE map; + m_context->CopySubresourceRegion((ID3D11Resource *)rb_texture, 0, 0, 0, 0, (ID3D11Resource *)texture2D, 0, NULL); + m_context->Map(rb_texture, 0, D3D11_MAP_READ_WRITE, 0, &map); + memset(map.pData, 0, map.RowPitch * texture_desc.Height); + m_context->Unmap(rb_texture, 0); + m_context->CopySubresourceRegion((ID3D11Resource *)texture2D, 0, 0, 0, 0, (ID3D11Resource *)rb_texture, 0, NULL); + rb_texture->Release(); + } *ppTexture2D = texture2D; return S_OK;