texldl - ps

Exemplo de uma textura com um sampler específico. O nível de detalhes de mipmap específico que está sendo amostrado deve ser especificado como o quarto componente da coordenada de textura.

Sintaxe

texldl dst, src0, src1

 

Em que:

  • dst é um registro de destino.
  • src0 é um registro de origem que fornece as coordenadas de textura para o exemplo de textura. Consulte Registro de coordenadas de textura.
  • src1 identifica o registro de amostra de origem (s#), em que # especifica qual número do sampler de textura deve ser amostrado. O sampler associou a ele uma textura e um estado de controle definidos pela enumeração D3DSAMPLERSTATETYPE (por exemplo, D3DSAMP_MINFILTER).

Comentários

Versões do sombreador de pixel 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texldl x x

 

Texldl pesquisa o conjunto de texturas no estágio de amostra referenciado por src1. O nível de detalhes é selecionado em src0.w. Esse valor pode ser negativo nesse caso, o nível de detalhes selecionado é o zero (mapa maior) com o MAGFILTER. Como src0.w é um valor de ponto flutuante, o valor fracionário é usado para interpolar (se MIPFILTER for LINEAR) entre dois níveis de mip. O sampler afirma que MIPMAPLODBIAS e MAXMIPLEVEL estão honrados. Para obter mais informações sobre os estados do sampler, consulte D3DSAMPLERSTATETYPE.

Se um programa de sombreador for amostrado de um sampler que não tenha um conjunto de texturas, 0001 será obtido no registro de destino.

Veja a seguir um algoritmo aproximado que o dispositivo de referência segue:

LOD = src0.w + LODBIAS;
if (LOD <= 0 )
{
   LOD = 0;
   Filter = MagFilter;
   tex = Lookup( MAX(MAXMIPLEVEL, LOD), Filter );
}
else
{
   Filter = MinFilter;
   LOD = MAX( MAXMIPLEVEL, LOD );
   tex = Lookup( Floor(LOD), Filter );
   if( MipFilter == LINEAR )
   {
      tex1 = Lookup( Ceil(LOD), Filter );                        
      tex = (1 - frac(src0.w))*tex + frac(src0.w)*tex1;
   }
}

Restrições:

  • As coordenadas de textura não devem ser dimensionadas pelo tamanho da textura.
  • dst deve ser um Registro Temporário (r#).
  • dst pode aceitar uma máscara de gravação. Consulte Máscara de Gravação de Registro de Destino.
  • Os padrões para componentes ausentes são 0 ou 1 e dependem do formato de textura.
  • src1 deve ser um Sampler (Direct3D 9 asm-ps) (s#). src1 pode não usar um modificador de negação (consulte Máscara de Gravação de Registro de Destino). src1 pode usar swizzle (consulte Source Register Swizzling), que é aplicado após a amostragem, mas antes que a máscara de gravação (consulte Máscara de Gravação de Registro de Destino) seja respeitada. O sampler deve ter sido declarado (usando dcl_samplerType (sm2, sm3 - ps asm)) no início do sombreador.
  • O número de coordenadas necessárias para executar o exemplo de textura depende de como o sampler foi declarado. Se ele tiver sido declarado como um cubo, uma coordenada de textura de três componentes será necessária (.rgb). A validação impõe que as coordenadas fornecidas a tex_ldl são suficientes para a dimensão de textura declarada para o sampler. No entanto, não é garantido que o aplicativo realmente define uma textura (por meio da API) com dimensões iguais à dimensão declarada para o sampler. Nesse caso, o runtime tentará detectar incompatibilidades (possivelmente apenas em depuração). A amostragem de uma textura com menos dimensões do que as presentes na coordenada de textura será permitida e presumida para ignorar os componentes de coordenada de textura extra. Por outro lado, a amostragem de uma textura com mais dimensões do que as presentes na coordenada de textura é ilegal.
  • Se o src0 (coordenada de textura) for Registro Temporário, os componentes necessários para a pesquisa (descrito acima) devem ter sido gravados anteriormente.
  • A amostragem de texturas RGB não assinadas resultará em valores float entre 0,0 e 1,0.
  • A amostragem de texturas assinadas resultará em valores float entre -1,0 e 1,0.
  • Ao amostrar texturas de ponto flutuante, Float16 significa que os dados serão intervalos dentro de MAX_FLOAT16. Float32 significa que o intervalo máximo do pipeline será usado. A amostragem fora de qualquer intervalo é indefinida.
  • Não há limite de leitura dependente.

Instruções de sombreador de pixel