tgsi/ureg: Improve immediate match & expand logic.

Do not pollute immediates with unsuccessfull attempts to expand them.
This commit is contained in:
Michal Krol 2009-12-23 19:08:45 +01:00
parent ff56a12051
commit 08a3efee10

View file

@ -495,9 +495,10 @@ static int
match_or_expand_immediate( const unsigned *v,
unsigned nr,
unsigned *v2,
unsigned *nr2,
unsigned *pnr2,
unsigned *swizzle )
{
unsigned nr2 = *pnr2;
unsigned i, j;
*swizzle = 0;
@ -505,7 +506,7 @@ match_or_expand_immediate( const unsigned *v,
for (i = 0; i < nr; i++) {
boolean found = FALSE;
for (j = 0; j < *nr2 && !found; j++) {
for (j = 0; j < nr2 && !found; j++) {
if (v[i] == v2[j]) {
*swizzle |= j << (i * 2);
found = TRUE;
@ -513,16 +514,19 @@ match_or_expand_immediate( const unsigned *v,
}
if (!found) {
if (*nr2 >= 4) {
if (nr2 >= 4) {
return FALSE;
}
v2[*nr2] = v[i];
*swizzle |= *nr2 << (i * 2);
(*nr2)++;
v2[nr2] = v[i];
*swizzle |= nr2 << (i * 2);
nr2++;
}
}
/* Actually expand immediate only when fully succeeded.
*/
*pnr2 = nr2;
return TRUE;
}