From 15015f125f7a2e04b74616e0cf1bf943128f2d06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 30 Dec 2024 19:01:04 -0500 Subject: [PATCH] radeonsi: fix a front face regression (crash) Since the switch to ACO for gfx8-9, LLVM is no longer covered by the CI. Fixes: aee0c7274cc - amd: switch to FRONT_FACE_ALL_BITS(0) Reviewed-by: Qiang Yu Part-of: --- src/gallium/drivers/radeonsi/si_shader.c | 2 +- src/gallium/drivers/radeonsi/si_shader_llvm_ps.c | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 3d0a1fda696..bc6feae4d59 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -636,7 +636,7 @@ static void si_init_shader_args(struct si_shader *shader, struct si_shader_args SI_PARAM_POS_Z_FLOAT); si_add_arg_checked(&args->ac, AC_ARG_VGPR, 1, AC_ARG_FLOAT, &args->ac.frag_pos[3], SI_PARAM_POS_W_FLOAT); - si_add_arg_checked(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.front_face, + si_add_arg_checked(&args->ac, AC_ARG_VGPR, 1, AC_ARG_FLOAT, &args->ac.front_face, SI_PARAM_FRONT_FACE); si_add_arg_checked(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.ancillary, SI_PARAM_ANCILLARY); diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c b/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c index 2e972980803..7a585a45f3f 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c @@ -73,7 +73,7 @@ static void interp_fs_color(struct si_shader_context *ctx, unsigned input_index, if (semantic_index == 1 && colors_read_mask & 0xf) back_attr_offset += 1; - is_face_positive = LLVMBuildICmp(ctx->ac.builder, LLVMRealOLT, ctx->ac.f32_0, face, ""); + is_face_positive = LLVMBuildFCmp(ctx->ac.builder, LLVMRealOLT, ctx->ac.f32_0, face, ""); for (chan = 0; chan < 4; chan++) { LLVMValueRef front, back; @@ -600,10 +600,8 @@ void si_llvm_build_ps_prolog(struct si_shader_context *ctx, union si_shader_part LLVMValueRef prim_mask = ac_get_arg(&ctx->ac, args->ac.prim_mask); LLVMValueRef face = NULL; - if (key->ps_prolog.states.color_two_side) { + if (key->ps_prolog.states.color_two_side) face = ac_get_arg(&ctx->ac, args->ac.front_face); - face = ac_to_float(&ctx->ac, face); - } LLVMValueRef color[4]; interp_fs_color(ctx, key->ps_prolog.color_attr_index[i], i, key->ps_prolog.num_interp_inputs,