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 constantes de enumeração D3D12_HEAP_FLAGS.
[in] pDesc
Tipo: const D3D12_RESOURCE_DESC*
Um ponteiro para uma estrutura de 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 para D3D12_RESOURCE_STATE_GENERIC_READ.
Ao criar um recurso junto com um heap de D3D12_HEAP_TYPE_READBACK, você deve definir InitialResourceState para D3D12_RESOURCE_STATE_COPY_DEST.
[in, optional] pOptimizedClearValue
Tipo: const D3D12_CLEAR_VALUE*
Especifica uma estrutura de 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 para nullptr
.
[in] riidResource
Tipo: REFIID
Uma referência ao identificador global exclusivo (GUID) da interface de recurso a ser retornada em ppvResource.
Embora
[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 capacidade. Quando ppvResource é nullptr
, nenhum objeto é criado e S_FALSE é retornado quando pDesc é válido.
Valor de retorno
Se a função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um
Valor de retorno | Descrição |
---|---|
E_OUTOFMEMORY | Não há memória suficiente para criar o recurso. |
Consulte códigos de retorno do Direct3D 12 para obter outros valores de retorno possíveis.
Observações
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 lerá nem gravará mais nesse recurso.
O heap implícito é feito residente para acesso à GPU antes que o método retorne o controle ao seu aplicativo. Consulte também de Residência.
O mapeamento de VA da GPU do recurso não pode ser alterado. Consulte ID3D12CommandQueue::UpdateTileMappings e volume de recursos em bloco.
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 node referência do Direct3D 12.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino |
Windows |
cabeçalho | d3d12.h |
biblioteca | D3D12.lib |
de DLL |
D3D12.dll |