Introducción a las firmas raíz

La aplicación configura una firma raíz y vincula las listas de comandos a los recursos que requieren los sombreadores. La lista de comandos de gráficos tiene una firma raíz de proceso y gráficos. Una lista de comandos de proceso simplemente tendrá una firma raíz de proceso. Estas firmas raíz son independientes entre sí.

Parámetros y argumentos raíz

Una firma raíz es similar a una firma de función de API, determina los tipos de datos que deben esperar los sombreadores, pero no define la memoria real ni los datos. Un parámetro raíz es una entrada de la firma raíz. Los valores reales de los parámetros raíz establecidos y modificados en tiempo de ejecución se denominan argumentos raíz. Cambiar los argumentos raíz cambia los datos que leen los sombreadores.

Constantes raíz, descriptores y tablas

La firma raíz puede contener tres tipos de parámetros; constantes raíz (constantes insertadas en los argumentos raíz), descriptores raíz (descriptores insertados en los argumentos raíz) y tablas descriptores (punteros a un intervalo de descriptores en el montón del descriptor).

Las constantes raíz son valores insertados de 32 bits que se muestran en el sombreador como un búfer de constantes.

Los descriptores raíz insertados deben contener descriptores a los que se accede con más frecuencia, aunque se limita a los CBV, y los búferes UAV o SRV sin formato o estructurados. Un tipo más complejo, como una SRV de textura 2D, no se puede usar como descriptor raíz. Los descriptores raíz no incluyen un límite de tamaño, por lo que no puede haber ninguna comprobación fuera de límite, a diferencia de los descriptores de los montones de descriptores, que incluyen un tamaño.

Las entradas de la tabla descriptor dentro de las firmas raíz contienen el descriptor, el nombre de enlace del sombreador HLSL y la marca de visibilidad. Consulte Shader Model 5.1 para obtener más información sobre los nombres de sombreador. En algún hardware, puede haber una ganancia de rendimiento de hacer que solo los descriptores sean visibles para las fases del sombreador que las requieren (consulte D3D12_SHADER_VISIBILITY).

entrada de tabla de descriptores raíz

El diseño de la firma raíz es bastante flexible, con algunas restricciones impuestas en hardware menos capaz. Independientemente del nivel de hardware, las aplicaciones siempre deben intentar hacer que la firma raíz sea tan pequeña como sea necesario para lograr la máxima eficiencia. Las aplicaciones pueden tener más tablas descriptores en la firma raíz, pero menos espacio para las constantes raíz, o viceversa.

El contenido de la firma raíz (las tablas de descriptores, las constantes raíz y los descriptores raíz) que la aplicación ha enlazado automáticamente recibe versiones del controlador D3D12 cada vez que cualquier parte del contenido cambie entre llamadas de dibujo (gráficos)/distribución (proceso). Por lo tanto, cada dibujo o envío obtiene un conjunto completo único de estado de firma raíz.

Idealmente, hay grupos de objetos de estado de canalización (SPO) que comparten la misma firma raíz. Después de establecer una firma raíz en la canalización, todos los enlaces que define (tablas de descriptores, descriptores, constantes) se pueden establecer o cambiar individualmente, incluida la herencia en agrupaciones.

Una aplicación puede hacer su propio equilibrio entre el número de tablas de descriptores que quiere frente a los descriptores insertados (que ocupan más espacio pero quitan un direccionamiento indirecto) frente a las constantes insertadas (que no tienen direccionamiento indirecto) que desean en la firma raíz. Las aplicaciones deben usar la firma raíz como sea posible, confiando en la memoria controlada por la aplicación, como montones y montones de descriptores que apuntan a ellos para representar datos masivos.

Firmas raíz