diff options
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp | 5 | ||||
| -rw-r--r-- | src/core/hle/service/nvdrv/devices/nvdisp_disp0.h | 3 | ||||
| -rw-r--r-- | src/core/hle/service/nvflinger/nvflinger.cpp | 15 | 
3 files changed, 8 insertions, 15 deletions
| diff --git a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp index e6a976714..18c5324a9 100644 --- a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp +++ b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.cpp @@ -40,7 +40,8 @@ void nvdisp_disp0::OnClose(DeviceFD fd) {}  void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, android::PixelFormat format, u32 width,                          u32 height, u32 stride, android::BufferTransformFlags transform, -                        const Common::Rectangle<int>& crop_rect) { +                        const Common::Rectangle<int>& crop_rect, +                        std::array<Service::Nvidia::NvFence, 4>& fences, u32 num_fences) {      const VAddr addr = nvmap.GetHandleAddress(buffer_handle);      LOG_TRACE(Service,                "Drawing from address {:X} offset {:08X} Width {} Height {} Stride {} Format {}", @@ -50,7 +51,7 @@ void nvdisp_disp0::flip(u32 buffer_handle, u32 offset, android::PixelFormat form                                                 stride, format, transform, crop_rect};      system.GetPerfStats().EndSystemFrame(); -    system.GPU().RequestSwapBuffers(&framebuffer, nullptr, 0); +    system.GPU().RequestSwapBuffers(&framebuffer, fences, num_fences);      system.SpeedLimiter().DoSpeedLimiting(system.CoreTiming().GetGlobalTimeUs());      system.GetPerfStats().BeginSystemFrame();  } diff --git a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.h b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.h index 1ca9b2e74..04217ab12 100644 --- a/src/core/hle/service/nvdrv/devices/nvdisp_disp0.h +++ b/src/core/hle/service/nvdrv/devices/nvdisp_disp0.h @@ -38,7 +38,8 @@ public:      /// Performs a screen flip, drawing the buffer pointed to by the handle.      void flip(u32 buffer_handle, u32 offset, android::PixelFormat format, u32 width, u32 height,                u32 stride, android::BufferTransformFlags transform, -              const Common::Rectangle<int>& crop_rect); +              const Common::Rectangle<int>& crop_rect, +              std::array<Service::Nvidia::NvFence, 4>& fences, u32 num_fences);      Kernel::KEvent* QueryEvent(u32 event_id) override; diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp index aa112021d..4658f1e8b 100644 --- a/src/core/hle/service/nvflinger/nvflinger.cpp +++ b/src/core/hle/service/nvflinger/nvflinger.cpp @@ -269,17 +269,6 @@ void NVFlinger::Compose() {              return; // We are likely shutting down          } -        auto& syncpoint_manager = system.Host1x().GetSyncpointManager(); -        const auto& multi_fence = buffer.fence; -        guard->unlock(); -        for (u32 fence_id = 0; fence_id < multi_fence.num_fences; fence_id++) { -            const auto& fence = multi_fence.fences[fence_id]; -            syncpoint_manager.WaitGuest(fence.id, fence.value); -        } -        guard->lock(); - -        MicroProfileFlip(); -          // Now send the buffer to the GPU for drawing.          // TODO(Subv): Support more than just disp0. The display device selection is probably based          // on which display we're drawing (Default, Internal, External, etc) @@ -293,8 +282,10 @@ void NVFlinger::Compose() {          nvdisp->flip(igbp_buffer.BufferId(), igbp_buffer.Offset(), igbp_buffer.ExternalFormat(),                       igbp_buffer.Width(), igbp_buffer.Height(), igbp_buffer.Stride(), -                     static_cast<android::BufferTransformFlags>(buffer.transform), crop_rect); +                     static_cast<android::BufferTransformFlags>(buffer.transform), crop_rect, +                     buffer.fence.fences, buffer.fence.num_fences); +        MicroProfileFlip();          guard->lock();          swap_interval = buffer.swap_interval; | 
