From 44b45a38649e504ba46cd21a4a6ea2c6c15b4812 Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Tue, 22 Sep 2020 09:19:30 +0200 Subject: [PATCH] r600/sfn: Handle number of color outputs taking dual source blending into account Signed-off-by: Gert Wollny Part-of: --- 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);