Compartilhar via


packoffset

Palavra-chave de empacotamento de constante de sombreador opcional, que usa a seguinte sintaxe:

: packoffset( c[Subcomponent][.component] )

Parâmetros

Item Descrição
packoffset
Palavra-chave necessária.
C
O empacotamento se aplica somente a registros constantes (c).
[Subcomponente] [.component]
Subcomponentes e componentes opcionais. Um subcomponente é um número de registro, que é um inteiro. Um componente está na forma de [.xyzw].

Comentários

Use esse palavra-chave para empacotar manualmente uma constante de sombreador ao declarar um tipo de variável.

Ao empacotar uma constante, você não pode misturar tipos de constantes.

O compilador se comporta um pouco diferente para constantes globais e constantes uniformes:

  • Uma constante global. Uma variável global é adicionada como uma constante global a uma $Global cbuffer pelo compilador. Os elementos empacotados automaticamente (aqueles declarados sem packoffset) aparecerão após a última variável empacotada manualmente. Você pode misturar tipos ao empacotar constantes globais.
  • Uma constante uniforme. Um parâmetro uniforme na lista de parâmetros de uma função será adicionado a um buffer constante $Param pelo compilador quando o sombreador for compilado fora da estrutura de efeitos. Quando compilada dentro da estrutura de efeito, uma constante uniforme deve resolve a uma variável uniforme definida no escopo global. Uma constante uniforme não pode ser deslocada manualmente; seu uso recomendado é apenas para especialização de sombreadores em que eles são alias de volta para globais, não como um meio de passar dados do aplicativo para o sombreador.

Aqui estão alguns exemplos adicionais: empacotar constantes usando o modelo de sombreador 4.

Exemplos

Aqui estão vários exemplos de constantes de sombreador de empacotamento manual.

Empacote subcomponentes de vetores e escalares cujo tamanho é grande o suficiente para evitar a passagem de limites de registro. Por exemplo, todos eles são válidos:

cbuffer MyBuffer
{
    float4 Element1 : packoffset(c0);
    float1 Element2 : packoffset(c1);
    float1 Element3 : packoffset(c1.y);
}

Confira também

Sintaxe de Variável

Variáveis (DirectX HLSL)