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:
Pavel Ondračka 2022-01-03 15:47:43 +01:00 committed by Eric Engestrom
parent 6059636619
commit 90e3310086
2 changed files with 1 additions and 22 deletions

View file

@ -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
},

View file

@ -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);
}
}
}
}