gcc 11 compatibility fix (suggestion) (#5778)
Fixes missing include and runtime variable in offsetof * gcc 11 compatibility fix * Revert "gcc 11 compatibility fix" This reverts commit bf5711d944bbdf7b5663ba4fec1b9066f16e2bb2. * gcc 11 compatibility fix (with pointer math) * Don't require pointers for framebuffer field math * Code style fix (clang-format)
This commit is contained in:
		| @@ -9,6 +9,7 @@ | |||||||
| #include <atomic> | #include <atomic> | ||||||
| #include <cstddef> | #include <cstddef> | ||||||
| #include <cstring> | #include <cstring> | ||||||
|  | #include <limits> | ||||||
| #include <new> | #include <new> | ||||||
| #include <type_traits> | #include <type_traits> | ||||||
| #include <vector> | #include <vector> | ||||||
|   | |||||||
| @@ -283,29 +283,29 @@ ResultCode SetBufferSwap(u32 screen_id, const FrameBufferInfo& info) { | |||||||
|     PAddr phys_address_left = VirtualToPhysicalAddress(info.address_left); |     PAddr phys_address_left = VirtualToPhysicalAddress(info.address_left); | ||||||
|     PAddr phys_address_right = VirtualToPhysicalAddress(info.address_right); |     PAddr phys_address_right = VirtualToPhysicalAddress(info.address_right); | ||||||
|     if (info.active_fb == 0) { |     if (info.active_fb == 0) { | ||||||
|         WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_REG_INDEX( |         WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX( | ||||||
|                                                 framebuffer_config[screen_id].address_left1)), |                                                 screen_id, address_left1)), | ||||||
|                          phys_address_left); |                          phys_address_left); | ||||||
|         WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_REG_INDEX( |         WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX( | ||||||
|                                                 framebuffer_config[screen_id].address_right1)), |                                                 screen_id, address_right1)), | ||||||
|                          phys_address_right); |                          phys_address_right); | ||||||
|     } else { |     } else { | ||||||
|         WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_REG_INDEX( |         WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX( | ||||||
|                                                 framebuffer_config[screen_id].address_left2)), |                                                 screen_id, address_left2)), | ||||||
|                          phys_address_left); |                          phys_address_left); | ||||||
|         WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_REG_INDEX( |         WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX( | ||||||
|                                                 framebuffer_config[screen_id].address_right2)), |                                                 screen_id, address_right2)), | ||||||
|                          phys_address_right); |                          phys_address_right); | ||||||
|     } |     } | ||||||
|     WriteSingleHWReg(base_address + |     WriteSingleHWReg(base_address + | ||||||
|                          4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].stride)), |                          4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX(screen_id, stride)), | ||||||
|                      info.stride); |                      info.stride); | ||||||
|     WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_REG_INDEX( |     WriteSingleHWReg(base_address + | ||||||
|                                             framebuffer_config[screen_id].color_format)), |                          4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX(screen_id, color_format)), | ||||||
|                      info.format); |                      info.format); | ||||||
|     WriteSingleHWReg( |     WriteSingleHWReg(base_address + | ||||||
|         base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].active_fb)), |                          4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX(screen_id, active_fb)), | ||||||
|         info.shown_fb); |                      info.shown_fb); | ||||||
|  |  | ||||||
|     if (Pica::g_debug_context) |     if (Pica::g_debug_context) | ||||||
|         Pica::g_debug_context->OnEvent(Pica::DebugContext::Event::BufferSwapped, nullptr); |         Pica::g_debug_context->OnEvent(Pica::DebugContext::Event::BufferSwapped, nullptr); | ||||||
|   | |||||||
| @@ -30,6 +30,14 @@ constexpr double SCREEN_REFRESH_RATE = BASE_CLOCK_RATE_ARM11 / static_cast<doubl | |||||||
| // Returns index corresponding to the Regs member labeled by field_name | // Returns index corresponding to the Regs member labeled by field_name | ||||||
| #define GPU_REG_INDEX(field_name) (offsetof(GPU::Regs, field_name) / sizeof(u32)) | #define GPU_REG_INDEX(field_name) (offsetof(GPU::Regs, field_name) / sizeof(u32)) | ||||||
|  |  | ||||||
|  | // Returns index corresponding to the Regs::FramebufferConfig labeled by field_name | ||||||
|  | // screen_id is a subscript for Regs::framebuffer_config | ||||||
|  | #define GPU_FRAMEBUFFER_REG_INDEX(screen_id, field_name)                                           \ | ||||||
|  |     ((offsetof(GPU::Regs, framebuffer_config) +                                                    \ | ||||||
|  |       sizeof(GPU::Regs::FramebufferConfig) * (screen_id) +                                         \ | ||||||
|  |       offsetof(GPU::Regs::FramebufferConfig, field_name)) /                                        \ | ||||||
|  |      sizeof(u32)) | ||||||
|  |  | ||||||
| // MMIO region 0x1EFxxxxx | // MMIO region 0x1EFxxxxx | ||||||
| struct Regs { | struct Regs { | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user