Module: Mesa Branch: staging/21.3 Commit: cdf03573da0bd9fa66b7853ef9564c4eec5ff4bc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cdf03573da0bd9fa66b7853ef9564c4eec5ff4bc
Author: Pavel Ondračka <[email protected]> Date: Mon Jan 3 15:47:43 2022 +0100 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 <[email protected]> Reviewed-by: Filip Gawin <[email protected]> Reviewed-by: Marek Olšák <[email protected]> Reviewed-by: Emma Anholt <[email protected]> Cc: mesa-stable Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14378> (cherry picked from commit 96ad4f64375905c710f881e6972784f597799457) --- .pick_status.json | 2 +- .../drivers/r300/compiler/radeon_program_alu.c | 21 --------------------- 2 files changed, 1 insertion(+), 22 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 5244e81c631..3a75a2dee39 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -643,7 +643,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 }, diff --git a/src/gallium/drivers/r300/compiler/radeon_program_alu.c b/src/gallium/drivers/r300/compiler/radeon_program_alu.c index 9d96307f117..a2416c5503d 100644 --- a/src/gallium/drivers/r300/compiler/radeon_program_alu.c +++ b/src/gallium/drivers/r300/compiler/radeon_program_alu.c @@ -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); - } } } }
