Common-Shader Core
En el modelo de sombreador 4, todas las fases del sombreador implementan la misma funcionalidad base mediante un núcleo de sombreador común. Además, cada una de las tres fases del sombreador (vértice, geometría y píxel) ofrece funcionalidad única para cada fase, como la capacidad de generar nuevos primitivos a partir de la fase del sombreador de geometría o para descartar un píxel específico en la fase del sombreador de píxeles. En el diagrama siguiente se muestra cómo fluyen los datos a través de una fase del sombreador y la relación del núcleo del sombreador común con recursos de memoria del sombreador.
- datos de entrada: un sombreador de vértices recibe sus entradas de la fase del ensamblador de entrada; Los sombreadores de geometría y píxeles reciben sus entradas de la fase anterior del sombreador. Entre las entradas adicionales se incluyen semántica de valor del sistema, que son consumibles por la primera unidad de la canalización a la que son aplicables.
- datos de salida: los sombreadores generan resultados de salida que se pasarán a la fase posterior de la canalización. Para un sombreador de geometría, la cantidad de salida de datos de una sola invocación puede variar. Algunas salidas se interpretan mediante el núcleo del sombreador común (como la posición del vértice y el índice render-target-array), otros están diseñados para ser interpretados por una aplicación.
- código de sombreador: los sombreadores pueden leer desde la memoria, realizar operaciones aritméticas de punto flotante y enteros o operaciones de control de flujo. No hay límite para el número de instrucciones que se pueden implementar en un sombreador.
- Samplers: los muestreadores definen cómo muestrear y filtrar texturas. Al mismo tiempo, se pueden enlazar hasta 16 muestras a un sombreador.
- Texturas: las texturas se pueden filtrar mediante muestreadores o leerlos directamente con la función intrínseca carga.
- Búferes: los búferes nunca se filtran, pero se pueden leer desde la memoria por elemento directamente con la función intrínseca de carga. Tanto como 128 recursos de textura y búfer (combinados) se pueden enlazar a un sombreador simultáneamente.
- Búferes de constantes: los búferes de constantes están optimizados para variables constantes del sombreador. Hasta 16 búferes de constantes se pueden enlazar a una fase del sombreador simultáneamente. Están diseñados para una actualización más frecuente de la CPU; por lo tanto, tienen restricciones de tamaño, diseño y acceso adicionales.
Diferencias entre Direct3D 9 y Direct3D 10:
- En Direct3D 9, cada unidad de sombreador tenía un único archivo de registro constante pequeño para almacenar todas las variables del sombreador constante. Acomodar todos los sombreadores con este espacio constante limitado requiere el reciclaje frecuente de constantes por la CPU.
- En Direct3D 10, las constantes se almacenan en búferes inmutables en memoria y se administran como cualquier otro recurso. No hay ningún límite para el número de búferes de constantes que puede crear una aplicación. Al organizar constantes en búferes por frecuencia de actualización y uso, se puede reducir significativamente la cantidad de ancho de banda necesario para actualizar constantes para acomodar todos los sombreadores.
Compatibilidad con enteros y bit a bit
El núcleo del sombreador común proporciona un conjunto completo de operaciones de enteros de 32 bits y de 32 bits compatibles con IEEE. Estas operaciones permiten una nueva clase de algoritmos en ejemplos de hardware gráficos que incluyen técnicas de compresión y empaquetado, FFT y control de flujo de programa de campo de bits.
Los tipos de datos int y uint en Direct3D 10 HLSL se asignan a enteros de 32 bits en hardware.
Diferencias entre Direct3D 9 y Direct3D 10: En las entradas de flujo de Direct3D 9 marcadas como enteros en HLSL se interpretaron como punto flotante. En Direct3D 10, las entradas de flujo marcadas como enteros se interpretan como un entero de 32 bits. Además, los valores booleanos ahora son todos los bits establecidos o todos los bits sin establecer. Los datos convertidos en bool se interpretarán como true si el valor no es igual a 0,0f (se permite que el valor sea positivo y negativo cero sea false) y false en caso contrario. |
Operadores bit a bit
El núcleo del sombreador común admite los siguientes operadores bit a bit:
Operador | Función |
---|---|
~ | No lógico |
<< | Desplazamiento a la izquierda |
>> | Desplazamiento a la derecha |
& | Lógico y |
| | Lógico o |
^ | Xor lógico |
<<= | Desplazamiento a la izquierda igual |
>>= | Desplazamiento a la derecha igual |
&= | Y igual |
|= | O igual |
^= | Xor Equal |
Los operadores bit a bit se definen para funcionar solo en int y uint tipos de datos. Si intenta usar operadores bit a bit en float o struct tipos de datos, se producirá un error. Los operadores bit a bit siguen la misma prioridad que C con respecto a otros operadores.
Conversiones binarias
La conversión entre un entero y un tipo de punto flotante convertirá el valor numérico después de las reglas de truncamiento de C. Convertir un valor de un float, a un inty volver a un float es una conversión de pérdida que depende de la precisión del tipo de datos de destino. Estas son algunas de las funciones de conversión: asfloat (DirectX HLSL), asint (DirectX HLSL), asuint (DirectX HLSL).
Las conversiones binarias también se pueden realizar mediante funciones intrínsecas de HLSL. Esto hace que el compilador reinterprete la representación de bits de un número en el tipo de datos de destino.
Temas relacionados
-
modelo de sombreador de 4