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

堆積選項,做為 D3D12_HEAP_FLAGS 列舉常數的位 OR'd 組合。

[in] pDesc

類型: const D3D12_RESOURCE_DESC*

描述資源的 D3D12_RESOURCE_DESC 結構的指標。

[in] InitialResourceState

類型: D3D12_RESOURCE_STATES

資源的初始狀態,做為 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_TARGETD3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL 旗標的紋理時,您應該選擇最常呼叫清除作業的值。 您可以使用其他值呼叫清除作業,但這些作業與傳入資源建立的值相符時,不會有效率。

當您使用 D3D12_RESOURCE_DIMENSION_BUFFER時,必須將 pOptimizedClearValue 設定為 nullptr

[in] riidResource

類型: REFIID

要傳回 ppvResource 中資源介面之全域唯一標識碼的參考 (GUID) 。

雖然 riidResource 最常是 ID3D12ResourceGUID,但它可能是任何介面的 GUID。 如果資源物件不支援此 GUID 的介面,則建立會失敗,並 E_NOINTERFACE

[out, optional] ppvResource

類型: void**

記憶體區塊的選擇性指標,可接收所建立資源物件的要求介面指標。

ppvResource 可以是 nullptr,以啟用功能測試。 當 ppvResourcenullptr時,不會建立任何物件,而且 pDesc 有效時會傳回S_FALSE

傳回值

類型: 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 參考中的範例程序代碼

規格需求

需求
目標平台 Windows
標頭 d3d12.h
程式庫 D3D12.lib
Dll D3D12.dll

另請參閱

CreatePlacedResource

CreateReservedResource

D3D12_HEAP_FLAGS

ID3D12Device