diff options
author | wwylele <wwylele@gmail.com> | 2017-04-19 22:48:10 +0200 |
---|---|---|
committer | wwylele <wwylele@gmail.com> | 2017-04-19 22:48:10 +0200 |
commit | b624a9520546410445c1320fac163759c9be6750 (patch) | |
tree | 232f7c3b141fbfde8e9972e94081a958ee3c0627 /src/video_core/renderer_opengl/gl_shader_gen.cpp | |
parent | Merge pull request #2659 from MerryMage/dsp_dsp-correction (diff) | |
download | yuzu-b624a9520546410445c1320fac163759c9be6750.tar yuzu-b624a9520546410445c1320fac163759c9be6750.tar.gz yuzu-b624a9520546410445c1320fac163759c9be6750.tar.bz2 yuzu-b624a9520546410445c1320fac163759c9be6750.tar.lz yuzu-b624a9520546410445c1320fac163759c9be6750.tar.xz yuzu-b624a9520546410445c1320fac163759c9be6750.tar.zst yuzu-b624a9520546410445c1320fac163759c9be6750.zip |
Diffstat (limited to 'src/video_core/renderer_opengl/gl_shader_gen.cpp')
-rw-r--r-- | src/video_core/renderer_opengl/gl_shader_gen.cpp | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index 7abdeba05..8be4171fc 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -230,6 +230,7 @@ static void AppendColorCombiner(std::string& out, TevStageConfig::Operation oper variable_name + "[2]"; break; case Operation::Dot3_RGB: + case Operation::Dot3_RGBA: out += "vec3(dot(" + variable_name + "[0] - vec3(0.5), " + variable_name + "[1] - vec3(0.5)) * 4.0)"; break; @@ -329,17 +330,25 @@ static void WriteTevStage(std::string& out, const PicaShaderConfig& config, unsi AppendColorCombiner(out, stage.color_op, "color_results_" + index_name); out += ";\n"; - out += "float alpha_results_" + index_name + "[3] = float[3]("; - AppendAlphaModifier(out, config, stage.alpha_modifier1, stage.alpha_source1, index_name); - out += ", "; - AppendAlphaModifier(out, config, stage.alpha_modifier2, stage.alpha_source2, index_name); - out += ", "; - AppendAlphaModifier(out, config, stage.alpha_modifier3, stage.alpha_source3, index_name); - out += ");\n"; - - out += "float alpha_output_" + index_name + " = "; - AppendAlphaCombiner(out, stage.alpha_op, "alpha_results_" + index_name); - out += ";\n"; + if (stage.color_op == TevStageConfig::Operation::Dot3_RGBA) { + // result of Dot3_RGBA operation is also placed to the alpha component + out += "float alpha_output_" + index_name + " = color_output_" + index_name + "[0];\n"; + } else { + out += "float alpha_results_" + index_name + "[3] = float[3]("; + AppendAlphaModifier(out, config, stage.alpha_modifier1, stage.alpha_source1, + index_name); + out += ", "; + AppendAlphaModifier(out, config, stage.alpha_modifier2, stage.alpha_source2, + index_name); + out += ", "; + AppendAlphaModifier(out, config, stage.alpha_modifier3, stage.alpha_source3, + index_name); + out += ");\n"; + + out += "float alpha_output_" + index_name + " = "; + AppendAlphaCombiner(out, stage.alpha_op, "alpha_results_" + index_name); + out += ";\n"; + } out += "last_tex_env_out = vec4(" "clamp(color_output_" + |