Mesa (master): r600/sfn: Handle number of color outputs taking dual source blending into account

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Sep 22 14:37:07 UTC 2020


Module: Mesa
Branch: master
Commit: 44b45a38649e504ba46cd21a4a6ea2c6c15b4812
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=44b45a38649e504ba46cd21a4a6ea2c6c15b4812

Author: Gert Wollny <gert.wollny at collabora.com>
Date:   Tue Sep 22 09:19:30 2020 +0200

r600/sfn: Handle number of color outputs taking dual source blending into account

Signed-off-by: Gert Wollny <gert.wollny at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6814>

---

 src/gallium/drivers/r600/sfn/sfn_shader_fragment.cpp | 4 ++--
 src/gallium/drivers/r600/sfn/sfn_shader_fragment.h   | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_fragment.cpp b/src/gallium/drivers/r600/sfn/sfn_shader_fragment.cpp
index 4f94e60aa02..154bfb9349a 100644
--- a/src/gallium/drivers/r600/sfn/sfn_shader_fragment.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_shader_fragment.cpp
@@ -284,14 +284,14 @@ void FragmentShaderFromNir::emit_shader_start()
 bool FragmentShaderFromNir::do_emit_store_deref(const nir_variable *out_var, nir_intrinsic_instr* instr)
 {
    if (out_var->data.location == FRAG_RESULT_COLOR)
-      return emit_export_pixel(out_var, instr, true);
+      return emit_export_pixel(out_var, instr, m_dual_source_blend ? 1 : m_max_color_exports);
 
    if ((out_var->data.location >= FRAG_RESULT_DATA0 &&
         out_var->data.location <= FRAG_RESULT_DATA7) ||
        out_var->data.location == FRAG_RESULT_DEPTH ||
        out_var->data.location == FRAG_RESULT_STENCIL ||
        out_var->data.location == FRAG_RESULT_SAMPLE_MASK)
-      return emit_export_pixel(out_var, instr, false);
+      return emit_export_pixel(out_var, instr, 1);
 
    sfn_log << SfnLog::err << "r600-NIR: Unimplemented store_deref for " <<
               out_var->data.location << "(" << out_var->data.driver_location << ")\n";
diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_fragment.h b/src/gallium/drivers/r600/sfn/sfn_shader_fragment.h
index 76b3538333f..3eac81f5653 100644
--- a/src/gallium/drivers/r600/sfn/sfn_shader_fragment.h
+++ b/src/gallium/drivers/r600/sfn/sfn_shader_fragment.h
@@ -54,7 +54,7 @@ private:
    bool do_process_outputs(nir_variable *output) override;
    bool do_emit_load_deref(const nir_variable *in_var, nir_intrinsic_instr* instr) override;
    bool do_emit_store_deref(const nir_variable *out_var, nir_intrinsic_instr* instr) override;
-   bool emit_export_pixel(const nir_variable *, nir_intrinsic_instr* instr, bool all_chanels);
+   bool emit_export_pixel(const nir_variable *, nir_intrinsic_instr* instr, int outputs);
    bool load_interpolated(GPRVector &dest, ShaderInput &io, const Interpolator& ip,
                           int num_components, int start_comp);
    bool load_interpolated_one_comp(GPRVector &dest, ShaderInput& io, const Interpolator& ip, EAluOp op);



More information about the mesa-commit mailing list