ID3D12Device::CreateCommittedResource 方法 (d3d12.h)
同時建立資源與隱含堆積,讓堆積足以包含整個資源,而且資源會對應至堆積。
語法
HRESULT CreateCommittedResource(
[in] const D3D12_HEAP_PROPERTIES *pHeapProperties,
[in] D3D12_HEAP_FLAGS HeapFlags,
[in] const D3D12_RESOURCE_DESC *pDesc,
[in] D3D12_RESOURCE_STATES InitialResourceState,
[in, optional] const D3D12_CLEAR_VALUE *pOptimizedClearValue,
[in] REFIID riidResource,
[out, optional] void **ppvResource
);
參數
[in] pHeapProperties
類型:const D3D12_HEAP_PROPERTIES*
提供資源堆積屬性之 D3D12_HEAP_PROPERTIES 結構的指標。
[in] HeapFlags
堆積選項,做為 D3D12_HEAP_FLAGS 列舉常數的位 OR'd 組合。
[in] pDesc
類型:const D3D12_RESOURCE_DESC*
描述資源之 D3D12_RESOURCE_DESC 結構的指標。
[in] InitialResourceState
資源的初始狀態,作為 D3D12_RESOURCE_STATES 列舉常數的位 OR'd 組合。
當您與 D3D12_HEAP_TYPE_UPLOAD 堆積一起建立資源時,必須將 initialResourceState 設定為 D3D12_RESOURCE_STATE_GENERIC_READ。
當您與 D3D12_HEAP_TYPE_READBACK 堆積一起建立資源時,必須將 InitialResourceState 設定為 D3D12_RESOURCE_STATE_COPY_DEST。
[in, optional] pOptimizedClearValue
類型:const D3D12_CLEAR_VALUE*
指定描述純色預設值的 D3D12_CLEAR_VALUE 結構。
pOptimizedClearValue 指定最理想的清除作業值。 當建立的資源是具有 D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET 或 D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL 旗標的紋理時,您應該選擇最常呼叫清除作業的值。 您可以使用其他值呼叫清除作業,但當值符合傳遞至資源建立的值時,這些作業不會那麼有效率。
當您使用 D3D12_RESOURCE_DIMENSION_BUFFER時,必須將 pOptimizedClearValue 設定為 nullptr
。
[in] riidResource
類型:REFIID
要傳回 ppvResource中之資源介面之全域唯一標識碼 (GUID) 的參考。
雖然
[out, optional] ppvResource
類型:void**
記憶體區塊的選擇性指標,可接收所建立資源物件的要求介面指標。
ppvResource 可以 nullptr
,以啟用功能測試。 當
傳回值
類型:HRESULT
如果函式成功,它會傳回 S_OK。 否則,它會傳回 HRESULT錯誤碼。
傳回值 | 描述 |
---|---|
E_OUTOFMEMORY | 記憶體不足,無法建立資源。 |
如需其他可能的傳回值,請參閱 Direct3D 12 傳回碼。
言論
此方法會同時建立資源與堆積,讓堆積夠大而足以包含整個資源,而且資源會對應至堆積。 建立的堆積稱為隱含堆積,因為應用程式無法取得堆積物件。 在釋放資源的最終參考之前,您的應用程式必須確定 GPU 將不再讀取或寫入此資源。
隱含堆積會在方法將控制權傳回應用程式之前,針對 GPU 存取進行常駐。 另請參閱 落地。
無法變更資源 GPU VA 對應。 請參閱 ID3D12CommandQueue::UpdateTileMappings 和 磁碟區磚化資源。
這個方法可由多個線程同時呼叫。
例子
D3D12Bundles 範例使用 ID3D12Device::CreateCommittedResource,如下所示:
建立頂點緩衝區。
auto heapProperties = CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT);
auto resourceDesc = CD3DX12_RESOURCE_DESC::Buffer(SampleAssets::VertexDataSize);
ThrowIfFailed(m_device->CreateCommittedResource(
&heapProperties,
D3D12_HEAP_FLAG_NONE,
&resourceDesc,
D3D12_RESOURCE_STATE_COPY_DEST,
nullptr,
IID_PPV_ARGS(&m_vertexBuffer)));
請參閱 Direct3D 12 參考中的
要求
要求 | 價值 |
---|---|
目標平臺 | 窗戶 |
標頭 | d3d12.h |
連結庫 | D3D12.lib |
DLL | D3D12.dll |