> ## 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.

# ExecuteIndirectBundleX (família XBOX One)

> Executa indiretamente um pacote a partir de um buffer, em que um pacote é uma representação em buffer de comandos da GPU de desenhos e configurações de estado da GPU. Essa API permite uma.

Executa indiretamente um pacote a partir de um buffer, em que um pacote é uma representação em buffer de comandos da GPU de desenhos e configurações de estado da GPU. Essa API permite criar e gerenciar pacotes de forma mais eficiente do que é possível com a API [ExecuteBundle](https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12graphicscommandlist-executebundle) padrão do Direct3d 12.

## Sintaxe

```cpp theme={null}
void ExecuteIndirectBundleX(  
         ID3D12Resource* pBundleBuffer,  
         UINT BundleBufferOffset,  
         UINT MaxSize,  
         ID3D12Resource* pSizeBuffer,  
         UINT SizeBufferOffset,  
         UINT PredicationBufferOffset  
)  
```

### Parâmetros

*pBundleBuffer*   \_In\_\
Tipo: [ID3D12Resource](https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nn-d3d12-id3d12resource)\*

Especifica um ponteiro para um recurso de buffer que contém dados de pacote. O buffer deve ter sido criado com o atributo **D3D12XBOX\_RESOURCE\_FLAG\_ALLOW\_INDIRECT\_BUFFER** definido; caso contrário, o buffer deve estar localizado em memória **PAGE\_GPU\_EXECUTE**.

*BundleBufferOffset*   \_In\_\
Tipo: UINT

Deslocamento, em bytes, do início do buffer de pacote até o começo dos dados do pacote. Deve ser um múltiplo de 4.

*MaxSize*   \_In\_\
Tipo: UINT

O tamanho do pacote pode ser especificado de uma das duas maneiras:

1. Se *pSizeBuffer* for NULL, *MaxSize* especificará o número exato de bytes do pacote a ser executado.

2. Se *pSizeBuffer* não for NULL, *MaxSize* especificará o número máximo de bytes a serem executados. Se o tamanho especificado por *pSizeBuffer* exceder *MaxSize* no momento da execução na GPU, a GPU descartará completamente a execução do pacote. Isso é útil para evitar um travamento da GPU quando ela é usada para criar o pacote e os dados excedem o orçamento alocado.

Os pacotes não podem exceder 4 MB de tamanho.

*pSizeBuffer*   \_In\_opt\_\
Tipo: ID3D12Resource\*

Especifica um recurso de buffer ([ID3D12Resource](https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nn-d3d12-id3d12resource)) que contém um tamanho de 32 bits, em bytes. Isso é usado para tamanhos gerados pela GPU.

*SizeBufferOffset*   \_In\_\
Tipo: UINT

Deslocamento, em bytes, do início do buffer de tamanho até o tamanho de 32 bits, em bytes.

*PredicationBufferOffset*   \_In\_\
Tipo: UINT

Reservado para uso futuro; deve ser zero.

### Valor retornado

Tipo: void

## Comentários

Essa API habilita a funcionalidade Build-Your-Own-Bundles, pela qual um chamador pode criar buffers de comandos da GPU usando seu próprio código de CPU ou GPU, em runtime ou offline. A memória do pacote também pode ser gerenciada explicitamente. Esses dois atributos contrastam com a API **ExecuteBundle** padrão, em que os pacotes só podem ser criados em runtime, na CPU, usando APIs do D3D e com uma sobrecarga significativa de memória de objetos.

A funcionalidade Build-Your-Own-Bundles pode conter os mesmos tipos de desenhos e alterações de estado que podem ser registrados em pacotes comuns. Esse conjunto inclui todas as APIs do D3D de alta frequência, mas nenhuma API do D3D de baixa frequência, como as usadas para definir destinos de renderização ou limpezas. O processador de comandos da GPU do XBOX One implementa nativamente essas APIs com codificações de pacotes muito simples. Para criar os dados do buffer de comandos, use as definições D3D12XBOX\_PACKET\_\* no cabeçalho d3d12\_x.h em conjunto com a introspecção do objeto de estado de pipeline e do objeto Root Signature. Use as funções embutidas em d3d12\_x.h como referência para fazer isso; nenhuma documentação adicional é fornecida além do que está no cabeçalho.

Os dados de pacote de um objeto de estado de pipeline são válidos apenas durante o tempo de vida desse objeto de estado de pipeline. Isso significa que, se um pacote for criado offline, todas as invocações de [SetPipelineState](https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12graphicscommandlist-setpipelinestate) dentro desse pacote deverão ser corrigidas para refletir as versões desses objetos de estado de pipeline criadas em runtime, antes que o pacote possa ser executado pela GPU. Da mesma forma, quaisquer dados de ponteiro registrados offline em um pacote (como para tabelas de descritores) devem ser corrigidos em runtime, antes da execução.

**ExecuteIndirectBundleX** não pode ser invocado a partir de um pacote.

Observe o uso de [NopX](/pt-BR/reference/graphics/d3d12_x/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_nopx) para adicionar preenchimento sem operação a uma lista de comandos.

A partir do GDK de março de 2024, **ExecuteIndirectBundleX** pode ser usado em listas de comandos de computação assíncrona nos consoles XBOX Series. Quando usado em computação assíncrona, os buffers de contagem e de pacote devem residir no mesmo ID3D12Resource; além disso, o valor de contagem deve estar localizado 4 bytes antes do conteúdo do pacote, ou seja, *BundleBufferOffset* deve ser igual a *SizeBufferOffset* mais 4 bytes.

Para executar uma lista de comandos antes que ela seja fechada, consulte [CreateCommandListX](/pt-BR/reference/graphics/d3d12_x/interfaces/id3d12device/methods/id3d12device_createcommandlistx) e [CloseBundleX](/pt-BR/reference/graphics/d3d12_x/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_closebundlex).

## Requisitos

**Cabeçalho:** d3d12\_x.h

\***Biblioteca:** d3d12\_x.lib

**Plataformas com suporte:** família XBOX One

## Confira também

[ID3D12GraphicsCommandList](/pt-BR/reference/graphics/d3d12_x/interfaces/id3d12graphicscommandlist/id3d12graphicscommandlist)\
[ExecuteBundle](https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12graphicscommandlist-executebundle)


## Related topics

- [ExecuteBundle](/pt-BR/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_executebundle_public.md)
- [XGameStreamingGetTouchBundleVersion](/pt-BR/reference/system/xgamestreaming/functions/xgamestreaminggettouchbundleversion.md)
- [XGameStreamingGetTouchBundleVersionNameSize](/pt-BR/reference/system/xgamestreaming/functions/xgamestreaminggettouchbundleversionnamesize.md)
- [Compile e execute seu primeiro título de console com o GDKX](/pt-BR/home/build-first-title/first-console-title-walkthrough.md)
- [Diretório de tópicos NDA: links ativos do Microsoft Learn](/pt-BR/nda/nda-topic-directory.md)
