mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-11-03 23:28:48 +00:00 
			
		
		
		
	Pica: Use zero for the SecondaryFragmentColor source.
- This is a workaround until we support fragment lighting.
This commit is contained in:
		
							parent
							
								
									dcbc653b90
								
							
						
					
					
						commit
						33b9abb91e
					
				
					 3 changed files with 21 additions and 11 deletions
				
			
		| 
						 | 
					@ -240,6 +240,7 @@ struct Regs {
 | 
				
			||||||
        enum class Source : u32 {
 | 
					        enum class Source : u32 {
 | 
				
			||||||
            PrimaryColor           = 0x0,
 | 
					            PrimaryColor           = 0x0,
 | 
				
			||||||
            PrimaryFragmentColor   = 0x1,
 | 
					            PrimaryFragmentColor   = 0x1,
 | 
				
			||||||
 | 
					            SecondaryFragmentColor = 0x2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Texture0               = 0x3,
 | 
					            Texture0               = 0x3,
 | 
				
			||||||
            Texture1               = 0x4,
 | 
					            Texture1               = 0x4,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -402,11 +402,16 @@ static void ProcessTriangleInternal(const VertexShader::OutputVertex& v0,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                auto GetSource = [&](Source source) -> Math::Vec4<u8> {
 | 
					                auto GetSource = [&](Source source) -> Math::Vec4<u8> {
 | 
				
			||||||
                    switch (source) {
 | 
					                    switch (source) {
 | 
				
			||||||
                    // TODO: What's the difference between these two?
 | 
					 | 
				
			||||||
                    case Source::PrimaryColor:
 | 
					                    case Source::PrimaryColor:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // HACK: Until we implement fragment lighting, use primary_color
 | 
				
			||||||
                    case Source::PrimaryFragmentColor:
 | 
					                    case Source::PrimaryFragmentColor:
 | 
				
			||||||
                        return primary_color;
 | 
					                        return primary_color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // HACK: Until we implement fragment lighting, use zero
 | 
				
			||||||
 | 
					                    case Source::SecondaryFragmentColor:
 | 
				
			||||||
 | 
					                        return {0, 0, 0, 0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    case Source::Texture0:
 | 
					                    case Source::Texture0:
 | 
				
			||||||
                        return texture_color[0];
 | 
					                        return texture_color[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,15 +69,16 @@ const char g_fragment_shader_hw[] = R"(
 | 
				
			||||||
#define NUM_VTX_ATTR 7
 | 
					#define NUM_VTX_ATTR 7
 | 
				
			||||||
#define NUM_TEV_STAGES 6
 | 
					#define NUM_TEV_STAGES 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SOURCE_PRIMARYCOLOR         0x0
 | 
					#define SOURCE_PRIMARYCOLOR           0x0
 | 
				
			||||||
#define SOURCE_PRIMARYFRAGMENTCOLOR 0x1
 | 
					#define SOURCE_PRIMARYFRAGMENTCOLOR   0x1
 | 
				
			||||||
#define SOURCE_TEXTURE0             0x3
 | 
					#define SOURCE_SECONDARYFRAGMENTCOLOR 0x2
 | 
				
			||||||
#define SOURCE_TEXTURE1             0x4
 | 
					#define SOURCE_TEXTURE0               0x3
 | 
				
			||||||
#define SOURCE_TEXTURE2             0x5
 | 
					#define SOURCE_TEXTURE1               0x4
 | 
				
			||||||
#define SOURCE_TEXTURE3             0x6
 | 
					#define SOURCE_TEXTURE2               0x5
 | 
				
			||||||
#define SOURCE_PREVIOUSBUFFER       0xd
 | 
					#define SOURCE_TEXTURE3               0x6
 | 
				
			||||||
#define SOURCE_CONSTANT             0xe
 | 
					#define SOURCE_PREVIOUSBUFFER         0xd
 | 
				
			||||||
#define SOURCE_PREVIOUS             0xf
 | 
					#define SOURCE_CONSTANT               0xe
 | 
				
			||||||
 | 
					#define SOURCE_PREVIOUS               0xf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define COLORMODIFIER_SOURCECOLOR         0x0
 | 
					#define COLORMODIFIER_SOURCECOLOR         0x0
 | 
				
			||||||
#define COLORMODIFIER_ONEMINUSSOURCECOLOR 0x1
 | 
					#define COLORMODIFIER_ONEMINUSSOURCECOLOR 0x1
 | 
				
			||||||
| 
						 | 
					@ -151,8 +152,11 @@ vec4 GetSource(int source) {
 | 
				
			||||||
    if (source == SOURCE_PRIMARYCOLOR) {
 | 
					    if (source == SOURCE_PRIMARYCOLOR) {
 | 
				
			||||||
        return o[2];
 | 
					        return o[2];
 | 
				
			||||||
    } else if (source == SOURCE_PRIMARYFRAGMENTCOLOR) {
 | 
					    } else if (source == SOURCE_PRIMARYFRAGMENTCOLOR) {
 | 
				
			||||||
        // HACK: Uses color value, but should really use fragment lighting output
 | 
					        // HACK: Until we implement fragment lighting, use primary_color
 | 
				
			||||||
        return o[2];
 | 
					        return o[2];
 | 
				
			||||||
 | 
					    } else if (source == SOURCE_SECONDARYFRAGMENTCOLOR) {
 | 
				
			||||||
 | 
					        // HACK: Until we implement fragment lighting, use zero
 | 
				
			||||||
 | 
					        return vec4(0.0, 0.0, 0.0, 0.0);
 | 
				
			||||||
    } else if (source == SOURCE_TEXTURE0) {
 | 
					    } else if (source == SOURCE_TEXTURE0) {
 | 
				
			||||||
        return texture(tex[0], o[3].xy);
 | 
					        return texture(tex[0], o[3].xy);
 | 
				
			||||||
    } else if (source == SOURCE_TEXTURE1) {
 | 
					    } else if (source == SOURCE_TEXTURE1) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue