Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Costo de texture stages.

Iniciado por Pogacha, 24 de Agosto de 2009, 01:15:51 AM

« anterior - próximo »

Pogacha

Tengo esta duda capas alguno sepa.

Tiene costo adicional un texture stage de modulacion de color en una placa no muy moderna?
Cuando digo no muy moderna me refiero agama baja de hace 6 años, o sea GeForce 2, Ati 7200, Savage, Intel 965.

En definitiva tomar una textura y modularla por un color tomado del vertex en vez de tomar la textura y mandarla a la etapa de blending nada mas.

Yo puedo hacer algunas pruebas en algunas de esas placas pero nunca seran suficientes ...
He de creer que no, que se procesan en un pipeline y tiene un costo de un clock en el primer pixel dibujado pero no puedo estar seguro de esto ... alguien sabe?

Si el costo llegara a ser de 2x realmente no me serviria para nada.

He de creer que con multitextura es lo mismo si alguno sabe que costo de 2 texturas (estilo lightmap) tiene el mismo costo que 1 textura y tenga una fuente para comprobarlo ...

Pogacha

¿Nadie tiene ninguna idea?

Me econtre con este documento (GDC01_OpenGL_Performance.pdf) sobre la generacion de GeForce3 que dice:

Use register combiners for most flexibility
Final combiner is always "free" (i.e. full speed)
General combiners can slow things down:
1 or 2 can be enabled for free
3 or 4 can run at one half maximum speed
5 or 6 can run at one third maximum speed
7 or 8 can run at one fourth maximum speed


Reformulo mi pregunta:

Es esto:

device->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_MODULATE );
device->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
device->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
device->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_MODULATE );
device->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
device->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );

igual de veloz que esto?:

device->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );
device->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
device->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_SELECTARG1 );
device->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );


senior wapo

Casi seguro que te sale gratis. Si usases otra textura en lugar del color del vértice si que te costaría por el acceso a memoria. Alguna placa rara y vieja (época de la virge, ATI previas a la rage, vodoo1 y tal) lo mismo se ve afectada pero dudo que fuese generalizado incluso para la época.


Pogacha

Gracias por tu respuesta.
De la multitextura estoy seguro, desde las primeras placas si tenian dos TMU lo hacen en un solo clock. Pero no me queda claro si con un diffuse es gratis o mas lento. Tambien habria otro bottelneck que es el blending y no se si esto influye o no.

O sea es esto:
Fetch texture  \
                              Modulate -> Blending -> Decal
Fetch color     /

Contra esto:
Fetch texture  -> Blending -> Decal


Aun que esto por su cuenta:
Fetch texture1 \
                              Modulate -> Decal
Fetch texture2 /

Se que lo hace en un solo clock para toda las placas con dos TMU que creo son la mayoria, y las que no en realidad no son de mi interes (rage 128 ).

Cada vez me convenzo mas pero aun asi no estoy del todo seguro ... cualquier otro aporte me encantaria escucharlo.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.