mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 08:58:02 +02:00
r300: Remove broken optimization in rc_transform_KILL
The logic was reversed so this was not only not working but it was
also removing random instructions around. The special IF-KILP-ENDIF
case this optimization was targeting is already transformed to
KILL_IF in the TGSI, so just remove this altogether.
This fixes piglit glsl-fs-discard-04
v2: Update the comment as well
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/343
Signed-off-by: Pavel Ondračka <pavel.ondracka@gmail.com>
Reviewed-by: Filip Gawin <filip.gawin@zoho.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14378>
(cherry picked from commit 96ad4f6437)
This commit is contained in:
parent
6059636619
commit
90e3310086
2 changed files with 1 additions and 22 deletions
|
|
@ -2533,7 +2533,7 @@
|
|||
"description": "r300: Remove broken optimization in rc_transform_KILL",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1215,12 +1215,6 @@ int radeonTransformDeriv(struct radeon_compiler* c,
|
|||
*
|
||||
* === OR ===
|
||||
*
|
||||
* IF Temp[0].x -\
|
||||
* KILL - > KIL -abs(Temp[0].x)
|
||||
* ENDIF -/
|
||||
*
|
||||
* === OR ===
|
||||
*
|
||||
* IF Temp[0].x -> IF Temp[0].x
|
||||
* ... -> ...
|
||||
* ELSE -> ELSE
|
||||
|
|
@ -1265,21 +1259,6 @@ void rc_transform_KILL(struct radeon_compiler * c, void *user)
|
|||
* block, because -0.0 is considered negative. */
|
||||
inst->U.I.SrcReg[0] =
|
||||
negate(absolute(if_inst->U.I.SrcReg[0]));
|
||||
|
||||
if (inst->Prev->U.I.Opcode != RC_OPCODE_IF
|
||||
&& inst->Next->U.I.Opcode != RC_OPCODE_ENDIF) {
|
||||
|
||||
/* Optimize the special case:
|
||||
* IF Temp[0].x
|
||||
* KILP
|
||||
* ENDIF
|
||||
*/
|
||||
|
||||
/* Remove IF */
|
||||
rc_remove_instruction(inst->Prev);
|
||||
/* Remove ENDIF */
|
||||
rc_remove_instruction(inst->Next);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue