texldl - ps

Muestree una textura con un sampler determinado. El nivel de detalle de mapa mip determinado que se muestrea debe especificarse como el cuarto componente de la coordenada de textura.

Sintaxis

texldl dst, src0, src1

 

Donde:

  • dst es un 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 registro del sampler de origen (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 control definido por la enumeración D3DSAMPLERSTATETYPE (por ejemplo, D3DSAMP_MINFILTER).

Comentarios

Versiones del sombreador de píxeles 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texldl x x

 

texldl busca la textura establecida en la fase del sampler a la que hace referencia src1. El nivel de detalle se selecciona en src0.w. Este valor puede ser negativo en cuyo caso el nivel de detalle seleccionado es el cero (mapa más grande) con el MAGFILTER. Dado que src0.w es un valor de punto flotante, el valor fraccional se usa para interpolar (si MIPFILTER es LINEAL) entre dos niveles mip. Se respetan los estados de sampler MIPMAPLODBIAS y MAXMIPLEVEL. Para obtener más información sobre los estados del sampler, vea D3DSAMPLERSTATETYPE.

Si un programa de sombreador muestra de un sampler que no tiene un conjunto de texturas, se obtiene 0001 en el registro de destino.

A continuación se muestra un algoritmo aproximado que sigue el dispositivo de referencia:

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;
   }
}

Restricciones:

  • Las coordenadas de textura no se deben escalar por tamaño de textura.
  • dst debe ser un registro temporal (r#).
  • dst puede aceptar una máscara de escritura. Consulte Máscara de escritura del registro de destino.
  • Los valores predeterminados de los componentes que faltan son 0 o 1 y dependen del formato de textura.
  • src1 debe ser sampler (Direct3D 9 asm-ps) (s#). es posible que src1 no use un modificador negate (vea Destination Register Write Mask). src1 puede usar swizzle (consulte Source Register Swizzling), que se aplica después del muestreo, pero antes de que se respete la máscara de escritura (consulte Destination Register Write Mask). El sampler debe haberse declarado (mediante dcl_samplerType (sm2, sm3 - ps asm)) al principio del sombreador.
  • El número de coordenadas necesarias para realizar la muestra de textura depende de cómo se declaró el sampler. Si se declaró como un cubo, se requiere una coordenada de textura de tres componentes (.rgb). La validación exige que las coordenadas proporcionadas a tex_ldl Sean suficientes para la dimensión de textura declarada para el muestreador. Sin embargo, no se garantiza que la aplicación establezca realmente una textura (a través de la API) con dimensiones iguales a la dimensión declarada para el muestreador. En tal caso, el tiempo de ejecución intentará detectar errores de coincidencia (posiblemente solo en la depuración). El muestreo de una textura con menos dimensiones de las presentes en la coordenada de textura se permitirá y se supone que omite los componentes de coordenadas de textura adicionales. Por el contrario, el muestreo de una textura con más dimensiones de las que están presentes en la coordenada de textura es ilegal.
  • Si el src0 (coordenada de textura) es Registro temporal, los componentes necesarios para la búsqueda (descrito anteriormente) deben haberse escrito previamente.
  • El muestreo de texturas RGB sin signo dará como resultado valores flotantes entre 0,0 y 1,0.
  • El muestreo de texturas firmadas dará como resultado valores flotantes entre -1.0 y 1.0.
  • Al realizar el muestreo de texturas de punto flotante, Float16 significa que los datos van a oscilar dentro de MAX_FLOAT16. Float32 significa que se usará el intervalo máximo de la canalización. El muestreo fuera de cualquiera de los intervalos no está definido.
  • No hay ningún límite de lectura dependiente.

Instrucciones del sombreador de píxeles