mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	pica: Implement fragment lighting LUTs.
This commit is contained in:
		
							parent
							
								
									4369767c72
								
							
						
					
					
						commit
						281bc90ad2
					
				
					 2 changed files with 34 additions and 0 deletions
				
			
		|  | @ -464,6 +464,21 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
|             break; | ||||
|         } | ||||
| 
 | ||||
|         case PICA_REG_INDEX_WORKAROUND(lighting.lut_data[0], 0x1c8): | ||||
|         case PICA_REG_INDEX_WORKAROUND(lighting.lut_data[1], 0x1c9): | ||||
|         case PICA_REG_INDEX_WORKAROUND(lighting.lut_data[2], 0x1ca): | ||||
|         case PICA_REG_INDEX_WORKAROUND(lighting.lut_data[3], 0x1cb): | ||||
|         case PICA_REG_INDEX_WORKAROUND(lighting.lut_data[4], 0x1cc): | ||||
|         case PICA_REG_INDEX_WORKAROUND(lighting.lut_data[5], 0x1cd): | ||||
|         case PICA_REG_INDEX_WORKAROUND(lighting.lut_data[6], 0x1ce): | ||||
|         case PICA_REG_INDEX_WORKAROUND(lighting.lut_data[7], 0x1cf): | ||||
|         { | ||||
|             auto& lut_config = regs.lighting.lut_config; | ||||
|             g_state.lighting.luts[lut_config.type][lut_config.index].raw = value; | ||||
|             lut_config.index = lut_config.index + 1; | ||||
|             break; | ||||
|         } | ||||
| 
 | ||||
|         default: | ||||
|             break; | ||||
|     } | ||||
|  |  | |||
|  | @ -1156,6 +1156,25 @@ struct State { | |||
|     ShaderSetup vs; | ||||
|     ShaderSetup gs; | ||||
| 
 | ||||
|     struct { | ||||
|         union LutEntry { | ||||
|             // Used for raw access
 | ||||
|             u32 raw; | ||||
| 
 | ||||
|             // LUT value, encoded as 12-bit fixed point, with 12 fraction bits
 | ||||
|             BitField< 0, 12, u32> value; | ||||
| 
 | ||||
|             // Used by HW for efficient interpolation, Citra does not use these
 | ||||
|             BitField<12, 12, u32> difference; | ||||
| 
 | ||||
|             float ToFloat() { | ||||
|                 return static_cast<float>(value) / 4095.f; | ||||
|             } | ||||
|         }; | ||||
| 
 | ||||
|         std::array<LutEntry, 256> luts[24]; | ||||
|     } lighting; | ||||
| 
 | ||||
|     /// Current Pica command list
 | ||||
|     struct { | ||||
|         const u32* head_ptr; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue