Compartir a través de


packoffset

Palabra clave de empaquetado constante de sombreador opcional, que usa la sintaxis siguiente:

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

Parámetros

Elemento Descripción
packoffset
Palabra clave requerida.
C
El empaquetado solo se aplica a los registros constantes (c).
[Subcomponente] [.component]
Subcomponentes y componentes opcionales. Un subcomponente es un número de registro, que es un entero. Un componente tiene la forma de [.xyzw].

Comentarios

Use esta palabra clave para empaquetar manualmente una constante de sombreador al declarar un tipo de variable.

Al empaquetar una constante, no se pueden mezclar tipos de constantes.

El compilador se comporta de forma ligeramente diferente para constantes globales y constantes uniformes:

  • Constante global. El compilador agrega una variable global como una constante global a un $Global cbuffer. Los elementos empaquetados automáticamente (los declarados sin packoffset) aparecerán después de la última variable empaquetada manualmente. Puede mezclar tipos al empaquetar constantes globales.
  • Constante uniforme. El compilador agregará un parámetro uniforme en la lista de parámetros de una función a un búfer de constantes $Param cuando el sombreador se compile fuera del marco de efectos. Cuando se compila dentro del marco de efecto, una constante uniforme debe resolverse en una variable uniforme definida en el ámbito global. Una constante uniforme no se puede desplazar manualmente; su uso recomendado es solo para la especialización de sombreadores en los que se convierten en alias de los globales, no como medio para pasar los datos de la aplicación al sombreador.

Estos son algunos ejemplos adicionales: empaquetar constantes mediante el modelo de sombreador 4.

Ejemplos

Estos son varios ejemplos de constantes de sombreador de empaquetado manual.

Empaqueta los subcomponentes de vectores y escalares cuyo tamaño es lo suficientemente grande como para evitar el cruce de límites de registro. Por ejemplo, todos son válidos:

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

Consulte también

Sintaxis de variables

Variables (DirectX HLSL)