Skip to content

Latest commit

 

History

History
145 lines (105 loc) · 5.49 KB

nf-d3d11-id3d11device-opensharedresource.md

File metadata and controls

145 lines (105 loc) · 5.49 KB
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.
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
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
ID3D11Device::OpenSharedResource
d3d11/ID3D11Device::OpenSharedResource
c++
APIRef
kbSyntax
COM
D3D11.lib
D3D11.dll
ID3D11Device.OpenSharedResource

ID3D11Device::OpenSharedResource

-description

Give a device access to a shared resource created on a different device.

-parameters

-param hResource [in]

Type: HANDLE

A resource handle. See remarks.

-param ReturnedInterface [in]

Type: REFIID

The globally unique identifier (GUID) for the resource interface. See remarks.

-param ppResource [out, optional]

Type: void**

Address of a pointer to the resource we are gaining access to.

-returns

Type: HRESULT

This method returns one of the following Direct3D 11 Return Codes.

-remarks

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
If a shared texture is updated on one device ID3D11DeviceContext::Flush must be called on that device.

-see-also

ID3D11Device