Nicolai Haehnle wrote: > Hi, > > On Mon, Apr 5, 2010 at 1:58 AM, Tom Stellard <tstel...@gmail.com> wrote: >> 1. Improve branch emulation in the r300 compiler: >> The goal of this task will be to improve upon the work done by >> Nicolai Häehnle in this branch: >> http://cgit.freedesktop.org/~nh/mesa/log/?h=r300g-glsl and fully support >> branch emulation in the r300 compiler. This first part of this task >> will involve testing the current branch emulation code to determine what >> works and what does not. After this has been completed work can begin >> on any part of the branch emulation that does not work correctly. > > You misspelled my name :P > >> 2. Unroll loops in the r300 compiler: >> The goal of this task will be to unroll loops so that they can be executed >> by hardware that does not support them. The loop unrolling in this task >> is not meant as a code optimization. It is only being done to eliminate >> branch instructions. Loops where the number of iterations are known >> at compile time will be unrolled and may have additional optimizations >> applied. Loops that have an unknown number of iterations, will have to >> be studied to see if there is a way to replace the loop with a set of >> instructions that produces the same output as the loop. For example, >> one solution might be to replace an ADD(src0, src0) instruction that >> is supposed to execute n times with a MUL(src0, n). It is possible that >> not all loops will be able to be unrolled successfully. > > It is certain that not all loops will be able to be unrolled > successfully, if only due to limits on the number of instruction in a > shader ;) > > For loops with number of iterations determined at runtime, you should > check (ask around) for real-life shaders where this is the case. The > example you mention sounds unrealistic to me, but I could imagine that > there are shaders with an *upper-bound* on the number of iterations > known at compile time. Then loops can be unrolled to that upper-bound, > and later iterations could be masked off somehow based on the actual > desired number of iterations at runtime.
See progs/glsl/CH18-mandel.frag for an example: for (iter = 0.0; iter < 12.0 && r2 < 4.0; ++iter) I believe the Phoronix Lightsmark demo also uses some loops in its shaders. It's not feasible to unroll all loops but some common cases are doable. -Brian ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev