mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-10-24 18:15:16 -04:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9218d77105 | |||
| cff5bde722 | |||
| 84ed9692f9 | |||
| 9cdc391275 | |||
| f0ffc497a8 | |||
| 128ecaf55a | |||
| ed98b1127b | |||
| 989768aa46 |
@@ -259,7 +259,7 @@ android {
|
||||
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
version = "3.31.6"
|
||||
version = "3.31.5"
|
||||
path = file("${edenDir}/CMakeLists.txt")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
/* SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project */
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
@@ -5,9 +8,22 @@
|
||||
|
||||
#define __ASSEMBLY__
|
||||
|
||||
// Newer Linux UAPI headers check __ASSEMBLER__ instead of __ASSEMBLY__ to hide C declarations.
|
||||
// Without it, asm-generic/signal.h redeclares sigset_t and clashes with glibc's. Only define it
|
||||
// around these includes, since glibc headers also look at __ASSEMBLER__.
|
||||
#ifndef __ASSEMBLER__
|
||||
#define __ASSEMBLER__
|
||||
#define EDEN_NCE_UNDEF_ASSEMBLER
|
||||
#endif
|
||||
|
||||
#include <asm-generic/signal.h>
|
||||
#include <asm-generic/unistd.h>
|
||||
|
||||
#ifdef EDEN_NCE_UNDEF_ASSEMBLER
|
||||
#undef __ASSEMBLER__
|
||||
#undef EDEN_NCE_UNDEF_ASSEMBLER
|
||||
#endif
|
||||
|
||||
#define ReturnToRunCodeByExceptionLevelChangeSignal SIGUSR2
|
||||
#define BreakFromRunCodeSignal SIGURG
|
||||
#define GuestAccessFaultSignal SIGSEGV
|
||||
|
||||
@@ -57,8 +57,21 @@ u32 HardwareComposer::ComposeLocked(f32* out_speed_scale, Display& display,
|
||||
// Set default speed limit to 100%.
|
||||
*out_speed_scale = 1.0f;
|
||||
|
||||
// If no layers are visible, skip the logic. Acquiring and holding buffers here would
|
||||
// consume the producer's queue without ever presenting.
|
||||
bool any_visible = false;
|
||||
for (auto& layer : display.stack.layers) {
|
||||
if (layer->visible) {
|
||||
any_visible = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!any_visible) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Wait for the previous composite, bounding the number of in-flight composites.
|
||||
nvdisp.WaitForComposite();
|
||||
this->ReleaseFramebuffersLocked(display);
|
||||
|
||||
// Determine the number of vsync periods to wait before composing again.
|
||||
std::optional<s32> swap_interval{};
|
||||
@@ -152,6 +165,13 @@ u32 HardwareComposer::ComposeLocked(f32* out_speed_scale, Display& display,
|
||||
// Advance by 1 frame (60 FPS compositing)
|
||||
m_frame_number += 1;
|
||||
|
||||
// Release framebuffers once the frame has been handed to the compositor. This happens
|
||||
// within the same vsync period as the acquire (release_frame_number is checked against
|
||||
// the advanced counter), so the producer gets its buffers back immediately instead of
|
||||
// losing a queue slot for a whole frame.
|
||||
// TODO: support release fences; releasing before the composite has finished can tear.
|
||||
this->ReleaseFramebuffersLocked(display);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user