Compartir a través de


Semántica

Una semántica es una cadena adjunta a una entrada o salida del sombreador que transmite información sobre el uso previsto de un parámetro. La semántica es necesaria en todas las variables que se pasan entre las fases del sombreador. La sintaxis para agregar una semántica a una variable de sombreador se muestra aquí (Sintaxis de variable (DirectX HLSL)).

En general, los datos pasados entre fases de canalización son completamente genéricos y no se interpretan de forma única por el sistema; Se permite la semántica arbitraria que no tiene ningún significado especial. Los parámetros (en Direct3D 10 y versiones posteriores) que contienen estas semánticas especiales se conocen como System-Value Semántica.

Semántica compatible con Direct3D 9 y Direct3D 10 y versiones posteriores

Los siguientes tipos de semántica se admiten en Direct3D 9 y Direct3D 10 y versiones posteriores.

Semántica del sombreador de vértices

Esta semántica tiene significado cuando se adjunta a un parámetro de sombreador de vértices. Esta semántica se admite en Direct3D 9 y Direct3D 10 y versiones posteriores.

Entrada Descripción Tipo
BINORMAL[n] Binormal float4
BLENDINDICES[n] Índices de mezcla uint
BLENDWEIGHT[n] Ponderaciones de mezcla flotar
COLOR[n] Color difuso y especular float4
NORMAL[n] Vector normal float4
POSITION[n] Posición del vértice en el espacio de objetos. float4
POSITIONT Posición de vértice transformada. float4
PSIZE[n] Tamaño de punto flotar
TANGENT[n] Tangente float4
TEXCOORD[n] Coordenadas de textura float4
Salida Descripción Tipo
COLOR[n] Color difuso o especular float4
NIEBLA Niebla de vértices flotar
POSITION[n] Posición de un vértice en un espacio homogéneo. Posición de proceso en el espacio de pantalla dividiendo (x,y,z) por w. Cada sombreador de vértices debe escribir un parámetro con esta semántica. NOTA: Esta semántica está disponible en Direct3D 9. Para Direct3D 10 y versiones posteriores, use SV_Position en su lugar. float4
PSIZE Tamaño de punto flotar
TESSFACTOR[n] Factor de teselación flotar

n es un entero opcional entre 0 y el número de recursos admitidos. Por ejemplo, POSITION0, TEXCOORD1, etc.

Semántica del sombreador de píxeles

Esta semántica tiene significado cuando se adjunta a un parámetro de entrada del sombreador de píxeles. Esta semántica se admite en Direct3D 9 y Direct3D 10 y versiones posteriores.

Entrada Descripción Tipo
COLOR[n] Color difuso o especular. float4
TEXCOORD[n] Coordenadas de textura float4
VFACE Escalar de punto flotante que indica un primitivo orientado hacia atrás. Un valor negativo se enfrenta hacia atrás, mientras que un valor positivo se enfrenta a la cámara.

Nota:
Esta semántica está disponible en Direct3D 9 Shader Model 3.0. Para Direct3D 10 y versiones posteriores, use SV_IsFrontFace en su lugar.


flotar
VPOS Ubicación de píxeles (x,y) en el espacio de la pantalla. Para convertir un sombreador direct3D 9 (que usa esta semántica) a un sombreador de Direct3D 10 y versiones posteriores, consulte VPOS 9 direct3D 9 y Direct3D 10 SV_Position) float2
Salida Descripción Tipo
COLOR[n] Color de salida float4
DEPTH[n] Profundidad de salida flotar

n es un entero opcional entre 0 y el número de recursos admitidos. Por ejemplo, PSIZE0, COLOR1, etc.

La semántica COLOR solo es válida en el modo de compatibilidad del sombreador (es decir, cuando se crea el sombreador mediante D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY).

Semántica solo compatible con Direct3D 10 y versiones posteriores.

Los siguientes tipos de semántica se han introducido recientemente para Direct3D 10 y no están disponibles para Direct3D 9.

Semántica de System-Value

La semántica de valor del sistema es nueva en Direct3D 10. Todos los valores del sistema comienzan con un prefijo de SV_, un ejemplo común es SV_POSITION, que se interpreta mediante la fase de rasterizador. Los valores del sistema son válidos en otras partes de la canalización. Por ejemplo, SV_Position se pueden especificar como entrada para un sombreador de vértices, así como como una salida. Los sombreadores de píxeles solo pueden escribir en parámetros con la semántica de SV_Depth y SV_Target valor del sistema.

