From 60cbb68f46aecbeda5573fe2734f2fdf89abc40d Mon Sep 17 00:00:00 2001 From: fincs Date: Thu, 30 Aug 2018 00:53:47 +0200 Subject: [PATCH] gfx: use new NvFence waiting code --- nx/include/switch/display/nvgfx.h | 1 - nx/source/display/gfx.c | 19 +++++++------------ nx/source/display/nvgfx.c | 22 ---------------------- 3 files changed, 7 insertions(+), 35 deletions(-) diff --git a/nx/include/switch/display/nvgfx.h b/nx/include/switch/display/nvgfx.h index 215f6f45..f809eeb7 100644 --- a/nx/include/switch/display/nvgfx.h +++ b/nx/include/switch/display/nvgfx.h @@ -3,6 +3,5 @@ Result nvgfxInitialize(void); void nvgfxExit(void); -Result nvgfxEventWait(u32 syncpt_id, u32 threshold, s32 timeout); Result nvgfxSubmitGpfifo(void); Result nvgfxGetFramebuffer(u8 **buffer, size_t *size, u32 *handle); diff --git a/nx/source/display/gfx.c b/nx/source/display/gfx.c index 2ee6d47a..c15f73e4 100644 --- a/nx/source/display/gfx.c +++ b/nx/source/display/gfx.c @@ -96,9 +96,6 @@ static BqGraphicBuffer g_gfx_BufferInitData = { } }; -NvMultiFence debugfence; -Result debugfenceresult; - static Result _gfxDequeueBuffer(void) { if (g_gfxCurrentProducerBuffer >= 0) return 0; @@ -115,15 +112,9 @@ static Result _gfxDequeueBuffer(void) { g_gfx_ProducerSlotsRequested |= BIT(slot); } - debugfence = fence; - for (u32 i = 0; i < fence.num_fences; i ++) { - if ((s32)fence.fences[i].id >= 0) { - // todo: figure out why fencewait sucks - /*rc =*/ debugfenceresult = nvgfxEventWait(fence.fences[i].id, fence.fences[i].value, 0); - //if (R_FAILED(rc)) - // break; - } - } + rc = nvMultiFenceWait(&fence, -1); + if (R_FAILED(rc)) + return rc; if (R_SUCCEEDED(rc)) { g_gfxCurrentProducerBuffer = slot; @@ -220,6 +211,8 @@ Result gfxInitDefault(void) { if (R_SUCCEEDED(rc)) rc = nvInitialize(); + if (R_SUCCEEDED(rc)) rc = nvFenceInit(); + if (R_SUCCEEDED(rc)) rc = nvgfxInitialize(); if (R_SUCCEEDED(rc)) rc = nvgfxGetFramebuffer(&g_gfxFramebuf, &g_gfxFramebufSize, &g_gfxFramebufHandle); @@ -236,6 +229,7 @@ Result gfxInitDefault(void) { } bqDisconnect(&g_gfxBinderSession, NATIVE_WINDOW_API_CPU); nvgfxExit(); + nvFenceExit(); nvExit(); } @@ -278,6 +272,7 @@ void gfxExit(void) } bqDisconnect(&g_gfxBinderSession, NATIVE_WINDOW_API_CPU); nvgfxExit(); + nvFenceExit(); nvExit(); } diff --git a/nx/source/display/nvgfx.c b/nx/source/display/nvgfx.c index f07d76ff..34534a62 100644 --- a/nx/source/display/nvgfx.c +++ b/nx/source/display/nvgfx.c @@ -19,7 +19,6 @@ typedef struct { static bool g_nvgfxInitialized; static u32 g_nvgfx_fd_nvmap; -static u32 g_nvgfx_fd_nvhostctrl; u32 g_nvgfx_totalframebufs = 2; @@ -76,7 +75,6 @@ Result nvgfxInitialize(void) { return 0; if (R_SUCCEEDED(rc)) rc = nvOpen(&g_nvgfx_fd_nvmap, "/dev/nvmap"); - if (R_SUCCEEDED(rc)) rc = nvOpen(&g_nvgfx_fd_nvhostctrl, "/dev/nvhost-ctrl"); if (R_SUCCEEDED(rc)) rc = nvmapobjInitialize(&nvmap_fb_obj, g_nvgfx_totalframebufs*g_gfx_singleframebuf_size); if (R_SUCCEEDED(rc)) rc = nvmapobjSetup(&nvmap_fb_obj, 0, 0x1, 0x20000, 0); @@ -97,10 +95,6 @@ Result nvgfxInitialize(void) { if (R_FAILED(rc)) { nvmapobjClose(&nvmap_fb_obj); - if (g_nvgfx_fd_nvhostctrl != -1) { - nvClose(g_nvgfx_fd_nvhostctrl); - g_nvgfx_fd_nvhostctrl = -1; - } if (g_nvgfx_fd_nvmap != -1) { nvClose(g_nvgfx_fd_nvmap); g_nvgfx_fd_nvmap = -1; @@ -118,10 +112,6 @@ void nvgfxExit(void) { return; nvmapobjClose(&nvmap_fb_obj); - if (g_nvgfx_fd_nvhostctrl != -1) { - nvClose(g_nvgfx_fd_nvhostctrl); - g_nvgfx_fd_nvhostctrl = -1; - } if (g_nvgfx_fd_nvmap != -1) { nvClose(g_nvgfx_fd_nvmap); g_nvgfx_fd_nvmap = -1; @@ -130,18 +120,6 @@ void nvgfxExit(void) { g_nvgfxInitialized = false; } -Result nvgfxEventWait(u32 syncpt_id, u32 threshold, s32 timeout) -{ - Result rc; - - do { - u32 event_res; - rc = nvioctlNvhostCtrl_EventWait(g_nvgfx_fd_nvhostctrl, syncpt_id, threshold, timeout, 0, &event_res); - } while (rc == MAKERESULT(Module_LibnxNvidia, LibnxNvidiaError_Timeout)); // todo: Fix timeout error - - return rc; -} - Result nvgfxGetFramebuffer(u8 **buffer, size_t *size, u32 *handle) { if (!g_nvgfxInitialized)