ID3D12Device ::CreateCommittedResource, méthode (d3d12.h)

Crée à la fois une ressource et un tas implicite, de sorte que le tas soit suffisamment grand pour contenir la ressource entière, et que la ressource soit mappée au tas.

Syntaxe

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

Paramètres

[in] pHeapProperties

Type : const D3D12_HEAP_PROPERTIES*

Pointeur vers une structure D3D12_HEAP_PROPERTIES qui fournit des propriétés pour le tas de la ressource.

[in] HeapFlags

Type : D3D12_HEAP_FLAGS

Options de tas, sous la forme d’une combinaison de D3D12_HEAP_FLAGS constantes d’énumération au niveau du bit.

[in] pDesc

Type : const D3D12_RESOURCE_DESC*

Pointeur vers une structure D3D12_RESOURCE_DESC qui décrit la ressource.

[in] InitialResourceState

Type : D3D12_RESOURCE_STATES

État initial de la ressource, sous la forme d’une combinaison de D3D12_RESOURCE_STATES constantes d’énumération au niveau du bit.

Lorsque vous créez une ressource avec un tas de D3D12_HEAP_TYPE_UPLOAD , vous devez définir InitialResourceStatesur D3D12_RESOURCE_STATE_GENERIC_READ.

Lorsque vous créez une ressource avec un tas D3D12_HEAP_TYPE_READBACK , vous devez définir InitialResourceStatesur D3D12_RESOURCE_STATE_COPY_DEST.

[in, optional] pOptimizedClearValue

Type : const D3D12_CLEAR_VALUE*

Spécifie une structure D3D12_CLEAR_VALUE qui décrit la valeur par défaut d’une couleur claire.

pOptimizedClearValue spécifie une valeur pour laquelle les opérations d’effacement sont les plus optimales. Lorsque la ressource créée est une texture avec les indicateurs D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ou D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL , vous devez choisir la valeur avec laquelle l’opération clear sera le plus souvent appelée. Vous pouvez appeler l’opération clear avec d’autres valeurs, mais ces opérations ne seront pas aussi efficaces que lorsque la valeur correspond à celle passée à la création de ressources.

Lorsque vous utilisez D3D12_RESOURCE_DIMENSION_BUFFER, vous devez définir pOptimizedClearValue sur nullptr.

[in] riidResource

Type : REFIID

Référence à l’identificateur global unique (GUID) de l’interface de ressource à retourner dans ppvResource.

Bien que riidResource soit le plus souvent le GUIDd’ID3D12Resource, il peut s’agir du GUID de n’importe quelle interface. Si l’objet de ressource ne prend pas en charge l’interface de ce GUID, la création échoue avec E_NOINTERFACE.

[out, optional] ppvResource

Type : void**

Pointeur facultatif vers un bloc de mémoire qui reçoit le pointeur d’interface demandé vers l’objet de ressource créé.

ppvResource peut être nullptr, pour activer les tests de capacité. Lorsque ppvResource a la valeur nullptr, aucun objet n’est créé et S_FALSE est retourné lorsque pDesc est valide.

Valeur retournée

Type : HRESULT

Si la fonction réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreurHRESULT.

Valeur retournée Description
E_OUTOFMEMORY La mémoire est insuffisante pour créer la ressource.

Pour connaître les autres valeurs de retour possibles, consultez Codes de retour Direct3D 12 .

Remarques

Cette méthode crée à la fois une ressource et un tas, de sorte que le tas soit suffisamment grand pour contenir la ressource entière, et que la ressource soit mappée au tas. Le tas créé est appelé tas implicite, car l’objet tas ne peut pas être obtenu par l’application. Avant de publier la référence finale sur la ressource, votre application doit s’assurer que le GPU ne lit plus ni n’écrit dans cette ressource.

Le tas implicite est rendu résident pour l’accès GPU avant que la méthode ne retourne le contrôle à votre application. Consultez également Résidence.

Le mappage VA GPU de ressource ne peut pas être modifié. Consultez ID3D12CommandQueue ::UpdateTileMappings et Ressources en mosaïques de volume.

Cette méthode peut être appelée simultanément par plusieurs threads.

Exemples

L’exemple D3D12Bundles utilise ID3D12Device ::CreateCommittedResource comme suit :

Créez une mémoire tampon de vertex.

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

Consultez l’exemple de code dans la référence Direct3D 12.

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête d3d12.h
Bibliothèque D3D12.lib
DLL D3D12.dll

Voir aussi

CreatePlacedResource

CreateReservedResource

D3D12_HEAP_FLAGS

ID3D12Device