Otros valores del sistema (SV_VertexID, SV_InstanceID, SV_IsFrontFace) solo pueden introducirse en el primer sombreador activo de la canalización que puede interpretar el valor determinado; después de eso, la función de sombreador debe pasar los valores a las fases posteriores.

SV_PrimitiveID es una excepción a esta regla de que solo se introduce en el primer sombreador activo de la canalización que puede interpretar el valor determinado; el hardware puede proporcionar el mismo valor de identificador que la entrada a la fase del sombreador de casco, la fase de sombreador de dominio y después de esa fase es la primera habilitada: fase del sombreador de geometría o fase del sombreador de píxeles.

Si la teselación está habilitada, la fase del sombreador de casco y la fase de sombreador de dominio están presentes. Para una revisión determinada, el mismo PrimitiveID se aplica a la invocación del sombreador de casco de la revisión y a todas las invocaciones del sombreador de dominio teselado. El mismo PrimitiveID también se propaga a la siguiente fase activa; Fase del sombreador geometry o fase de sombreador de píxeles si está habilitada.

Si las entradas del sombreador de geometría SV_PrimitiveID y porque pueden generar cero o uno o más primitivos por invocación, el sombreador debe programar su propia elección de SV_PrimitiveID valor para cada primitivo de salida si una entrada de sombreador de píxeles posterior SV_PrimtiveID.

Como otro ejemplo, la fase del sombreador de vértices no puede interpretarse SV_PrimitiveID porque un vértice puede ser miembro de varios primitivos.

Estas semánticas se han agregado a Direct3D 10; no están disponibles en Direct3D 9.

Semántica de valor del sistema para la fase de rasterizador.

