texldp - ps

Instrução de carregamento de textura projetada. Esta instrução divide a coordenada de textura de entrada pelo quarto elemento (.a ou .w) logo antes da amostragem.

Sintaxe

texldp dst, src0, src1

 

onde

Para obter o conjunto de restrições ao usar texldp, consulte texld.

Comentários

Texldp executa a projeção nas coordenadas lidas de src0 antes de executar a amostra. Cada coordenada de textura é dividida por src0.w e, em seguida, a textura é amostrada. Quando texldp é concluído, o conteúdo de src0 não é afetado (a menos que dst seja o mesmo registro). Uma alternativa ao uso de texldp é executar manualmente a divisão de projeção no sombreador. No entanto, a execução da divisão no código do sombreador geralmente é mais lenta do que quando executada pela instrução texldp, portanto, evite essa matemática adicional quando possível.

O número de coordenadas necessárias para que src0 execute a amostra de textura depende de como src1 foi declarado, além do componente .w. Os tipos de amostragem são declarados com dcl_samplerType (sm2, sm3 - ps asm). Se src1 for declarado como um sampler 2D, src0 deverá conter coordenadas .xyw; se src1 for declarado como um sampler de cubo ou um amostrador de volume, src0 deverá conter coordenadas .xyzw. A amostragem de uma textura 2D com coordenadas .xyzw é permitida (a coordenada .z é ignorada).

Se a textura de origem contiver menos de quatro componentes, os padrões serão colocados nos componentes ausentes. Os padrões dependem do formato de textura, conforme mostrado na tabela a seguir.

Formato de textura Valores padrão para componentes ausentes
D3DFMT_R5G6B5, D3DFMT_R8G8B8, D3DFMT_L8, D3DFMT_L16, D3DFMT_R3G3B2, D3DFMT_CxV8U8, D3DFMT_L6V5U5 A = 1,0
D3DFMT_V8U8, D3DFMT_V16U16, D3DFMT_G16R16, D3DFMT_G16R16F, D3DFMT_G32R32F B = A = 1,0
D3DFMT_A8 R = G = B = 0,0
D3DFMT_R16F, D3DFMT_R32F G = B = A = 1,0
Todos os formatos de profundidade/estêncil R = B = 0,0, A = 1,0

 

Esta instrução tem suporte nas seguintes versões:

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

 

ps_2_0 e ps_2_x

dst deve ser um Registro Temporário (r#) e somente a máscara .xyzw (máscara padrão) é permitida.

src0 deve ser um Registro de Coordenadas de Textura (t#) ou um Registro Temporário (r#), sem modificador ou swizzle.

src1 deve ser um Sampler (Direct3D 9 asm-ps) (s#), sem modificador ou swizzle.

Se o D3DD3DPSHADERCAPS2_0_NODEPENDENTREADLIMIT bit de limite não estiver definido (em D3DPSHADERCAPS2_0), uma instrução de textura específica (texld, texldp, texldb - ps, texldd ) poderá depender, no máximo, da terceira ordem. Uma instrução de textura dependente de primeira ordem é uma instrução de textura na qual:

  • src0 é um Registro Temporário (r#)
  • dst foi escrito anteriormente, agora sendo escrito novamente.

Uma instrução de textura dependente de segunda ordem é definida como uma instrução de textura que lê ou grava em um Registro Temporário (r#) cujo conteúdo, antes de executar a instrução de textura, depende (talvez indiretamente) do resultado de uma instrução de textura dependente de primeira ordem. Uma instrução de textura dependente (n)ordem deriva de uma instrução de textura (n - 1)ordem.

ps_3_0

Para ps_3_0, src1 deve ser um Sampler (Direct3D 9 asm-ps) (s#), sem modificador. O Swizzle é permitido em src1 e, quando aplicado, os resultados da pesquisa de textura são pré-girados antes de serem gravados em dst.

Instruções de sombreador de pixel