Exposición de recursos de streaming de HLSL

Se requiere una sintaxis específica del lenguaje de sombreador de alto nivel (HLSL) de Microsoft para admitir recursos de streaming en el modelo 5 del sombreador.

La sintaxis HLSL de Shader Model 5 solo se permite en dispositivos con compatibilidad con recursos de streaming. Cada método HLSL pertinente para los recursos de streaming de la tabla siguiente acepta uno (comentarios) o dos (pinza y comentarios en este orden) parámetros opcionales adicionales. Por ejemplo, un método Sample es:

Sample(sampler, location [, offset [, clamp [, feedback] ])

Un ejemplo de un método Sample es Texture2D.Sample(S,float,int,float,uint).

Los parámetros offset, clamp y feedback son opcionales. Debe especificar todos los parámetros opcionales hasta el que necesite, que es coherente con las reglas de C++ para los argumentos de función predeterminados. Por ejemplo, si se necesita el estado de comentarios, los parámetros offset y clamp deben proporcionarse explícitamente a Sample, aunque no sean lógicamente necesarios.

El parámetro clamp es un valor float escalar. El valor literal de clamp=0.0f indica que no se realiza la operación de fijación.

El parámetro feedback es una variable uint que se puede proporcionar a la función checkAccessFullyMapped intrínseca de consulta de acceso a memoria. No debe modificar ni interpretar el valor del parámetro de comentarios; pero el compilador no proporciona ningún análisis y diagnóstico avanzados para detectar si ha modificado el valor.

Esta es la sintaxis de CheckAccessFullyMapped:

bool CheckAccessFullyMapped(in uint FeedbackVar);

CheckAccessFullyMapped interpreta el valor de FeedbackVar y devuelve true si todos los datos a los que se accede se asignaron en el recurso; De lo contrario, CheckAccessFullyMapped devuelve false.

Si el parámetro clamp o feedback está presente, el compilador emite una variante de la instrucción básica. Por ejemplo, el ejemplo de un recurso de streaming genera la sample_cl_s instrucción .

Si no se especifica ninguna restricción ni comentarios, el compilador emite la instrucción básica, de modo que no haya ningún cambio respecto al comportamiento actual.

El valor de la abrazadera de 0,0f indica que no se realiza ninguna pinza; por lo tanto, el compilador del controlador puede adaptar aún más la instrucción al hardware de destino. Si los comentarios son un registro NULL en una instrucción, los comentarios no se usarán; por lo tanto, el compilador del controlador puede adaptar aún más la instrucción a la arquitectura de destino.

Si el compilador HLSL deduce que la restricción es 0,0f y los comentarios no se usa, el compilador emite la instrucción básica correspondiente (por ejemplo, sample en lugar de sample_cl_s).

Si un acceso a recursos de streaming consta de varias instrucciones de código de bytes constituyentes, por ejemplo, para recursos estructurados, el compilador agrega valores de comentarios individuales a través de la operación OR para generar el valor de comentarios final. Por lo tanto, verá un único valor de comentarios para un acceso tan complejo.

Esta es la tabla de resumen de los métodos HLSL que se cambian para admitir comentarios o abrazaderas. Todos ellos funcionan en recursos en mosaico y sin streaming de todas las dimensiones. Los recursos que no son de streaming siempre parecen estar totalmente asignados.

Objetos HLSL Métodos intrínsecos con opción de comentarios (*) : también tiene la opción de fijación

[RW] Texture2D

[RW] Texture2DArray

TextureCUBE

TextureCUBEArray

Reunir

GatherRed

GatherGreen

GatherBlue

GatherAlpha

GatherCmp

GatherCmpRed

GatherCmpGreen

GatherCmpBlue

GatherCmpAlpha

[RW] Texture1D

[RW] Texture1DArray

[RW] Texture2D

[RW] Texture2DArray

[RW] Texture3D

TextureCUBE

TextureCUBEArray

Muestra*

SampleBias*

SampleCmp*

SampleCmpLevelZero

SampleGrad*

SampleLevel

[RW] Texture1D

[RW] Texture1DArray

[RW] Texture2D

Texture2DMS

[RW] Texture2DArray

Texture2DArrayMS

[RW] Texture3D

[RW] Búfer

[RW] ByteAddressBuffer

[RW] StructuredBuffer

Cargar

 

Acceso de canalización a recursos de streaming