Metodo ID3D12Device::CreateCommittedResource (d3d12.h)

Crea sia una risorsa che un heap implicito, in modo che l'heap sia sufficientemente grande da contenere l'intera risorsa e che la risorsa sia mappata all'heap.

Sintassi

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
);

Parametri

[in] pHeapProperties

Tipo: const D3D12_HEAP_PROPERTIES*

Puntatore a una struttura D3D12_HEAP_PROPERTIES che fornisce proprietà per l'heap della risorsa.

[in] HeapFlags

Tipo: D3D12_HEAP_FLAGS

Opzioni dell'heap, come combinazione or bit per bit di costanti di enumerazione D3D12_HEAP_FLAGS .

[in] pDesc

Tipo: const D3D12_RESOURCE_DESC*

Puntatore a una struttura D3D12_RESOURCE_DESC che descrive la risorsa.

[in] InitialResourceState

Tipo: D3D12_RESOURCE_STATES

Lo stato iniziale della risorsa, come combinazione or bit per bit di D3D12_RESOURCE_STATES costanti di enumerazione.

Quando si crea una risorsa insieme a un heap D3D12_HEAP_TYPE_UPLOAD , è necessario impostare InitialResourceState su D3D12_RESOURCE_STATE_GENERIC_READ.

Quando si crea una risorsa con un heap D3D12_HEAP_TYPE_READBACK , è necessario impostare InitialResourceState su D3D12_RESOURCE_STATE_COPY_DEST.

[in, optional] pOptimizedClearValue

Tipo: const D3D12_CLEAR_VALUE*

Specifica una struttura D3D12_CLEAR_VALUE che descrive il valore predefinito per un colore chiaro.

pOptimizedClearValue specifica un valore per il quale le operazioni cancellate sono ottimali. Quando la risorsa creata è una trama con i flag D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET o D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL , è necessario scegliere il valore con cui verrà chiamata l'operazione cancellata. È possibile chiamare l'operazione di cancellazione con altri valori, ma queste operazioni non saranno altrettanto efficienti come quando il valore corrisponde a quello passato alla creazione di risorse.

Quando si usa D3D12_RESOURCE_DIMENSION_BUFFER, è necessario impostare pOptimizedClearValue su nullptr.

[in] riidResource

Tipo: REFIID

Riferimento all'identificatore univoco globale (GUID) dell'interfaccia della risorsa da restituire in ppvResource.

Anche se riidResource è in genere il GUID di ID3D12Resource, può essere il GUID di qualsiasi interfaccia. Se l'oggetto risorsa non supporta l'interfaccia per questo GUID, la creazione ha esito negativo con E_NOINTERFACE.

[out, optional] ppvResource

Tipo: void**

Puntatore facoltativo a un blocco di memoria che riceve il puntatore di interfaccia richiesto all'oggetto risorsa creato.

ppvResource può essere nullptr, per abilitare il test delle funzionalità. Quando ppvResource è nullptr, non viene creato alcun oggetto e S_FALSE viene restituito quando pDesc è valido.

Valore restituito

Tipo: HRESULT

Se la funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di erroreHRESULT.

Valore restituito Descrizione
E_OUTOFMEMORY Memoria insufficiente per creare la risorsa.

Per altri possibili valori restituiti, vedere Codici restituiti Direct3D 12 .

Commenti

Questo metodo crea sia una risorsa che un heap, in modo che l'heap sia sufficientemente grande da contenere l'intera risorsa e che la risorsa sia mappata all'heap. L'heap creato è noto come heap implicito, perché l'oggetto heap non può essere ottenuto dall'applicazione. Prima di rilasciare il riferimento finale nella risorsa, l'applicazione deve assicurarsi che la GPU non leggerà né scriverà in questa risorsa.

L'heap implicito viene reso residente per l'accesso alla GPU prima che il metodo restituisca il controllo all'applicazione. Vedi anche Residenza.

Non è possibile modificare il mapping della risorsa GPU VA. Vedere ID3D12CommandQueue::UpdateTileMappings e Risorse affiancate del volume.

Questo metodo può essere chiamato contemporaneamente da più thread.

Esempio

L'esempio D3D12Bundles usa ID3D12Device::CreateCommittedResource come segue:

Creare un buffer dei vertici.

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)));

Vedere Codice di esempio nel riferimento a Direct3D 12.

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione d3d12.h
Libreria D3D12.lib
DLL D3D12.dll

Vedi anche

CreatePlacedResource

CreateReservedResource

D3D12_HEAP_FLAGS

ID3D12Device