aboutsummaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2026-05-24 01:04:32 +0200
committercrueter <crueter@eden-emu.dev>2026-05-24 01:04:32 +0200
commit2aa2ac7d9ac8e47f59a2475384c3afee9d5c60bc (patch)
tree17c578ef422f3323bdb0b57ea85457864f3912de /src/video_core
parent90164197dc3526bba5bc5446a015a9ed93a4aff5 (diff)
[hle/service{nvdrv,apm}] fixes for TetrisSwitch (#3983)
- testriswitch submits buffers with a fence id of -1, just skip them instead of trying to process them? - apm:u, which is removed, but hey, backwards compat never hurted - another instance of shared_memory crashing NPad Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3983 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/gpu.cpp35
1 files changed, 17 insertions, 18 deletions
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp
index 5f4054212f..391ca4ef5f 100644
--- a/src/video_core/gpu.cpp
+++ b/src/video_core/gpu.cpp
@@ -303,26 +303,25 @@ struct GPU::Impl {
free_swap_counters.pop_front();
}
}
- const auto wait_fence =
- RequestSyncOperation([this, current_request_counter, &layers, &fences, num_fences] {
- auto& syncpoint_manager = host1x.GetSyncpointManager();
- if (num_fences == 0) {
- renderer->Composite(layers);
- }
- const auto executer = [this, current_request_counter, layers_copy = layers]() {
- {
- std::unique_lock<std::mutex> lk(request_swap_mutex);
- if (--request_swap_counters[current_request_counter] != 0) {
- return;
- }
- free_swap_counters.push_back(current_request_counter);
+ const auto wait_fence = RequestSyncOperation([this, current_request_counter, &layers, &fences, num_fences] {
+ auto& syncpoint_manager = host1x.GetSyncpointManager();
+ if (num_fences == 0) {
+ renderer->Composite(layers);
+ }
+ const auto executer = [this, current_request_counter, layers_copy = layers]() {
+ {
+ std::unique_lock<std::mutex> lk(request_swap_mutex);
+ if (--request_swap_counters[current_request_counter] != 0) {
+ return;
}
- renderer->Composite(layers_copy);
- };
- for (size_t i = 0; i < num_fences; i++) {
- syncpoint_manager.RegisterGuestAction(fences[i].id, fences[i].value, executer);
+ free_swap_counters.push_back(current_request_counter);
}
- });
+ renderer->Composite(layers_copy);
+ };
+ for (size_t i = 0; i < num_fences; i++) {
+ syncpoint_manager.RegisterGuestAction(fences[i].id, fences[i].value, executer);
+ }
+ });
gpu_thread.TickGPU();
WaitForSyncOperation(wait_fence);
}