diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-01-14 02:55:56 +0100 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-01-14 08:20:12 +0100 |
commit | 5961a2852dc2b603a896afd9b38b0ded26503849 (patch) | |
tree | 124f746b6cb1fefc7ac1a29de7bdb42d92a74b59 /src/core/hle | |
parent | GPU: Fire GPU interrupts at the correct places. (diff) | |
download | yuzu-5961a2852dc2b603a896afd9b38b0ded26503849.tar yuzu-5961a2852dc2b603a896afd9b38b0ded26503849.tar.gz yuzu-5961a2852dc2b603a896afd9b38b0ded26503849.tar.bz2 yuzu-5961a2852dc2b603a896afd9b38b0ded26503849.tar.lz yuzu-5961a2852dc2b603a896afd9b38b0ded26503849.tar.xz yuzu-5961a2852dc2b603a896afd9b38b0ded26503849.tar.zst yuzu-5961a2852dc2b603a896afd9b38b0ded26503849.zip |
Diffstat (limited to 'src/core/hle')
-rw-r--r-- | src/core/hle/service/gsp_gpu.cpp | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/core/hle/service/gsp_gpu.cpp b/src/core/hle/service/gsp_gpu.cpp index 9504ab5bb..00a941658 100644 --- a/src/core/hle/service/gsp_gpu.cpp +++ b/src/core/hle/service/gsp_gpu.cpp @@ -218,6 +218,19 @@ void SignalInterrupt(InterruptId interrupt_id) { interrupt_relay_queue->slot[next] = interrupt_id; interrupt_relay_queue->error_code = 0x0; // No error + + // Update framebuffer information if requested + // TODO(yuriks): Confirm where this code should be called. It is definitely updated without + // executing any GSP commands, only waiting on the event. + for (int screen_id = 0; screen_id < 2; ++screen_id) { + FrameBufferUpdate* info = GetFrameBufferInfo(thread_id, screen_id); + + if (info->is_dirty) { + SetBufferSwap(screen_id, info->framebuffer_info[info->index]); + } + + info->is_dirty = false; + } } Kernel::SignalEvent(g_interrupt_event); } @@ -281,18 +294,6 @@ static void ExecuteCommand(const Command& command, u32 thread_id) { WriteGPURegister(GPU_REG_INDEX(display_transfer_config.output_size), params.out_buffer_size); WriteGPURegister(GPU_REG_INDEX(display_transfer_config.flags), params.flags); WriteGPURegister(GPU_REG_INDEX(display_transfer_config.trigger), 1); - - // Update framebuffer information if requested - for (int screen_id = 0; screen_id < 2; ++screen_id) { - FrameBufferUpdate* info = GetFrameBufferInfo(thread_id, screen_id); - - if (info->is_dirty) { - SetBufferSwap(screen_id, info->framebuffer_info[info->index]); - info->framebuffer_info->active_fb = info->framebuffer_info->active_fb ^ 1; - } - - info->is_dirty = false; - } break; } |