Share via


Método ID3D12Device::CreateCommittedResource (d3d12.h)

Cria um recurso e um heap implícito, de modo que o heap seja grande o suficiente para conter todo o recurso e o recurso seja mapeado para o heap.

Sintaxe

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

Parâmetros

[in] pHeapProperties

Tipo: const D3D12_HEAP_PROPERTIES*

Um ponteiro para uma estrutura D3D12_HEAP_PROPERTIES que fornece propriedades para o heap do recurso.

[in] HeapFlags

Tipo: D3D12_HEAP_FLAGS

Opções de heap, como uma combinação or'd bit a bit de D3D12_HEAP_FLAGS constantes de enumeração.

[in] pDesc

Tipo: const D3D12_RESOURCE_DESC*

Um ponteiro para uma estrutura D3D12_RESOURCE_DESC que descreve o recurso.

[in] InitialResourceState

Tipo: D3D12_RESOURCE_STATES

O estado inicial do recurso, como uma combinação or'd bit a bit de D3D12_RESOURCE_STATES constantes de enumeração.

Ao criar um recurso junto com um heap de D3D12_HEAP_TYPE_UPLOAD , você deve definir InitialResourceState como D3D12_RESOURCE_STATE_GENERIC_READ.

Ao criar um recurso junto com um heap de D3D12_HEAP_TYPE_READBACK , você deve definir InitialResourceState como D3D12_RESOURCE_STATE_COPY_DEST.

[in, optional] pOptimizedClearValue

Tipo: const D3D12_CLEAR_VALUE*

Especifica uma estrutura D3D12_CLEAR_VALUE que descreve o valor padrão para uma cor clara.

pOptimizedClearValue especifica um valor para o qual as operações claras são mais ideais. Quando o recurso criado é uma textura com os sinalizadores D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ou D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL , você deve escolher o valor com o qual a operação clara será mais comumente chamada. Você pode chamar a operação clara com outros valores, mas essas operações não serão tão eficientes quanto quando o valor corresponder ao passado para a criação de recursos.

Ao usar D3D12_RESOURCE_DIMENSION_BUFFER, você deve definir pOptimizedClearValue comonullptr.

[in] riidResource

Tipo: REFIID

Uma referência ao GUID (identificador global exclusivo) da interface de recurso a ser retornada em ppvResource.

Embora riidResource seja mais comumente o GUID de ID3D12Resource, ele pode ser o GUID de qualquer interface. Se o objeto de recurso não der suporte à interface para esse GUID, a criação falhará com E_NOINTERFACE.

[out, optional] ppvResource

Tipo: void**

Um ponteiro opcional para um bloco de memória que recebe o ponteiro de interface solicitado para o objeto de recurso criado.

ppvResource pode ser nullptr, para habilitar o teste de funcionalidade. Quando ppvResource é nullptr, nenhum objeto é criado e S_FALSE é retornado quando pDesc é válido.

Retornar valor

Tipo: HRESULT

Se a função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um código de erroHRESULT.

Valor retornado Descrição
E_OUTOFMEMORY Não há memória suficiente para criar o recurso.

Confira Códigos de retorno do Direct3D 12 para obter outros valores retornados possíveis.

Comentários

Esse método cria um recurso e um heap, de modo que o heap seja grande o suficiente para conter todo o recurso e o recurso seja mapeado para o heap. O heap criado é conhecido como um heap implícito, porque o objeto heap não pode ser obtido pelo aplicativo. Antes de liberar a referência final no recurso, seu aplicativo deve garantir que a GPU não será mais lida nem gravada nesse recurso.

O heap implícito é feito residente para acesso à GPU antes que o método retorne o controle para seu aplicativo. Consulte também Residência.

O mapeamento de VA da GPU do recurso não pode ser alterado. Consulte ID3D12CommandQueue::UpdateTileMappings e Volume de recursos lado a lado.

Esse método pode ser chamado por vários threads simultaneamente.

Exemplos

O exemplo D3D12Bundles usa ID3D12Device::CreateCommittedResource da seguinte maneira:

Crie um buffer de vértice.

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

Consulte Código de exemplo na referência do Direct3D 12.

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho d3d12.h
Biblioteca D3D12.lib
DLL D3D12.dll

Confira também

CreatePlacedResource

CreateReservedResource

D3D12_HEAP_FLAGS

ID3D12Device