texldp - ps

Instrucción de carga de textura proyectada. Esta instrucción divide la coordenada de textura de entrada por el cuarto elemento (.a o .w) justo antes del muestreo.

Sintaxis

texldp dst, src0, src1

 

where

  • dst es el registro de destino.
  • src0 es un registro de origen que proporciona las coordenadas de textura para el ejemplo de textura. Consulte Registro de coordenadas de textura.
  • src1 identifica el sampler (Direct3D 9 asm-ps) (s#), donde # especifica qué número de muestra de textura se va a muestrear. El sampler se ha asociado a ella una textura y un estado de muestreo definido por D3DSAMPLERSTATETYPE.

Para conocer el conjunto de restricciones al usar texldp, consulte texld.

Comentarios

texldp realiza la proyección en las coordenadas leídas de src0 antes de realizar la muestra. Cada coordenada de textura se divide por src0.w y, a continuación, se muestrea la textura. Cuando se completa texldp, el contenido de src0 no se ve afectado (a menos que dst sea el mismo registro). Una alternativa al uso de texldp es realizar manualmente la división de proyección en el sombreador. Sin embargo, realizar la división en el código del sombreador suele ser más lento que cuando lo realiza la instrucción texldp, por lo que evite este tipo de cálculos matemáticos adicionales cuando sea posible.

El número de coordenadas necesarias para que src0 realice la muestra de textura depende de cómo se declaró src1, además del componente .w. Los tipos de sampler se declaran con dcl_samplerType (sm2, sm3 - ps asm). Si src1 se declara como un sampler 2D, src0 debe contener coordenadas .xyw; Si src1 se declara como un sampler de cubo o un sampler de volumen, src0 debe contener coordenadas .xyzw. Se permite el muestreo de una textura 2D con coordenadas .xyzw (se omite la coordenada .z).

Si la textura de origen contiene menos de cuatro componentes, los valores predeterminados se colocan en los componentes que faltan. Los valores predeterminados dependen del formato de textura, como se muestra en la tabla siguiente.

Formato de textura Valores predeterminados para los componentes que faltan
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 los formatos de profundidad/galería de símbolos R = B = 0,0, A = 1,0

 

Esta instrucción se admite en las siguientes versiones:

Versiones del sombreador de píxeles 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 y ps_2_x

dst debe ser un registro temporal (r#) y solo se permite la máscara .xyzw (máscara predeterminada).

src0 debe ser un registro de coordenadas de textura (t#) o un registro temporal (r#), sin modificador ni swizzle.

src1 debe ser un Sampler (Direct3D 9 asm-ps) (s#), sin modificador ni swizzle.

Si el bit de límite de D3DD3DPSHADERCAPS2_0_NODEPENDENTREADLIMIT no está establecido (en D3DPSHADERCAPS2_0), una instrucción de textura determinada (texld, texldp, texldb - ps, texldd ) puede depender, como máximo, de un tercer orden. Una instrucción de textura dependiente del primer orden es una instrucción de textura en la que:

  • src0 es un registro temporal (r#)
  • dst se escribió anteriormente, que ahora se está escribiendo de nuevo.

Una instrucción de textura dependiente del segundo orden se define como una instrucción de textura que lee o escribe en un registro temporal (r#) cuyo contenido, antes de ejecutar la instrucción de textura, depende (quizá indirectamente) del resultado de una instrucción de textura dependiente del primer orden. Una instrucción de textura dependiente del orden (n)th deriva de una instrucción de textura de orden n - 1.

ps_3_0

Para ps_3_0, src1 debe ser sampler (Direct3D 9 asm-ps) (s#), sin modificador. Swizzle se permite en src1 y, cuando se aplica, los resultados de la búsqueda de texturas están pre-swizzled antes de escribir en dst.

Instrucciones del sombreador de píxeles