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:
parent
6e16081b6a
commit
a2f34ea82b
3 changed files with 23 additions and 14 deletions
|
@ -9,6 +9,7 @@
|
|||
#include <atomic>
|
||||
#include <cstddef>
|
||||
#include <cstring>
|
||||
#include <limits>
|
||||
#include <new>
|
||||
#include <type_traits>
|
||||
#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_right = VirtualToPhysicalAddress(info.address_right);
|
||||
if (info.active_fb == 0) {
|
||||
WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(
|
||||
framebuffer_config[screen_id].address_left1)),
|
||||
WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX(
|
||||
screen_id, address_left1)),
|
||||
phys_address_left);
|
||||
WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(
|
||||
framebuffer_config[screen_id].address_right1)),
|
||||
WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX(
|
||||
screen_id, address_right1)),
|
||||
phys_address_right);
|
||||
} else {
|
||||
WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(
|
||||
framebuffer_config[screen_id].address_left2)),
|
||||
WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX(
|
||||
screen_id, address_left2)),
|
||||
phys_address_left);
|
||||
WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(
|
||||
framebuffer_config[screen_id].address_right2)),
|
||||
WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX(
|
||||
screen_id, address_right2)),
|
||||
phys_address_right);
|
||||
}
|
||||
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);
|
||||
WriteSingleHWReg(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(
|
||||
framebuffer_config[screen_id].color_format)),
|
||||
WriteSingleHWReg(base_address +
|
||||
4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX(screen_id, color_format)),
|
||||
info.format);
|
||||
WriteSingleHWReg(
|
||||
base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].active_fb)),
|
||||
info.shown_fb);
|
||||
WriteSingleHWReg(base_address +
|
||||
4 * static_cast<u32>(GPU_FRAMEBUFFER_REG_INDEX(screen_id, active_fb)),
|
||||
info.shown_fb);
|
||||
|
||||
if (Pica::g_debug_context)
|
||||
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
|
||||
#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
|
||||
struct Regs {
|
||||
|
||||
|
|
Loading…
Reference in a new issue