Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





¿Tiempo de Procesado en Fragmen Shader es limitado?

Iniciado por Licantropo23, 18 de Abril de 2007, 04:16:43 PM

« anterior - próximo »

Licantropo23

Hola, tengo un problema con el uso de fragment shaders. Lo que pasa es que quiero realizar una serie de calculos, estos calculos son algo costosos en cuanto a tiempo. El problema que tengo, es que al hacer la pasada por el shader, no se llegan a realizar todos los calculos. Supongo que esto depende de la pontencia de la tarjeta grafica, pero tampoco lo se seguro. ¿Alguien sabe si existe un tiempo maximo que puede ser usado en el shader y una vez consumido este tiempo aborta la ejecucion? He hecho la siguiente prueba:


#version 110

void main(){
       float tiempo=0;
       while(tiempo<1000){
           tiempo=tiempo+1;
       }
 gl_FragData[0].x=tiempo;
}


Tras realizar esta prueba he visto que tan solo me realiza 232 pasadas.
Otra prueba que he hecho es poner un bucle infinito y tampoco se queda colgado, asi que supongo que existe un tiempo de procesado para cada fragmento y cuando se supera se abortan los calculos. No se si habra alguna forma de configurarlo para que esto no sea asi. Si alguien sabe algo del tema le estaria muy agradecido de que me lo dijese. Bueno, muchas gracias a todos. Buscare por internet a ver si encuentro algo y si lo encuentro, escribo aqui lo que haya encontrado. Ta luego.

ethernet

Parece lógico que tenga un watchdog por si hay algún bucle infinito.

Licantropo23

Hola, he encontrado esto. Dice que si que existe un limite de ciclos que es de 64k.
http://www.gpgpu.org/forums/viewtopic.php?p=10977&sid=6be52cf26c0930928c7ebe6bf757def8

No hay ninguna manera de eliminarlo, asi que me tocará pensar como codificarlo, para realizar pasadas mas pequeñas.

Ta luego.

Prompt

Este límite ocurre solamente en Pixel Shader 2.0.

Los bucles que programas realmente el compilador los "desenrolla" y tiene un límite de 64k ciclos, si. En la versión 2.0 no existe la función JMP en el ensamblador de la GPU y hace ese "truco".

En la versión 3.0 el tamaño de los shaders se aumenta hasta medio mega por shader, una burrada y en la 4.0 aun más.

Hoy en dia es posible hacer "bucles infinitos" pero no esperes más de 0 fps :P

:) Espero que te sirva de ayuda.






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.