mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Merge pull request #3638 from ds84182/we-need-more-rounds
Round TEV outputs and the final fragment output in GLSL
This commit is contained in:
		
						commit
						bfd1d963ba
					
				
					 1 changed files with 24 additions and 6 deletions
				
			
		|  | @ -523,9 +523,10 @@ static void WriteTevStage(std::string& out, const PicaShaderConfig& config, unsi | ||||||
|         AppendColorModifier(out, config, stage.color_modifier3, stage.color_source3, index_name); |         AppendColorModifier(out, config, stage.color_modifier3, stage.color_source3, index_name); | ||||||
|         out += ");\n"; |         out += ");\n"; | ||||||
| 
 | 
 | ||||||
|         out += "vec3 color_output_" + index_name + " = "; |         // Round the output of each TEV stage to maintain the PICA's 8 bits of precision
 | ||||||
|  |         out += "vec3 color_output_" + index_name + " = byteround("; | ||||||
|         AppendColorCombiner(out, stage.color_op, "color_results_" + index_name); |         AppendColorCombiner(out, stage.color_op, "color_results_" + index_name); | ||||||
|         out += ";\n"; |         out += ");\n"; | ||||||
| 
 | 
 | ||||||
|         if (stage.color_op == TevStageConfig::Operation::Dot3_RGBA) { |         if (stage.color_op == TevStageConfig::Operation::Dot3_RGBA) { | ||||||
|             // result of Dot3_RGBA operation is also placed to the alpha component
 |             // result of Dot3_RGBA operation is also placed to the alpha component
 | ||||||
|  | @ -542,9 +543,9 @@ static void WriteTevStage(std::string& out, const PicaShaderConfig& config, unsi | ||||||
|                                 index_name); |                                 index_name); | ||||||
|             out += ");\n"; |             out += ");\n"; | ||||||
| 
 | 
 | ||||||
|             out += "float alpha_output_" + index_name + " = "; |             out += "float alpha_output_" + index_name + " = byteround("; | ||||||
|             AppendAlphaCombiner(out, stage.alpha_op, "alpha_results_" + index_name); |             AppendAlphaCombiner(out, stage.alpha_op, "alpha_results_" + index_name); | ||||||
|             out += ";\n"; |             out += ");\n"; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         out += "last_tex_env_out = vec4(" |         out += "last_tex_env_out = vec4(" | ||||||
|  | @ -1137,6 +1138,22 @@ float LookupLightingLUTSigned(int lut_index, float pos) { | ||||||
|     return LookupLightingLUT(lut_index, index, delta); |     return LookupLightingLUT(lut_index, index, delta); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | float byteround(float x) { | ||||||
|  |     return round(x * 255.0) * (1.0 / 255.0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | vec2 byteround(vec2 x) { | ||||||
|  |     return round(x * 255.0) * (1.0 / 255.0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | vec3 byteround(vec3 x) { | ||||||
|  |     return round(x * 255.0) * (1.0 / 255.0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | vec4 byteround(vec4 x) { | ||||||
|  |     return round(x * 255.0) * (1.0 / 255.0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| )"; | )"; | ||||||
| 
 | 
 | ||||||
|     if (config.state.proctex.enable) |     if (config.state.proctex.enable) | ||||||
|  | @ -1146,7 +1163,7 @@ float LookupLightingLUTSigned(int lut_index, float pos) { | ||||||
|     // This maintains the PICA's 8 bits of precision
 |     // This maintains the PICA's 8 bits of precision
 | ||||||
|     out += R"( |     out += R"( | ||||||
| void main() { | void main() { | ||||||
| vec4 rounded_primary_color = round(primary_color * 255.0) / 255.0; | vec4 rounded_primary_color = byteround(primary_color); | ||||||
| vec4 primary_fragment_color = vec4(0.0); | vec4 primary_fragment_color = vec4(0.0); | ||||||
| vec4 secondary_fragment_color = vec4(0.0); | vec4 secondary_fragment_color = vec4(0.0); | ||||||
| )"; | )"; | ||||||
|  | @ -1221,7 +1238,8 @@ vec4 secondary_fragment_color = vec4(0.0); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     out += "gl_FragDepth = depth;\n"; |     out += "gl_FragDepth = depth;\n"; | ||||||
|     out += "color = last_tex_env_out;\n"; |     // Round the final fragment color to maintain the PICA's 8 bits of precision
 | ||||||
|  |     out += "color = byteround(last_tex_env_out);\n"; | ||||||
| 
 | 
 | ||||||
|     out += "}"; |     out += "}"; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue