> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SetDescriptorHeaps

> Altera os heaps de descritores atualmente associados a uma lista de comandos.

Altera os heaps de descritores atualmente associados a uma lista de comandos.

## Sintaxe

```cpp theme={null}
void SetDescriptorHeaps(
    UINT NumDescriptorHeaps,
     ID3D12DescriptorHeap* ppDescriptorHeaps
)
```

### Parâmetros

*NumDescriptorHeaps*\
Tipo: UINT

Número de heaps de descritores a serem associados.

*ppDescriptorHeaps*\
Tipo: \[in] **[ID3D12DescriptorHeap](/pt-BR/reference/graphics/d3d12/interfaces/id3d12descriptorheap/id3d12descriptorheap_public)**\*

Um ponteiro para uma matriz de objetos [ID3D12DescriptorHeap](/pt-BR/reference/graphics/d3d12/interfaces/id3d12descriptorheap/id3d12descriptorheap_public) para os heaps a serem definidos na lista de comandos.

Você só pode associar heaps de descritores do tipo [**D3D12\_DESCRIPTOR\_HEAP\_TYPE\_CBV\_SRV\_UAV**](/pt-BR/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_setdescriptorheaps_public) e [**D3D12\_DESCRIPTOR\_HEAP\_TYPE\_SAMPLER**](/pt-BR/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_setdescriptorheaps_public).

Somente um heap de descritores de cada tipo pode ser definido por vez, o que significa que no máximo 2 heaps (um sampler, um CBV/SRV/UAV) podem ser definidos ao mesmo tempo.

### Valor retornado

Tipo: void

Nenhum.

## Comentários

**SetDescriptorHeaps** pode ser chamado em um pacote, mas os heaps de descritores do pacote devem corresponder ao heap de descritores da lista de comandos chamadora. Para obter mais informações sobre restrições de pacotes, consulte [Criando e gravando listas de comandos e pacotes](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/recording-command-lists-and-bundles).

Todos os heaps definidos anteriormente são removidos pela chamada. No máximo um heap de cada tipo visível ao sombreador pode ser definido na chamada.

A alteração dos heaps de descritores pode causar uma liberação do pipeline em alguns hardwares. Por isso, é recomendável usar um único heap visível ao sombreador de cada tipo e defini-lo uma vez por quadro, em vez de alterar regularmente os heaps de descritores associados. Em vez disso, use [**ID3D12Device::CopyDescriptors**](/pt-BR/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_copydescriptors_public) e [**ID3D12Device::CopyDescriptorsSimple**](/pt-BR/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_copydescriptorssimple_public) para copiar os descritores necessários dos heaps opacos ao sombreador para o único heap visível ao sombreador, conforme necessário durante a renderização.

## Exemplos

O exemplo [D3D12Bundles](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/working-samples) usa **ID3D12GraphicsCommandList::SetDescriptorHeaps** da seguinte maneira:

```cpp theme={null}
void D3D12Bundles::PopulateCommandList(FrameResource* pFrameResource)
{
// Command list allocators can only be reset when the associated
// command lists have finished execution on the GPU; apps should use
// fences to determine GPU execution progress.
ThrowIfFailed(m_pCurrentFrameResource->m_commandAllocator->Reset());

// However, when ExecuteCommandList() is called on a particular command
// list, that command list can then be reset at any time and must be before
// re-recording.
ThrowIfFailed(m_commandList->Reset(m_pCurrentFrameResource->m_commandAllocator.Get(), m_pipelineState1.Get()));

// Set necessary state.
m_commandList->SetGraphicsRootSignature(m_rootSignature.Get());

ID3D12DescriptorHeap* ppHeaps[] = { m_cbvSrvHeap.Get(), m_samplerHeap.Get() };
m_commandList->SetDescriptorHeaps(_countof(ppHeaps), ppHeaps);

m_commandList->RSSetViewports(1, &m_viewport);
m_commandList->RSSetScissorRects(1, &m_scissorRect);

// Indicate that the back buffer will be used as a render target.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));

CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart(), m_frameIndex, m_rtvDescriptorSize);
CD3DX12_CPU_DESCRIPTOR_HANDLE dsvHandle(m_dsvHeap->GetCPUDescriptorHandleForHeapStart());
m_commandList->OMSetRenderTargets(1, &rtvHandle, FALSE, &dsvHandle);

// Record commands.
const float clearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f };
m_commandList->ClearRenderTargetView(rtvHandle, clearColor, 0, nullptr);
m_commandList->ClearDepthStencilView(m_dsvHeap->GetCPUDescriptorHandleForHeapStart(), D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr);

if (UseBundles)
{
// Execute the prebuilt bundle.
m_commandList->ExecuteBundle(pFrameResource->m_bundle.Get());
}
else
{
// Populate a new command list.
pFrameResource->PopulateCommandList(m_commandList.Get(), m_pipelineState1.Get(), m_pipelineState2.Get(), m_currentFrameResourceIndex, m_numIndices, &m_indexBufferView,
&m_vertexBufferView, m_cbvSrvHeap.Get(), m_cbvSrvDescriptorSize, m_samplerHeap.Get(), m_rootSignature.Get());
}

// Indicate that the back buffer will now be used to present.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));

ThrowIfFailed(m_commandList->Close());
}
```

Consulte [Código de exemplo na referência do D3D12](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/notes-on-example-code).

## Requisitos

**Cabeçalho:** d3d12\_xs.h ou d3d12\_x.h\
**Biblioteca:** d3d12\_xs.lib ou d3d12\_x.lib\
**Plataformas com suporte**: consoles XBOX Series e família XBOX One

## Confira também

[Heaps de descritores](https://learn.microsoft.com/en-us/windows/desktop/direct3d12/descriptor-heaps)

[ID3D12GraphicsCommandList](/pt-BR/reference/graphics/d3d12_xs/interfaces/ID3D12GraphicsCommandList/id3d12graphicscommandlist_xs)


## Related topics

- [ClearUnorderedAccessViewFloat](/pt-BR/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_clearunorderedaccessviewfloat_public.md)
- [ClearUnorderedAccessViewUint](/pt-BR/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_clearunorderedaccessviewuint_public.md)
- [CreateDescriptorHeap](/pt-BR/reference/graphics/d3d12/interfaces/id3d12device/methods/id3d12device_createdescriptorheap_public.md)
- [D3D12_DESCRIPTOR_HEAP_TYPE](/pt-BR/reference/graphics/d3d12/enums/d3d12_descriptor_heap_type_public.md)
- [ID3D12DescriptorHeap](/pt-BR/reference/graphics/d3d12/interfaces/id3d12descriptorheap/id3d12descriptorheap_public.md)
