Uso de constantes directamente en la firma raíz

Las aplicaciones pueden definir constantes raíz en la firma raíz, cada una como un conjunto de valores de 32 bits. Aparecen en lenguaje de sombreado de alto nivel (HLSL) como un búfer de constantes. Tenga en cuenta que los búferes de constantes por motivos históricos se ven como conjuntos de valores de 4 x 32 bits.

Cada conjunto de constantes de usuario se trata como una matriz escalar de valores de 32 bits, indizable dinámicamente y de solo lectura desde el sombreador. Fuera de los límites que indexa un conjunto determinado de constantes raíz genera resultados no definidos. En HLSL, se pueden proporcionar definiciones de estructura de datos para que las constantes de usuario les proporcionen tipos. Por ejemplo, si la firma raíz define un conjunto de 4 constantes raíz, HLSL puede superponer la siguiente estructura en ellas.

struct DrawConstants
{
    uint foo;
    float2 bar;
    int moo;
};
ConstantBuffer<DrawConstants> myDrawConstants : register(b1, space0);

No se permiten matrices en búferes de constantes que se asignan a constantes raíz, ya que no se admite la indexación dinámica en el espacio de firma raíz. Por ejemplo, no es válido tener una entrada en el búfer de constantes como float myArray[2];. Un búfer de constantes asignado a constantes raíz no puede ser una matriz; por lo tanto, no es válido asignar cbuffer myCBArray[2] a constantes raíz.

Las constantes se pueden establecer parcialmente. Por ejemplo, si la firma raíz define cuatro valores de 32 bits en RootTableBindSlot 2, cualquier subconjunto de las cuatro constantes se puede establecer a la vez (los demás permanecen sin cambios). Esto puede ser útil en agrupaciones que heredan el estado de firma raíz y pueden cambiarla parcialmente.

Al establecer constantes, tenga cuidado con el diseño del búfer de constantes esperado por el sombreador. Es posible que las constantes se acolchan a vec4 los límites, por ejemplo. Para comprobar el diseño esperado, compruebe la información de reflexión del sombreador HLSL.

Las siguientes API (de la interfaz ID3D12GraphicsCommandList ) son para establecer constantes directamente en la firma raíz:

Además, consulte la estructura D3D12_ROOT_CONSTANTS .

Firmas raíz