exemplo (sm4 – asm)
Exemplos de dados do Elemento/textura especificados usando o endereço especificado e o modo de filtragem identificado pelo sampler fornecido.
sample[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], srcSampler |
---|
Item | Descrição |
---|---|
Dest |
[in] O endereço do resultado da operação. |
srcAddress |
[in] Um conjunto de coordenadas de textura. Para obter mais informações, consulte a seção Comentários. |
srcResource |
[in] Um registro de textura. Para obter mais informações, consulte a seção Comentários. |
srcSampler |
[in] Um registro de amostra. Para obter mais informações, consulte a seção Comentários. |
Comentários
Os dados de origem podem vir de qualquer Tipo de Recurso, além de Buffers.
srcAddress fornece o conjunto de coordenadas de textura necessárias para executar o exemplo, como valores de ponto flutuante referenciando o espaço normalizado na textura. Os modos de disposição de endereço (wrap/espelho/clamp/border etc.) são aplicados para coordenadas de textura fora do intervalo [0...1], extraídos do estado do sampler (s#) e aplicados após qualquer deslocamento de endereço ser aplicado às coordenadas de textura.
srcResource é um registro de textura (t#). Esse é simplesmente um espaço reservado para uma textura, incluindo o tipo de dados de retorno do recurso que está sendo amostrado. Todas essas informações são declaradas no preâmbulo Sombreador. O recurso real a ser amostrado está associado ao Sombreador externamente no slot # (para t#).
srcSampler é um registro de amostra (s). Esse é simplesmente um espaço reservado para uma coleção de controles de filtragem, como controles de disposição de ponto versus linear, mipmapping e encapsulamento de endereço.
O conjunto de informações necessárias para o hardware executar a amostragem é dividido em duas partes ortogonais. Primeiro, o registro de textura fornece informações de tipo de dados de origem, incluindo, por exemplo, informações sobre se a textura contém dados SRGB. Ele também faz referência à memória real que está sendo amostrada. Em segundo lugar, o registro de amostra define o modo de filtragem a ser aplicado.
Recursos de matriz
Para Matrizes Texture1D, o componente srcAddress g (POS-swizzle) seleciona de qual Fatia de Matriz buscar. Isso sempre é tratado como um valor float dimensionado, em vez do espaço normalizado para coordenadas de textura padrão, e uma volta para mais próxima é aplicada no valor, seguida por um grampo para o intervalo bufferArray disponível.
Para Matrizes Texture2D, o componente srcAddress b (POS-swizzle) seleciona de qual Fatia de Matriz buscar, caso contrário, usando a mesma semântica descrita para Matrizes Texture1D .
Deslocamento de endereço
O sufixo opcional [_aoffimmi(u,v,w)] (deslocamento de endereço por inteiro imediato) indica que as coordenadas de textura da amostra devem ser deslocadas por um conjunto de valores constantes inteiros de espaço texel imediato fornecidos. Os valores literais são um conjunto de números complementares de 4 bits 2, com intervalo inteiro [-8,7]. Esse modificador é definido para todos os recursos, incluindo Texture1D/2D Arrays e Texture3D, mas é indefinido para TextureCube.
O hardware pode aproveitar o conhecimento imediato de que uma passagem sobre algum volume de texels sobre um local comum está sendo executada por um conjunto de instruções de exemplo. Isso pode ser transmitido usando _aoffimmi(u,v,w).
Os deslocamentos são adicionados às coordenadas de textura, no espaço texel, em relação a cada miplevel que está sendo acessado. Portanto, mesmo que as coordenadas de textura sejam fornecidas como valores float normalizados, o deslocamento aplica um deslocamento inteiro de espaço texel.
Os deslocamentos de endereço não são aplicados ao longo do eixo da matriz de Matrizes Texture1D/2D.
_aoffimmi componentes v,w são ignorados para Texture1Ds.
_aoffimmi componente w é ignorado para Texture2Ds.
Os modos de disposição de endereço (wrap/espelho/clamp/border etc.) do estado do sampler (s#) são aplicados depois que qualquer deslocamento de endereço é aplicado às coordenadas de textura.
Controle de tipo de retorno
O formato de dados retornado pelo exemplo para o registro de destino é determinado pelo formato de recurso (DXGI_FORMAT*) associado ao parâmetro srcResource (t#). Por exemplo, se o t# especificado tiver sido associado a um recurso com formato DXGI_FORMAT_A8B8G8R8_UNORM_SRGB, a operação de amostragem converterá texels amostrados do gama 2.0 para 1.0, aplicará a filtragem e o resultado será gravado no registro de destino como valores de ponto flutuante no intervalo [0..1].
Os valores retornados são 4 vetores (com padrões específicos de formato para componentes não presentes no formato). O swizzle em srcResource determina como girar o resultado de 4 componentes que volta do exemplo/filtro de textura, após o qual .mask no dest determina quais componentes no dest são atualizados.
Quando o exemplo lê um valor float de 32 bits em um registro de 32 bits, com amostragem de ponto (sem filtragem), ele pode ou não liberar valores desnormal, mas, caso contrário, os números não são modificados. Se a incerteza com valores desnormal de amostragem de ponto for um problema para um aplicativo, use a instrução ld , que garante que os valores float de 32 bits sejam lidos sem modificação.
Cálculo lod
Para obter detalhes sobre como os derivados são calculados no processo de determinação do LOD para filtragem, consulte deriv_rtx e deriv_rty. A instrução de exemplo computa implicitamente derivativos nas coordenadas de textura usando a mesma definição que as instruções do sombreador de derivação usam. Isso não se aplica a instruções de sample_l ou sample_d . Para essas instruções, LOD ou derivados são fornecidos diretamente pelo aplicativo.
Para a instrução de exemplo , as implementações podem optar por compartilhar o mesmo cálculo lod entre todos os 4 pixels em um selo 2x2 (mas sem área maior) ou executar cálculos LOD por pixel.
Detalhes diversos
Para o Buffer & Texture1D, os componentes srcAddress .gba (POS-swizzle) são ignorados. Para Matrizes Texture1D, os componentes srcAddress .ba (POS-swizzle) são ignorados. Para Texture2Ds, o componente srcAddress .a (POS-swizzle) é ignorado.
A busca de um slot de entrada que não tem nada associado a ele retorna 0 para todos os componentes.
Restrições
- srcResource deve ser um registro t#. srcResource não pode ser um ConstantBuffer, que não pode ser associado a registros t#.
- srcSampler deve ser um registro s#.
- O endereçamento relativo em srcResource ou srcSampler não é permitido.
- srcAddress deve ser um temp (r#/x#), constantBuffer (cb#), registro de entrada (v#) ou valores imediatos.
- dest deve ser um registro temporário (r#/x#) ou de saída (o*#).
- _aoffimmi(u,v,w) não é permitido para TextureCubes.
Esta instrução se aplica aos seguintes estágios de sombreador:
Sombreador de vértice | Sombreador de geometria | Sombreador de pixel |
---|---|---|
x |
Modelo de sombreador mínimo
Essa função tem suporte nos seguintes modelos de sombreador.
Modelo de Sombreador | Com suporte |
---|---|
Modelo de sombreador 5 | sim |
Modelo de sombreador 4.1 | sim |
Modelo de sombreador 4 | sim |
Modelo de Sombreador 3 (DirectX HLSL) | não |
Modelo de Sombreador 2 (DirectX HLSL) | não |
Modelo de Sombreador 1 (DirectX HLSL) | não |