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