mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	tev: Use primary color for previous source in first stage (#6921)
This commit is contained in:
		
							parent
							
								
									04aeecabcf
								
							
						
					
					
						commit
						8b218e1b7d
					
				
					 4 changed files with 13 additions and 12 deletions
				
			
		|  | @ -1485,7 +1485,7 @@ vec4 secondary_fragment_color = vec4(0.0); | |||
| 
 | ||||
|     out += "vec4 combiner_buffer = vec4(0.0);\n" | ||||
|            "vec4 next_combiner_buffer = tev_combiner_buffer_color;\n" | ||||
|            "vec4 last_tex_env_out = vec4(0.0);\n"; | ||||
|            "vec4 last_tex_env_out = rounded_primary_color;\n"; | ||||
| 
 | ||||
|     for (std::size_t index = 0; index < state.tev_stages.size(); ++index) { | ||||
|         WriteTevStage(out, config, static_cast<u32>(index)); | ||||
|  |  | |||
|  | @ -422,8 +422,8 @@ void RasterizerSoftware::ProcessTriangle(const Vertex& v0, const Vertex& v1, con | |||
|             } | ||||
| 
 | ||||
|             // Write the TEV stages.
 | ||||
|             WriteTevConfig(texture_color, tev_stages, primary_color, primary_fragment_color, | ||||
|                            secondary_fragment_color); | ||||
|             auto combiner_output = WriteTevConfig(texture_color, tev_stages, primary_color, | ||||
|                                                   primary_fragment_color, secondary_fragment_color); | ||||
| 
 | ||||
|             const auto& output_merger = regs.framebuffer.output_merger; | ||||
|             if (output_merger.fragment_operation_mode == | ||||
|  | @ -663,7 +663,7 @@ Common::Vec4<u8> RasterizerSoftware::PixelColor(u16 x, u16 y, | |||
|     return result; | ||||
| } | ||||
| 
 | ||||
| void RasterizerSoftware::WriteTevConfig( | ||||
| Common::Vec4<u8> RasterizerSoftware::WriteTevConfig( | ||||
|     std::span<const Common::Vec4<u8>, 4> texture_color, | ||||
|     std::span<const Pica::TexturingRegs::TevStageConfig, 6> tev_stages, | ||||
|     Common::Vec4<u8> primary_color, Common::Vec4<u8> primary_fragment_color, | ||||
|  | @ -676,6 +676,7 @@ void RasterizerSoftware::WriteTevConfig( | |||
|      * with some basic arithmetic. Alpha combiners can be configured separately but work | ||||
|      * analogously. | ||||
|      **/ | ||||
|     Common::Vec4<u8> combiner_output = primary_color; | ||||
|     Common::Vec4<u8> combiner_buffer = {0, 0, 0, 0}; | ||||
|     Common::Vec4<u8> next_combiner_buffer = | ||||
|         Common::MakeVec(regs.texturing.tev_combiner_buffer_color.r.Value(), | ||||
|  | @ -766,6 +767,8 @@ void RasterizerSoftware::WriteTevConfig( | |||
|             next_combiner_buffer.a() = combiner_output.a(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return combiner_output; | ||||
| } | ||||
| 
 | ||||
| void RasterizerSoftware::WriteFog(Common::Vec4<u8>& combiner_output, float depth) const { | ||||
|  |  | |||
|  | @ -55,10 +55,11 @@ private: | |||
|     Common::Vec4<u8> PixelColor(u16 x, u16 y, Common::Vec4<u8>& combiner_output) const; | ||||
| 
 | ||||
|     /// Emulates the TEV configuration and returns the combiner output.
 | ||||
|     void WriteTevConfig(std::span<const Common::Vec4<u8>, 4> texture_color, | ||||
|                         std::span<const Pica::TexturingRegs::TevStageConfig, 6> tev_stages, | ||||
|                         Common::Vec4<u8> primary_color, Common::Vec4<u8> primary_fragment_color, | ||||
|                         Common::Vec4<u8> secondary_fragment_color); | ||||
|     Common::Vec4<u8> WriteTevConfig( | ||||
|         std::span<const Common::Vec4<u8>, 4> texture_color, | ||||
|         std::span<const Pica::TexturingRegs::TevStageConfig, 6> tev_stages, | ||||
|         Common::Vec4<u8> primary_color, Common::Vec4<u8> primary_fragment_color, | ||||
|         Common::Vec4<u8> secondary_fragment_color); | ||||
| 
 | ||||
|     /// Blends fog to the combiner output if enabled.
 | ||||
|     void WriteFog(Common::Vec4<u8>& combiner_output, float depth) const; | ||||
|  | @ -74,9 +75,6 @@ private: | |||
|     Pica::State& state; | ||||
|     const Pica::Regs& regs; | ||||
|     Framebuffer fb; | ||||
|     // Kirby Blowout Blast relies on the combiner output of a previous draw
 | ||||
|     // in order to render the sky correctly.
 | ||||
|     Common::Vec4<u8> combiner_output{}; | ||||
| }; | ||||
| 
 | ||||
| } // namespace SwRenderer
 | ||||
|  |  | |||
|  | @ -1527,7 +1527,7 @@ vec4 secondary_fragment_color = vec4(0.0); | |||
| 
 | ||||
|     out += "vec4 combiner_buffer = vec4(0.0);\n" | ||||
|            "vec4 next_combiner_buffer = tev_combiner_buffer_color;\n" | ||||
|            "vec4 last_tex_env_out = vec4(0.0);\n"; | ||||
|            "vec4 last_tex_env_out = rounded_primary_color;\n"; | ||||
| 
 | ||||
|     out += "vec3 color_results_1 = vec3(0.0);\n" | ||||
|            "vec3 color_results_2 = vec3(0.0);\n" | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue