Exposición de recursos de streaming de HLSLHLSL streaming resources exposure

Se requiere una sintaxis específica de lenguaje de sombreado de alto nivel (HLSL) de Microsoft para admitir recursos de streaming en el modelo de sombreador 5.A specific Microsoft High Level Shader Language (HLSL) syntax is required to support streaming resources in Shader Model 5.

La sintaxis de HLSL para el modelo de sombreador 5 solo se permite en dispositivos con compatibilidad con recursos de streaming.The HLSL syntax for Shader Model 5 is allowed only on devices with streaming resources support. Cada método HLSL relevante para los recursos de streaming en la tabla siguiente acepta uno (comentarios) o dos (abrazadera y comentarios en este orden) parámetros opcionales adicionales.Each relevant HLSL method for streaming resources in the following table accepts either one (feedback) or two (clamp and feedback in this order) additional optional parameters. Por ejemplo, un método de ejemplo es:For example, a Sample method is:

Ejemplo (muestra, ubicación [ , desplazamiento [ , abrazadera [ , comentarios ] ] ] )Sample(sampler, location [, offset [, clamp [, feedback] ] ])

Un ejemplo de método de ejemplo es Texture2D. sample (S, Float, int, Float, uint).An example of a Sample method is Texture2D.Sample(S,float,int,float,uint).

Los parámetros offset, Clamp y feedback son opcionales.The offset, clamp and feedback parameters are optional. Debe especificar todos los parámetros opcionales hasta el que necesite, lo que es coherente con las reglas de C++ de los argumentos de función predeterminados.You must specify all optional parameters up to the one you need, which is consistent with the C++ rules for default function arguments. Por ejemplo, si se necesita el estado de los comentarios, los parámetros offset y Clamp deben proporcionarse explícitamente al ejemplo, aunque es posible que no sean necesarios lógicamente.For example, if the feedback status is needed, both offset and clamp parameters need to be explicitly supplied to Sample, even though they may not be logically needed.

El parámetro Clamp es un valor Float escalar.The clamp parameter is a scalar float value. El valor literal de Clamp = 0.0 f indica que no se realiza la operación de abrazadera.The literal value of clamp=0.0f indicates that the clamp operation isn't performed.

El parámetro feedback es una variable uint que se puede proporcionar a la función CheckAccessFullyMapped intrínseca de consulta de acceso a la memoria.The feedback parameter is a uint variable that you can supply to the memory-access querying intrinsic CheckAccessFullyMapped function. No debe modificar ni interpretar el valor del parámetro feedback. pero el compilador no proporciona ningún diagnóstico y análisis avanzados para detectar si modificó el valor.You must not modify or interpret the value of the feedback parameter; but, the compiler doesn't provide any advanced analysis and diagnostics to detect whether you modified the value.

Esta es la sintaxis de CheckAccessFullyMapped:Here is the syntax of CheckAccessFullyMapped:

bool CheckAccessFullyMapped (en uint FeedbackVar);bool CheckAccessFullyMapped(in uint FeedbackVar);

CheckAccessFullyMapped interpreta el valor de FeedbackVar y devuelve true si todos los datos a los que se tiene acceso se asignaron en el recurso; de lo contrario, CheckAccessFullyMapped devuelve false.CheckAccessFullyMapped interprets the value of FeedbackVar and returns true if all data being accessed was mapped in the resource; otherwise, CheckAccessFullyMapped returns false.

Si el parámetro clamp o feedback está presente, el compilador emite una variante de la instrucción básica.If either the clamp or feedback parameter is present, the compiler emits a variant of the basic instruction. Por ejemplo, el ejemplo de un recurso de streaming genera la sample_cl_s instrucción.For example, sample of a streaming resource generates the sample_cl_s instruction.

Si no se especifican Clamp ni feedback, el compilador emite la instrucción básica, de modo que no hay ningún cambio en el comportamiento actual.If neither clamp nor feedback is specified, the compiler emits the basic instruction, so that there is no change from the current behavior.

El valor de Clamp de 0,0 f indica que no se realiza ninguna abrazadera; por lo tanto, el compilador de controladores puede personalizar aún más la instrucción al hardware de destino.The clamp value of 0.0f indicates that no clamp is performed; thus, the driver compiler can further tailor the instruction to the target hardware. Si los comentarios son un registro nulo en una instrucción, los comentarios no se usan. por lo tanto, el compilador de controladores puede adaptar aún más la instrucción a la arquitectura de destino.If feedback is a NULL register in an instruction, the feedback is unused; thus, the driver compiler can further tailor the instruction to the target architecture.

Si el compilador de HLSL infiere que la abrazadera es 0,0 f y los comentarios no se usan, el compilador emite la instrucción básica correspondiente (por ejemplo, sample en lugar de sample_cl_s ).If the HLSL compiler infers that clamp is 0.0f and feedback is unused, the compiler emits the corresponding basic instruction (for example, sample rather than sample_cl_s).

Si un acceso a recursos de streaming consta de varias instrucciones de código de bytes constituyentes, por ejemplo, para los recursos estructurados, el compilador agrega valores de comentarios individuales a través de la operación o para generar el valor final de los comentarios.If a streaming resource access consists of several constituent byte code instructions, for example, for structured resources, the compiler aggregates individual feedback values via the OR operation to produce the final feedback value. Por lo tanto, verá un valor de comentarios único para este tipo de acceso complejo.Therefore, you see a single feedback value for such a complex access.

Esta es la tabla de Resumen de los métodos de HLSL que se cambian para admitir comentarios y/o abrazadera.This is the summary table of HLSL methods that are changed to support feedback and/or clamp. Todas ellas funcionan en recursos en mosaico y sin streaming de todas las dimensiones.These all work on tiled and non-streaming resources of all dimensions. Los recursos que no son de streaming parecen estar totalmente asignados.Non-streaming resources always appear to be fully mapped.

Objetos HLSL HLSL objects Métodos intrínsecos con la opción feedback (\*)-también tiene la opción ClampIntrinsic methods with feedback option (\*) - also has clamp option

RW Texture2D[RW]Texture2D

RW Texture2DArray[RW]Texture2DArray

TextureCUBETextureCUBE

TextureCUBEArrayTextureCUBEArray

RecopilarGather

GatherRedGatherRed

GatherGreenGatherGreen

GatherBlueGatherBlue

GatherAlphaGatherAlpha

GatherCmpGatherCmp

GatherCmpRedGatherCmpRed

GatherCmpGreenGatherCmpGreen

GatherCmpBlueGatherCmpBlue

GatherCmpAlphaGatherCmpAlpha

RW Texture1D[RW]Texture1D

RW Texture1DArray[RW]Texture1DArray

RW Texture2D[RW]Texture2D

RW Texture2DArray[RW]Texture2DArray

RW Texture3D[RW]Texture3D

TextureCUBETextureCUBE

TextureCUBEArrayTextureCUBEArray

AdventureWorksSample\*

SampleBias\*SampleBias\*

SampleCmp\*SampleCmp\*

SampleCmpLevelZeroSampleCmpLevelZero

SampleGrad\*SampleGrad\*

SampleLevelSampleLevel

RW Texture1D[RW]Texture1D

RW Texture1DArray[RW]Texture1DArray

RW Texture2D[RW]Texture2D

Texture2DMSTexture2DMS

RW Texture2DArray[RW]Texture2DArray

Texture2DArrayMSTexture2DArrayMS

RW Texture3D[RW]Texture3D

RW Búfer[RW]Buffer

RW ByteAddressBuffer[RW]ByteAddressBuffer

RW StructuredBuffer[RW]StructuredBuffer

CargarLoad

 

Temas relacionadosRelated topics

Acceso de canalización a recursos de streamingPipeline access to streaming resources