mesa: change _mesa_find_free_register() to find multiple free regs
authorBrian Paul <brianp@vmware.com>
Tue, 2 Feb 2010 01:00:12 +0000 (18:00 -0700)
committerBrian Paul <brianp@vmware.com>
Tue, 2 Feb 2010 01:00:12 +0000 (18:00 -0700)
commita2ddb3d20964e562e3dcb0e973f300362a9d5d69
treeb4da567481e8b97f4e042f33d16158829fcfc2dd
parent9a1bf52c184b6c0393543fe4bb03c790630b9e21
mesa: change _mesa_find_free_register() to find multiple free regs

Before, _mesa_find_free_register() would scan the given shader to
find a free/unused register of the given type.  But subsequent calls
would return the same register again.  This caused a failure in the
_mesa_remove_output_reads() function which sometimes needs several
free temps.

Now use a new function which build a vector of 'used' flags and another
function which searches that vector for an unused register starting at
a position that's incremented for each call.

Fixes fd.o bug 26317.  Note that a regression test for this has been
added to the glean/glsl1 test.

(cherry picked from commit e0d01c9d7f46ccd531f8dd1a04c5ac067200ef1e)
src/mesa/shader/program.c
src/mesa/shader/program.h
src/mesa/shader/programopt.c