mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Pica/GPU: Change hardware registers to use physical addresses rather than virtual ones.
This cleans up the mess that address reading/writing had become and makes the code a *lot* more sensible. This adds a physical<->virtual address converter to mem_map.h. For further accuracy, we will want to properly extend this to support a wider range of address regions. For now, this makes simply homebrew applications work in a good manner though.
This commit is contained in:
		
							parent
							
								
									bd798390d5
								
							
						
					
					
						commit
						7b6a7d7dfb
					
				
					 8 changed files with 81 additions and 217 deletions
				
			
		|  | @ -45,7 +45,7 @@ struct Regs { | |||
|     INSERT_PADDING_WORDS(0x41); | ||||
| 
 | ||||
|     BitField<0, 24, u32> viewport_size_x; | ||||
|     INSERT_PADDING_WORDS(1); | ||||
|     INSERT_PADDING_WORDS(0x1); | ||||
|     BitField<0, 24, u32> viewport_size_y; | ||||
| 
 | ||||
|     INSERT_PADDING_WORDS(0x1bc); | ||||
|  |  | |||
|  | @ -81,20 +81,20 @@ void RendererOpenGL::RenderXFB(const common::Rect& src_rect, const common::Rect& | |||
|     const auto& framebuffer_top = GPU::g_regs.framebuffer_config[0]; | ||||
|     const auto& framebuffer_sub = GPU::g_regs.framebuffer_config[1]; | ||||
|     const u32 active_fb_top = (framebuffer_top.active_fb == 1) | ||||
|                                 ? framebuffer_top.address_left2 | ||||
|                                 : framebuffer_top.address_left1; | ||||
|                                 ? Memory::PhysicalToVirtualAddress(framebuffer_top.address_left2) | ||||
|                                 : Memory::PhysicalToVirtualAddress(framebuffer_top.address_left1); | ||||
|     const u32 active_fb_sub = (framebuffer_sub.active_fb == 1) | ||||
|                                 ? framebuffer_sub.address_left2 | ||||
|                                 : framebuffer_sub.address_left1; | ||||
|                                 ? Memory::PhysicalToVirtualAddress(framebuffer_sub.address_left2) | ||||
|                                 : Memory::PhysicalToVirtualAddress(framebuffer_sub.address_left1); | ||||
| 
 | ||||
|     DEBUG_LOG(GPU, "RenderXFB: 0x%08x bytes from 0x%08x(%dx%d), fmt %x", | ||||
|               framebuffer_top.stride * framebuffer_top.height, | ||||
|               GPU::GetFramebufferAddr(active_fb_top), (int)framebuffer_top.width, | ||||
|               active_fb_top, (int)framebuffer_top.width, | ||||
|               (int)framebuffer_top.height, (int)framebuffer_top.format); | ||||
| 
 | ||||
|     // TODO: This should consider the GPU registers for framebuffer width, height and stride.
 | ||||
|     FlipFramebuffer(GPU::GetFramebufferPointer(active_fb_top), m_xfb_top_flipped); | ||||
|     FlipFramebuffer(GPU::GetFramebufferPointer(active_fb_sub), m_xfb_bottom_flipped); | ||||
|     FlipFramebuffer(Memory::GetPointer(active_fb_top), m_xfb_top_flipped); | ||||
|     FlipFramebuffer(Memory::GetPointer(active_fb_sub), m_xfb_bottom_flipped); | ||||
| 
 | ||||
|     // Blit the top framebuffer
 | ||||
|     // ------------------------
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue