mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-02 11:00:27 +01:00
r300/compiler: Don't allow presubtract sources to be remapped twice
https://bugs.freedesktop.org/show_bug.cgi?id=31193
NOTE: This is a candidate for the 7.9 branch.
(cherry picked from commit 4265c2f819)
This commit is contained in:
parent
dc4956922d
commit
e8bc8d6a5c
1 changed files with 8 additions and 1 deletions
|
|
@ -250,6 +250,7 @@ static void remap_normal_instruction(struct rc_instruction * fullinst,
|
|||
{
|
||||
struct rc_sub_instruction * inst = &fullinst->U.I;
|
||||
const struct rc_opcode_info * opcode = rc_get_opcode_info(inst->Opcode);
|
||||
unsigned int remapped_presub = 0;
|
||||
|
||||
if (opcode->HasDstReg) {
|
||||
rc_register_file file = inst->DstReg.File;
|
||||
|
|
@ -269,6 +270,12 @@ static void remap_normal_instruction(struct rc_instruction * fullinst,
|
|||
unsigned int i;
|
||||
unsigned int srcp_srcs = rc_presubtract_src_reg_count(
|
||||
inst->PreSub.Opcode);
|
||||
/* Make sure we only remap presubtract sources once in
|
||||
* case more than one source register reads the
|
||||
* presubtract result. */
|
||||
if (remapped_presub)
|
||||
continue;
|
||||
|
||||
for(i = 0; i < srcp_srcs; i++) {
|
||||
file = inst->PreSub.SrcReg[i].File;
|
||||
index = inst->PreSub.SrcReg[i].Index;
|
||||
|
|
@ -276,7 +283,7 @@ static void remap_normal_instruction(struct rc_instruction * fullinst,
|
|||
inst->PreSub.SrcReg[i].File = file;
|
||||
inst->PreSub.SrcReg[i].Index = index;
|
||||
}
|
||||
|
||||
remapped_presub = 1;
|
||||
}
|
||||
else {
|
||||
cb(userdata, fullinst, &file, &index);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue