diff options
| -rw-r--r-- | src/core/hle/service/gsp_gpu.cpp | 25 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.cpp | 4 | 
2 files changed, 14 insertions, 15 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;      } diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index 29d220e8d..aa47bd616 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp @@ -88,10 +88,8 @@ void RendererOpenGL::SwapBuffers() {  void RendererOpenGL::LoadFBToActiveGLTexture(const GPU::Regs::FramebufferConfig& framebuffer,                                               const TextureInfo& texture) { -    // TODO: Why are active_fb and the valid framebuffer flipped compared to 3dbrew documentation -    // and GSP definitions?      const VAddr framebuffer_vaddr = Memory::PhysicalToVirtualAddress( -        framebuffer.active_fb == 0 ? framebuffer.address_left2 : framebuffer.address_left1); +        framebuffer.active_fb == 0 ? framebuffer.address_left1 : framebuffer.address_left2);      LOG_TRACE(Render_OpenGL, "0x%08x bytes from 0x%08x(%dx%d), fmt %x",          framebuffer.stride * framebuffer.height, | 
