共用方式為


ID3D11On12Device2::UnwrapUnderlyingResource 方法 (d3d11on12.h)

解除包裝 Direct3D 11 資源物件,並將其擷取為 Direct3D 12 資源物件。

語法

HRESULT UnwrapUnderlyingResource(
  [in]  ID3D11Resource     *pResource11,
  [in]  ID3D12CommandQueue *pCommandQueue,
  [in]  REFIID             riid,
  [out] void               **ppvResource12
);

參數

[in] pResource11

類型:ID3D11Resource*

要解除包裝的 Direct3D 11 資源物件。

[in] pCommandQueue

類型:ID3D12CommandQueue*

應用程式打算使用資源的命令佇列。 存取資源的任何擱置中工作都會在此佇列上排定圍欄等候。 然後,您可以在此佇列上排入進一步的工作佇列,包括呼叫端擁有的柵欄上的訊號。

[in] riid

類型:REFIID

您想要在 ppvResource12中傳回之介面之全域唯一標識碼 (GUID) 的參考。

[out] ppvResource12

類型:void**

記憶體區塊的指標,接收 Direct3D 12 資源的指標。

傳回值

類型:HRESULT

如果函式成功,它會傳回 S_OK。 否則,它會傳回 HRESULT錯誤碼

言論

資源會轉換成 D3D12_RESOURCE_STATE_COMMON(如果尚未處於該狀態),並將適當的等候插入命令佇列中(pCommandQueue)。

可以解除包裝的專案有一些限制:沒有索引的 Mutex 資源、沒有 GDI 相容的資源,也沒有緩衝區。 不過,您可以使用 UnwrapUnderlyingResource 來解除包裝透過 ID3D11On12Device::CreateWrappedResource 方法建立的資源,以及透過 ID3D11Device::CreateTexture2D建立的資源。

一般而言,您必須先將對象傳回 Direct3D11on12,才能在 Direct3D 11 中再次使用它(請參閱 ID3D11On12Device2::ReturnUnderlyingResource)。

您也可以使用 UnwrapUnderlyingResource 來解除包裝交換鏈緩衝區。 您也必須將資源傳回 Direct3D11on12,再呼叫 Present (否則使用 資源)。

解除包裝資源會從 Direct3D11On12 轉譯層取出資源。 當資源取出時,您可能不會排程任何轉譯層使用量(透過任一版的 API)。使用 ID3D11On12Device2::ReturnUnderlyingResource,將資源重新簽入 (也稱為 傳回 資源)。

UnwrapUnderlyingResource 不會排清,而且可能會排程 GPU 工作。 如果您外部等候完成,您應該在呼叫 UnwrapUnderlyingResource 之後排清。

要求

要求 價值
最低支援的用戶端 Windows 10 版本 2004 (10.0;組建 19041)
支援的最低伺服器 Windows Server 版本 2004 (10.0;組建 19041)
標頭 d3d11on12.h
連結庫 D3D11.lib
DLL D3D11.dll

另請參閱