semántica de System-Value Descripción Tipo
SV_ClipDistance[n] Recorte de datos de distancia. SV_ClipDistance valores se supone que son una distancia con signo float32 a un plano. La configuración primitiva solo invoca la rasterización en píxeles para los que las distancias del plano interpolado se >= 0. Varios planos de clip se pueden implementar simultáneamente, declarando varios componentes de uno o varios elementos de vértices como el SV_ClipDistance. Los valores de distancia de recorte y selección combinados son como máximo componentes D3D#_CLIP_OR_CULL_DISTANCE_COUNT en el máximo registros D3D#_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT. Disponible para todos los sombreadores en los que se van a leer o escribir, excepto el sombreador de vértices que puede escribir el valor, pero no tomarlo como entrada.
Los planos clip funcionan como SV_ClipDistance, pero funcionan en todos los 9_x de nivel de características de hardware y versiones posteriores. Para obtener más información, consulta planos de clip de usuario en el nivel de característica 9 hardware.
flotar
SV_CullDistance[n] Selección de datos de distancia. Cuando a los componentes de los elementos de vértice se les asigna esta etiqueta, se supone que estos valores son una distancia con signo float32 a un plano. Los primitivos se descartarán completamente si las distancias del plano para todos los vértices del primitivo se < 0. Se pueden usar varios planos de selección simultáneamente, declarando varios componentes de uno o varios elementos de vértices como el SV_CullDistance. Los valores de distancia de recorte y selección combinados son como máximo componentes D3D#_CLIP_OR_CULL_DISTANCE_COUNT en el máximo registros D3D#_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT. Disponible para todos los sombreadores en los que se van a leer o escribir, excepto el sombreador de vértices que puede escribir el valor, pero no tomarlo como entrada.
flotar
SV_Coverage Máscara que se puede especificar en la entrada, salida o en ambos sombreador de píxeles.
Para SV_Coverage en un sombreador de píxeles, OUTPUT se admite en ps_4_1 o superior.
Para SV_Coverage en un sombreador de píxeles, INPUT requiere ps_5_0 o superior.
uint
SV_Depth Datos de búfer de profundidad. El sombreador de píxeles se puede escribir. flotar
SV_DepthGreaterEqual En un sombreador de píxeles, permite la salida de profundidad, siempre que sea mayor o igual que el valor determinado por el rasterizador. Habilita el ajuste de profundidad sin deshabilitar la Z temprana. flotar
SV_DepthLessEqual En un sombreador de píxeles, permite la salida de profundidad, siempre que sea menor o igual que el valor determinado por el rasterizador. Habilita el ajuste de profundidad sin deshabilitar la Z temprana. flotar
SV_DispatchThreadID Define el desplazamiento global del subproceso dentro de la llamada de distribución, por dimensión del grupo. Disponible como entrada para el sombreador de proceso. (solo lectura) uint3
SV_DomainLocation Define la ubicación en el casco del punto de dominio actual que se está evaluando. Disponible como entrada para el sombreador de dominio. (solo lectura) float2|3
SV_GroupID Define el desplazamiento de grupo dentro de una llamada de envío, por dimensión de la llamada de envío. Disponible como entrada para el sombreador de proceso. (solo lectura) uint3
SV_GroupIndex Proporciona un índice aplanado para un subproceso determinado dentro de un grupo determinado. Disponible como entrada para el sombreador de proceso. (solo lectura) uint
SV_GroupThreadID Define el desplazamiento del subproceso dentro del grupo, por dimensión del grupo. Disponible como entrada para el sombreador de proceso. (solo lectura) uint3
SV_GSInstanceID Define la instancia del sombreador de geometría. Disponible como entrada para el sombreador de geometría. La instancia es necesaria como sombreador de geometría se puede invocar hasta 32 veces en la misma primitiva de geometría. uint
SV_InnerCoverage Representa información de rasterización conservadora infravalorada (es decir, si se garantiza un píxel,to-betotalmente cubierto). El sombreador de píxeles puede leerlo o escribirlo.
SV_InsideTessFactor Define la cantidad de teselación dentro de una superficie de revisión. Disponible en el sombreador de casco para escribir y disponible en el sombreador de dominio para leer. float|float[2]
SV_InstanceID Identificador por instancia generado automáticamente por el runtime (consulte Using System-Generated Values (Direct3D 10)). Disponible para todos los sombreadores.
SV_IsFrontFace Especifica si un triángulo está orientado hacia delante. Para líneas y puntos, IsFrontFace tiene el valor true. La excepción es las líneas dibujadas fuera de triángulos (modo wireframe), que establece IsFrontFace de la misma manera que rasterizar el triángulo en modo sólido. El sombreador de geometría se puede escribir en y leerlo por el sombreador de píxeles. Bool
SV_OutputControlPointID Define el índice del identificador de punto de control en el que opera una invocación del punto de entrada principal del sombreador de casco. El sombreador de casco solo se puede leer. uint
SV_Position Cuando SV_Position se declara para la entrada en un sombreador, puede tener uno de los dos modos de interpolación especificados: linearNoPerspective o linearNoPerspectiveCentroid, donde este último hace que se proporcionen valores xyzw acoplados centroid cuando se suavizan multisample. Cuando se usa en un sombreador, SV_Position describe la ubicación del píxel. Disponible en todos los sombreadores para obtener el centro de píxeles con un desplazamiento de 0,5. float4
SV_PrimitiveID Identificador por primitivo generado automáticamente por el runtime (consulte Using System-Generated Values (Direct3D 10)). Los sombreadores de geometría o píxeles se pueden escribir en y leer por los sombreadores de geometría, píxel, casco o dominio. uint
SV_RenderTargetArrayIndex Índice de matriz de destino de representación. Se aplica a la salida del sombreador de geometría e indica el segmento de matriz de destino de representación en el que el sombreador de píxeles dibujará el primitivo. SV_RenderTargetArrayIndex solo es válido si el destino de representación es un recurso de matriz. Esta semántica solo se aplica a primitivos; si un primitivo tiene más de un vértice, se usa el valor del vértice inicial. Este valor también indica qué segmento de matriz de una vista de profundidad/galería de símbolos se usa con fines de lectura y escritura.
Puede escribirse desde el sombreador de geometría y leerlo el sombreador de píxeles.
Si D3D11_FEATURE_DATA_D3D11_OPTIONS3::VPAndRTArrayIndexFromAnyShaderFeedingRasterizer es true, se aplica SV_RenderTargetArrayIndex a cualquier sombreador que alimente el rasterizador.
uint
SV_SampleIndex Datos de índice de frecuencia de ejemplo. Disponible para ser leído o escrito solo por el sombreador de píxeles. uint
SV_StencilRef Representa el valor de referencia de la galería de símbolos del sombreador de píxeles actual. Solo se puede escribir mediante el sombreador de píxeles. uint
SV_Target[n], donde 0 <= n <= 7 Valor de salida que se almacenará en un destino de representación. El índice indica a cuál de los 8 destinos de representación enlazados posiblemente se van a escribir. El valor está disponible para todos los sombreadores. float[2|3|4]
SV_TessFactor Define la cantidad de teselación en cada borde de una revisión. Disponible para escribir en el sombreador de casco y leer en el sombreador de dominio. float[2|3|4]
SV_VertexID Identificador por vértice generado automáticamente por el runtime (consulte Using System-Generated Values (Direct3D 10)). Disponible como entrada solo para el sombreador de vértices. uint
SV_ViewportArrayIndex Índice de matriz de ventanilla. Se aplica a la salida del sombreador de geometría e indica qué ventanilla se va a usar para el primitivo que se está escribiendo actualmente. El sombreador de píxeles puede leerlo. El primitivo se transformará y recortará en la ventanilla especificada por el índice antes de pasarlo al rasterizador. Esta semántica solo se aplica a primitivos; si un primitivo tiene más de un vértice, se usa el valor del vértice inicial.
Si D3D11_FEATURE_DATA_D3D11_OPTIONS3::VPAndRTArrayIndexFromAnyShaderFeedingRasterizer es true, SV_ViewportArrayIndex se aplica a cualquier sombreador que alimente el rasterizador.
uint
SV_ShadingRate Define, a través de la velocidad de sombreado valores, el número de píxeles escritos por una invocación de sombreador de píxeles para Variable Shading Rate Tier 2 o dispositivos superiores. Se puede leer desde el sombreador de píxeles. Se puede escribir desde un sombreador de vértices o geometría. uint

