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:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user