d3d12: Don't add a second dual-source output for Heaven
authorJesse Natalie <jenatali@microsoft.com>
Wed, 9 Feb 2022 23:22:40 +0000 (15:22 -0800)
committerMarge Bot <emma+marge@anholt.net>
Thu, 10 Feb 2022 20:19:00 +0000 (20:19 +0000)
Reviewed-by: Sil Vilerino <sivileri@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14965>

src/gallium/drivers/d3d12/d3d12_compiler.cpp

index 2975adc..f52ce42 100644 (file)
@@ -285,12 +285,17 @@ missing_dual_src_outputs(struct d3d12_context *ctx)
                   continue;
 
                nir_variable *var = nir_intrinsic_get_var(intr, 0);
-               if (var->data.mode != nir_var_shader_out ||
-                   (var->data.location != FRAG_RESULT_COLOR &&
-                    var->data.location != FRAG_RESULT_DATA0))
+               if (var->data.mode != nir_var_shader_out)
                   continue;
 
-               indices_seen |= 1u << var->data.index;
+               unsigned index = var->data.index;
+               if (var->data.location > FRAG_RESULT_DATA0)
+                  index = var->data.location - FRAG_RESULT_DATA0;
+               else if (var->data.location != FRAG_RESULT_COLOR &&
+                        var->data.location != FRAG_RESULT_DATA0)
+                  continue;
+
+               indices_seen |= 1u << index;
                if ((indices_seen & 3) == 3)
                   return 0;
             }