UID | title | description | helpviewer_keywords | old-location | tech.root | ms.assetid | ms.date | ms.keywords | req.header | req.include-header | req.target-type | req.target-min-winverclnt | req.target-min-winversvr | req.kmdf-ver | req.umdf-ver | req.ddi-compliance | req.unicode-ansi | req.idl | req.max-support | req.namespace | req.assembly | req.type-library | req.lib | req.dll | req.irql | targetos | req.typenames | req.redist | ms.custom | f1_keywords | dev_langs | topic_type | api_type | api_location | api_name | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
NF:d3d11.ID3D11Device.OpenSharedResource |
ID3D11Device::OpenSharedResource (d3d11.h) |
Give a device access to a shared resource created on a different device. |
|
direct3d11\id3d11device_opensharedresource.htm |
direct3d11 |
bc054547-e098-457e-8c8a-a41496234a63 |
12/05/2018 |
ID3D11Device interface [Direct3D 11],OpenSharedResource method, ID3D11Device.OpenSharedResource, ID3D11Device::OpenSharedResource, OpenSharedResource, OpenSharedResource method [Direct3D 11], OpenSharedResource method [Direct3D 11],ID3D11Device interface, c200398f-7a1d-967e-b12d-6d180c9526f9, d3d11/ID3D11Device::OpenSharedResource, direct3d11.id3d11device_opensharedresource |
d3d11.h |
Windows |
D3D11.lib |
Windows |
19H1 |
|
|
|
|
|
|
Give a device access to a shared resource created on a different device.
Type: HANDLE
A resource handle. See remarks.
Type: REFIID
The globally unique identifier (GUID) for the resource interface. See remarks.
Type: void**
Address of a pointer to the resource we are gaining access to.
Type: HRESULT
This method returns one of the following Direct3D 11 Return Codes.
The REFIID, or GUID, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(ID3D11Buffer) will get the GUID of the interface to a buffer resource.
The unique handle of the resource is obtained differently depending on the type of device that originally created the resource.
To share a resource between two Direct3D 11 devices the resource must have been created with the D3D11_RESOURCE_MISC_SHARED flag, if it was created using the ID3D11Device interface. If it was created using a DXGI device interface, then the resource is always shared.
The REFIID, or GUID, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(ID3D11Buffer) will get the GUID of the interface to a buffer resource.
When sharing a resource between two Direct3D 10/11 devices the unique handle of the resource can be obtained by querying the resource for the IDXGIResource interface and then calling GetSharedHandle.
IDXGIResource* pOtherResource(NULL);
hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource );
HANDLE sharedHandle;
pOtherResource->GetSharedHandle(&sharedHandle);
The only resources that can be shared are 2D non-mipmapped textures.
To share a resource between a Direct3D 9 device and a Direct3D 11 device the texture must have been created using
the pSharedHandle argument of CreateTexture.
The shared Direct3D 9 handle is then passed to OpenSharedResource in the hResource argument.
The following code illustrates the method calls involved.
sharedHandle = NULL; // must be set to NULL to create, can use a valid handle here to open in D3D9
pDevice9->CreateTexture(..., pTex2D_9, &sharedHandle);
...
pDevice11->OpenSharedResource(sharedHandle, __uuidof(ID3D11Resource), (void**)(&tempResource11));
tempResource11->QueryInterface(__uuidof(ID3D11Texture2D), (void**)(&pTex2D_11));
tempResource11->Release();
// now use pTex2D_11 with pDevice11
Textures being shared from D3D9 to D3D11 have the following restrictions.
- Textures must be 2D
- Only 1 mip level is allowed
- Texture must have default usage
- Texture must be write only
- MSAA textures are not allowed
- Bind flags must have SHADER_RESOURCE and RENDER_TARGET set
- Only R10G10B10A2_UNORM, R16G16B16A16_FLOAT and R8G8B8A8_UNORM formats are allowed