Skip to main content
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 padrão do Direct3d 12.

Sintaxe

Parâmetros

pBundleBuffer   _In_
Tipo: 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) 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 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 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 e CloseBundleX.

Requisitos

Cabeçalho: d3d12_x.h *Biblioteca: d3d12_x.lib Plataformas com suporte: família XBOX One

Confira também

ID3D12GraphicsCommandList
ExecuteBundle
Last modified on October 6, 2026