Limitaciones al escribir SV_Depth:

  • Cuando el muestreo múltiple (MultisampleEnable es TRUE en D3D10_RASTERIZER_DESC) y escribir un valor de profundidad (mediante un sombreador de píxeles), el valor único escrito también se usa en la prueba de profundidad ; por lo tanto, la capacidad de representar bordes primitivos en una resolución superior se pierde cuando se realiza un muestreo múltiple.
  • Al usar el control de flujo dinámico, es imposible determinar en tiempo de compilación si un sombreador que escribe SV_Depth en algunas rutas de acceso se garantiza que escriba SV_Depth en cada ejecución. Error al escribir SV_Depth cuando se declara como resultado un comportamiento indefinido (que puede incluir o no descartar el píxel).
  • Cualquier valor float32 que incluya +/-INF y NaN se puede escribir en SV_Depth.
  • La escritura SV_Depth sigue siendo válida al realizar la combinación de color de origen dual.

Migración de Direct3D 9 a Direct3D 10 y versiones posteriores

Se deben tener en cuenta los siguientes problemas al migrar código de Direct3D 9 a Direct3D 10 y versiones posteriores:

Asignación a la semántica de Direct3D 9

Algunas de las semánticas de Direct3D 10 y posteriores se asignan directamente a la semántica de Direct3D 9.

Semántica de Direct3D 10 Semántica equivalente de Direct3D 9
SV_Depth PROFUNDIDAD
SV_Position POSICIÓN
SV_Target COLOR

[!] Nota para desarrolladores de Direct3D 9: para destinos de Direct3D 9, la semántica del sombreador debe asignarse a la semántica válida de Direct3D 9. Para la compatibilidad con versiones anteriores, FXC trata POSITION0 (y sus nombres de variante) como SV_Position. FXC trata COLOR como SV_TARGET. DXC y compiladores más recientes consideran POSITION[n] y COLOR como semántica definida por el usuario.

VPOS de Direct3D 9 y Direct3D 10 SV_Position

La SV_Position semántica D3D10 proporciona una funcionalidad similar a la semántica del sombreador de Direct3D 9 3. Por ejemplo, en Direct3D 9 se usa la sintaxis siguiente para un sombreador de píxeles mediante coordenadas de espacio de pantalla:

float4 psMainD3D9( float4 screenSpace : VPOS ) : COLOR
{
    // code here 
}

VPOS se agregó para la compatibilidad con el modelo de sombreador 3, para especificar coordenadas de espacio de pantalla, ya que la semántica POSITION estaba pensada para coordenadas de espacio de objetos.

En Direct3D 10 y versiones posteriores, la semántica de SV_Position (cuando se usa en el contexto de un sombreador de píxeles) especifica coordenadas de espacio de pantalla (desplazamiento por 0,5). Por lo tanto, el sombreador direct3D 9 sería aproximadamente equivalente (sin tener en cuenta el desplazamiento 0,5) a lo siguiente:

float4 psMainD3D10( float4 screenSpace : SV_Position ) : COLOR
{
    // code here
}

Al migrar de Direct3D 9 a Direct3D 10 y versiones posteriores, deberá tener en cuenta esto al traducir los sombreadores.

Planos de recorte de usuario en HLSL

A partir de Windows 8, puedes usar los planos de clip atributo de función en una declaración de función de HLSL en lugar de SV_ClipDistance para que el sombreador funcione en nivel de característica 9_x, así como en el nivel de característica 10 y versiones posteriores. Para obtener más información, consulta planos de clip de usuario en el nivel de característica 9 hardware.