mesa: check dst reg in _mesa_find_free_register()

If a register was only being used as a destination (as will happen when
generated condition-codes) we missed its use.  So we'd errantly return
a register index that was really in-use, not free.

Fixes bug 25579.
This commit is contained in:
Brian Paul
2009-12-11 09:16:25 -07:00
parent f7f1211b9b
commit 5076a4f53a

View File

@@ -813,9 +813,17 @@ _mesa_find_free_register(const struct gl_program *prog, GLuint regFile)
const struct prog_instruction *inst = prog->Instructions + i;
const GLuint n = _mesa_num_inst_src_regs(inst->Opcode);
for (k = 0; k < n; k++) {
if (inst->SrcReg[k].File == regFile) {
used[inst->SrcReg[k].Index] = GL_TRUE;
/* check dst reg first */
if (inst->DstReg.File == regFile) {
used[inst->DstReg.Index] = GL_TRUE;
}
else {
/* check src regs otherwise */
for (k = 0; k < n; k++) {
if (inst->SrcReg[k].File == regFile) {
used[inst->SrcReg[k].Index] = GL_TRUE;
break;
}
}
}
}