Límites de la firma raíz
La firma raíz es bienes raíces primos y hay límites estrictos y costos que se deben tener en cuenta.
Límites y costos de memoria
El tamaño máximo de una firma raíz es de 64 DWORD.
Este tamaño máximo se elige para evitar el abuso de la firma raíz como una forma de almacenar datos masivos. Cada entrada de la firma raíz tiene un costo hacia este límite de 64 DWORD:
- Las tablas descriptores cuestan 1 DWORD cada una.
- Las constantes raíz cuestan 1 DWORD cada una, ya que son valores de 32 bits.
- Los descriptores raíz (direcciones virtuales de GPU de 64 bits) cuestan 2 DWUD cada uno.
Los muestreadores estáticos no tienen ningún costo en el tamaño de la firma raíz.
Costos de rendimiento
El costo de rendimiento (en términos de niveles de direccionamiento indirecto) es cero para una constante raíz, 1 para un descriptor raíz y 2 para una tabla de descriptores. Si una firma raíz es grande y se desborda de la memoria más rápida en memoria ligeramente más lenta (lo que puede ocurrir en algún hardware), agregue 1 al costo de rendimiento de los elementos desbordantes al final de la firma raíz.
Un desbordamiento puede producirse en el hardware que podría tener, por ejemplo, un tamaño fijo de 16 DWORD para el espacio de argumentos raíz. Este límite puede reducirse aún más si se usa el ensamblador de entrada. En este caso, hay desbordamiento en memoria ligeramente más lenta si la firma raíz es demasiado grande para la memoria nativa 15 o 16 DWORD. En otro hardware no hay memoria fija de argumentos raíz nativos (por lo que la situación de desbordamiento nunca se produce).
Para todo el hardware, si cambia algún argumento raíz, el controlador debe mantener una versión de todos los argumentos raíz (a diferencia de otros almacenamientos, como montones de descriptores y recursos de búfer, que el controlador no tiene versiones). En el hardware que se produce una situación de desbordamiento, solo es necesario versionar el área nativa o de desbordamiento, en función de dónde se haya producido el cambio. Obviamente, la cantidad de control de versiones debe mantenerse en el mínimo necesario.
Por lo general, tenga en cuenta las siguientes directrices:
- Use una firma raíz pequeña según sea necesario, aunque equilibre esto con la flexibilidad de una firma raíz más grande.
- Organice los parámetros en una firma raíz grande para que los parámetros más probables cambien a menudo, o si la latencia de acceso baja para un parámetro determinado es importante, primero se produce.
- Si es conveniente, use constantes raíz o vistas de búfer de constantes raíz sobre la colocación de vistas de búfer de constantes en un montón de descriptores.
Samplers estáticos
Los muestreadores estáticos (muestreadores en los que el estado está completamente definido e inmutable) forman parte de las firmas raíz, pero no cuentan hacia el límite de 64 DWORD. Si un sampler se puede definir como estático, no es necesario que el sampler forme parte de un montón de descriptores.
No hay ningún costo de rendimiento para usar muestreadores estáticos y una firma raíz puede contener una combinación de muestreadores estáticos (almacenados en la firma raíz o en espacio reservado en algún hardware) y muestreadores dinámicos (almacenados en un montón de descriptores de ejemplo). Los muestreadores de un montón de descriptores se pueden asignar e indexar dinámicamente, lo que los muestreadores estáticos no pueden.
Los muestreadores estáticos se pueden escribir como parte de la firma raíz en sombreadores HLSL (consulte Especificación de firmas raíz en HLSL).
Temas relacionados