mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Merge pull request #471 from archshift/pp3ports3
GPU: Add support for more framebuffer formats in display transfers.
This commit is contained in:
		
						commit
						89a71eb6a4
					
				
					 1 changed files with 37 additions and 0 deletions
				
			
		|  | @ -19,6 +19,7 @@ | ||||||
| 
 | 
 | ||||||
| #include "video_core/command_processor.h" | #include "video_core/command_processor.h" | ||||||
| #include "video_core/video_core.h" | #include "video_core/video_core.h" | ||||||
|  | #include <video_core/color.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| namespace GPU { | namespace GPU { | ||||||
|  | @ -140,6 +141,26 @@ inline void Write(u32 addr, const T data) { | ||||||
|                         break; |                         break; | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|  |                     case Regs::PixelFormat::RGB5A1: | ||||||
|  |                     { | ||||||
|  |                         u16 srcval = *(u16*)(source_pointer + x * 4 * pixel_skip + y * config.input_width * 4 * pixel_skip); | ||||||
|  |                         source_color.r = Color::Convert5To8((srcval >> 11) & 0x1F); // red
 | ||||||
|  |                         source_color.g = Color::Convert5To8((srcval >>  6) & 0x1F); // green
 | ||||||
|  |                         source_color.b = Color::Convert5To8((srcval >>  1) & 0x1F); // blue
 | ||||||
|  |                         source_color.a = Color::Convert1To8(srcval & 0x1);          // alpha
 | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                     case Regs::PixelFormat::RGBA4: | ||||||
|  |                     { | ||||||
|  |                         u16 srcval = *(u16*)(source_pointer + x * 4 * pixel_skip + y * config.input_width * 4 * pixel_skip); | ||||||
|  |                         source_color.r = Color::Convert4To8((srcval >> 12) & 0xF); // red
 | ||||||
|  |                         source_color.g = Color::Convert4To8((srcval >>  8) & 0xF); // green
 | ||||||
|  |                         source_color.b = Color::Convert4To8((srcval >>  4) & 0xF); // blue
 | ||||||
|  |                         source_color.a = Color::Convert4To8( srcval        & 0xF); // alpha
 | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|                     default: |                     default: | ||||||
|                         LOG_ERROR(HW_GPU, "Unknown source framebuffer format %x", config.input_format.Value()); |                         LOG_ERROR(HW_GPU, "Unknown source framebuffer format %x", config.input_format.Value()); | ||||||
|                         break; |                         break; | ||||||
|  | @ -166,6 +187,22 @@ inline void Write(u32 addr, const T data) { | ||||||
|                         break; |                         break; | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|  |                     case Regs::PixelFormat::RGB5A1: | ||||||
|  |                     { | ||||||
|  |                         u16* dstptr = (u16*)(dest_pointer + x * 2 + y * config.output_width * 2); | ||||||
|  |                         *dstptr = ((source_color.r >> 3) << 11) | ((source_color.g >> 3) << 6) | ||||||
|  |                                 | ((source_color.b >> 3) <<  1) | ( source_color.a >> 7); | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                     case Regs::PixelFormat::RGBA4: | ||||||
|  |                     { | ||||||
|  |                         u16* dstptr = (u16*)(dest_pointer + x * 2 + y * config.output_width * 2); | ||||||
|  |                         *dstptr = ((source_color.r >> 4) << 12) | ((source_color.g >> 4) << 8) | ||||||
|  |                                 | ((source_color.b >> 4) <<  4) | ( source_color.a >> 4); | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|                     default: |                     default: | ||||||
|                         LOG_ERROR(HW_GPU, "Unknown destination framebuffer format %x", config.output_format.Value()); |                         LOG_ERROR(HW_GPU, "Unknown destination framebuffer format %x", config.output_format.Value()); | ||||||
|                         break; |                         break; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue