sample (sm4 - asm)

Muestra los datos del elemento o la textura especificados mediante la dirección especificada y el modo de filtrado identificado por el sampler especificado.

sample[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], srcSampler
Elemento Descripción
Dest
[in] Dirección del resultado de la operación.
srcAddress
[in] Un conjunto de coordenadas de textura. Para más información, vea la sección Comentarios.
srcResource
[in] Registro de texturas. Para más información, vea la sección Comentarios.
srcSampler
[in] Un registro de sampler. Para más información, vea la sección Comentarios.

Comentarios

Los datos de origen pueden provenir de cualquier tipo de recurso, que no sea Búferes.

srcAddress proporciona el conjunto de coordenadas de textura necesarias para realizar la muestra, ya que los valores de punto flotante que hacen referencia al espacio normalizado en la textura. Los modos de ajuste de direcciones (wrap/mirror/clamp/border, etc.) se aplican a las coordenadas de textura fuera del intervalo [0...1], tomado del estado del muestreador (s#) y se aplican después de aplicar cualquier desplazamiento de dirección a las coordenadas de textura.

srcResource es un registro de texturas (t#). Esto es simplemente un marcador de posición para una textura, incluido el tipo de datos devuelto del recurso que se está muestreando. Toda esta información se declara en el preámbulo del sombreador. El recurso real que se va a muestrear se enlaza externamente al sombreador en slot # (para t#).

srcSampler es un registro de ejemplo (s). Esto es simplemente un marcador de posición para una colección de controles de filtrado, como controles de ajuste de puntos frente a lineales, mipmapping y de ajuste de direcciones.

El conjunto de información necesario para que el hardware realice el muestreo se divide en dos piezas ortogonales. En primer lugar, el registro de textura proporciona información de tipo de datos de origen, como, por ejemplo, información sobre si la textura contiene datos SRGB. También hace referencia a la memoria real que se está muestreando. En segundo lugar, el registro del sampler define el modo de filtrado que se va a aplicar.

Recursos de matriz

En Texture1D Arrays (Matrices Texture1D), el componente srcAddress g (POS-swizzle) selecciona el segmento de matriz del que se va a capturar. Esto siempre se trata como un valor flotante escalado, en lugar del espacio normalizado para las coordenadas de textura estándar, y se aplica una restricción al intervalo bufferArray disponible.

Para Las matrices Texture2D, el componente srcAddress b (POS-swizzle) selecciona el segmento de matriz del que se va a capturar; de lo contrario, usa la misma semántica descrita para las matrices Texture1D .

Desplazamiento de direcciones

El sufijo opcional [_aoffimmi(u,v,w)] (desplazamiento de dirección por entero inmediato) indica que las coordenadas de textura de la muestra se desplazarán por un conjunto de valores constantes de espacio de elementos de textura inmediatos proporcionados. Los valores literales son un conjunto de números de complemento de 4 bits 2, con un intervalo entero [-8,7]. Este modificador se define para todos los recursos, incluidas las matrices Texture1D/2D y Texture3D, pero no está definido para TextureCube.

El hardware puede aprovechar el conocimiento inmediato de que un recorrido sobre alguna superficie de elementos de textura sobre una ubicación común se realiza mediante un conjunto de instrucciones de ejemplo. Esto se puede transmitir mediante _aoffimmi(u,v,w).

Los desplazamientos se agregan a las coordenadas de textura, en el espacio de elementos de textura, en relación con cada miplevel al que se accede. Por lo tanto, aunque las coordenadas de textura se proporcionan como valores flotantes normalizados, el desplazamiento aplica un desplazamiento entero de espacio de textura.

Los desplazamientos de dirección no se aplican a lo largo del eje de matriz de matrices Texture1D/2D Arrays.

_aoffimmi componentes v,w se omiten para Texture1Ds.

_aoffimmi componente w se omite para Texture2Ds.

Los modos de ajuste de direcciones (wrap/mirror/clamp/border, etc.) desde el estado del muestreador (s#) se aplican después de aplicar cualquier desplazamiento de dirección a las coordenadas de textura.

Control de tipo de valor devuelto

El formato de datos devuelto por el ejemplo al registro de destino viene determinado por el formato de recurso (DXGI_FORMAT*) enlazado al parámetro srcResource (t#). Por ejemplo, si el t# especificado estaba enlazado con un recurso con formato DXGI_FORMAT_A8B8G8R8_UNORM_SRGB, la operación de muestreo convertirá los elementos de textura muestreados de gamma 2.0 a 1.0, aplicará el filtrado y el resultado se escribirá en el registro de destino como valores de punto flotante en el intervalo [0..1].

Los valores devueltos son 4 vectores (con valores predeterminados específicos del formato para los componentes que no están presentes en el formato). El swizzle en srcResource determina cómo eswizzle el resultado de 4 componentes que vuelve del ejemplo o filtro de textura, después del cual .mask en dest determina qué componentes dest se actualizan.

Cuando el ejemplo lee un valor flotante de 32 bits en un registro de 32 bits, con muestreo de punto (sin filtrado), puede o no vaciar valores desnormales, pero, de lo contrario, los números no se modifican. Si la incertidumbre con los valores desnormales de muestreo de punto es un problema para una aplicación, use la instrucción ld , lo que garantiza que los valores flotantes de 32 bits se leen sin modificar.

Cálculo de LOD

Para obtener más información sobre cómo se calculan los derivados en el proceso de determinación del LOD para el filtrado, consulte deriv_rtx y deriv_rty. La instrucción de ejemplo calcula implícitamente derivados en las coordenadas de textura con la misma definición que usan las instrucciones del sombreador de deriv . Esto no se aplica a las instrucciones de sample_l o sample_d . Para esas instrucciones, el LOD o los derivados se proporcionan directamente por la aplicación.

Para la instrucción de ejemplo , las implementaciones pueden elegir compartir el mismo cálculo de LOD en todos los 4 píxeles de una marca de 2x2 (pero no más grande) o realizar cálculos de LOD por píxel.

Detalles varios

Para Buffer & Texture1D, se omiten los componentes .gba de srcAddress (POS-swizzle). En el caso de las matrices Texture1D, se omiten los componentes .ba de srcAddress (POS-swizzle). Para Texture2Ds, se omite srcAddress .a component (POS-swizzle).

La captura de una ranura de entrada que no tiene nada enlazado a él devuelve 0 para todos los componentes.

Restricciones

  • srcResource debe ser un registro de t#. srcResource no puede ser constantBuffer, que no se puede enlazar a los registros de t#.
  • srcSampler debe ser un registro de s#.
  • No se permite el direccionamiento relativo en srcResource o srcSampler .
  • srcAddress debe ser un valor temporal (r#/x#), constantBuffer (cb#), input (v#) register o immediate value(s).
  • dest debe ser un registro temporal (r#/x#) o de salida (o*#).
  • no se permite _aoffimmi(u,v,w) para TextureCubes.

Esta instrucción se aplica a las siguientes fases del sombreador:

Sombreador de vértices Sombreador de geometría Sombreador de píxeles
x

Modelo de sombreador mínimo

Esta función se admite en los siguientes modelos de sombreador.

Modelo de sombreador Compatible
Modelo de sombreador 5
Modelo de sombreador 4.1
Modelo de sombreador 4
Modelo de sombreador 3 (DirectX HLSL) no
Modelo de sombreador 2 (DirectX HLSL) no
Modelo de sombreador 1 (DirectX HLSL) no

Ensamblado del modelo de sombreador 4 (DirectX HLSL)