radv,aco: fix enable_mrt_output_nan_fixup for RAGE2 again
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 11 Jan 2023 09:28:24 +0000 (10:28 +0100)
committerMarge Bot <emma+marge@anholt.net>
Wed, 11 Jan 2023 15:55:32 +0000 (15:55 +0000)
Driver workarounds for game bugs can be easily broken. This one
shouldn't be applied to meta shaders and this restores previous logic.

Fixes: da32cbb5c69 ("aco: fix missing uses of MRT output flags")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20637>

src/amd/compiler/aco_instruction_selection.cpp
src/amd/compiler/aco_shader_info.h
src/amd/vulkan/radv_aco_shader_info.h
src/amd/vulkan/radv_nir_to_llvm.c
src/amd/vulkan/radv_shader.c

index fa3e329..773846d 100644 (file)
@@ -11516,7 +11516,7 @@ create_fs_exports(isel_context* ctx)
          out.is_int8 = (ctx->options->key.ps.epilog.color_is_int8 >> idx) & 1;
          out.is_int10 = (ctx->options->key.ps.epilog.color_is_int10 >> idx) & 1;
          out.enable_mrt_output_nan_fixup =
-            (ctx->options->key.ps.epilog.enable_mrt_output_nan_fixup >> idx) & 1;
+            (ctx->options->enable_mrt_output_nan_fixup >> idx) & 1;
 
          for (unsigned c = 0; c < 4; ++c) {
             if (out.write_mask & (1 << c)) {
index cec8fd7..e292262 100644 (file)
@@ -171,6 +171,7 @@ struct aco_compiler_options {
    bool record_ir;
    bool record_stats;
    bool has_ls_vgpr_init_bug;
+   uint8_t enable_mrt_output_nan_fixup;
    bool wgp_mode;
    enum radeon_family family;
    enum amd_gfx_level gfx_level;
index e090595..8394b5e 100644 (file)
@@ -149,6 +149,7 @@ radv_aco_convert_opts(struct aco_compiler_options *aco_info,
    ASSIGN_FIELD(record_ir);
    ASSIGN_FIELD(record_stats);
    ASSIGN_FIELD(has_ls_vgpr_init_bug);
+   ASSIGN_FIELD(enable_mrt_output_nan_fixup);
    ASSIGN_FIELD(wgp_mode);
    ASSIGN_FIELD(family);
    ASSIGN_FIELD(gfx_level);
index 543bc13..2895da4 100644 (file)
@@ -567,8 +567,7 @@ si_llvm_init_export_args(struct radv_shader_context *ctx, LLVMValueRef *values,
          (ctx->options->key.ps.epilog.spi_shader_col_format >> (4 * index)) & 0xf;
       bool is_int8 = (ctx->options->key.ps.epilog.color_is_int8 >> index) & 1;
       bool is_int10 = (ctx->options->key.ps.epilog.color_is_int10 >> index) & 1;
-      bool enable_mrt_output_nan_fixup =
-         (ctx->options->key.ps.epilog.enable_mrt_output_nan_fixup >> index) & 1;
+      bool enable_mrt_output_nan_fixup = (ctx->options->enable_mrt_output_nan_fixup >> index) & 1;
 
       LLVMValueRef (*packf)(struct ac_llvm_context * ctx, LLVMValueRef args[2]) = NULL;
       LLVMValueRef (*packi)(struct ac_llvm_context * ctx, LLVMValueRef args[2], unsigned bits,
index a392ae8..661b428 100644 (file)
@@ -2375,8 +2375,9 @@ radv_fill_nir_compiler_options(struct radv_nir_compiler_options *options,
    options->check_ir = device->instance->debug_flags & RADV_DEBUG_CHECKIR;
    options->address32_hi = device->physical_device->rad_info.address32_hi;
    options->has_ls_vgpr_init_bug = device->physical_device->rad_info.has_ls_vgpr_init_bug;
-   options->enable_mrt_output_nan_fixup =
-      !is_meta_shader && options->key.ps.epilog.enable_mrt_output_nan_fixup;
+
+   if (!is_meta_shader)
+      options->enable_mrt_output_nan_fixup = options->key.ps.epilog.enable_mrt_output_nan_fixup;
 }
 
 static struct radv_shader *