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
- dst é o 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 Sampler (Direct3D 9 asm-ps) (s#), em que # especifica qual número de amostra de textura deve ser amostrado. O sampler associou a ele uma textura e um estado de amostra definido por D3DSAMPLERSTATETYPE.
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.
Tópicos relacionados