From ca3a7f1895c4749f0dc8ebf5c3e7e3a1f232424d Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 29 Aug 2017 21:33:26 -0700 Subject: [PATCH] 3DS: Minor fixes for GPU issues, detect usable cores better --- src/platform/3ds/main.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/platform/3ds/main.c b/src/platform/3ds/main.c index 46ca0380d..048c48a0d 100644 --- a/src/platform/3ds/main.c +++ b/src/platform/3ds/main.c @@ -214,7 +214,9 @@ static void _postAudioBuffer(struct mAVStream* stream, blip_t* left, blip_t* rig static void _drawStart(void) { C3D_FrameBegin(frameLimiter ? 0 : C3D_FRAME_NONBLOCK); - frameCounter = C3D_FrameCounter(0); + // Mark both buffers used to make sure they get cleared + C3D_FrameDrawOn(topScreen[doubleBuffer]); + C3D_FrameDrawOn(bottomScreen[doubleBuffer]); } static void _drawEnd(void) { @@ -257,9 +259,8 @@ static void _guiFinish(void) { } static void _setup(struct mGUIRunner* runner) { - bool isNew3DS = false; - APT_CheckNew3DS(&isNew3DS); - if (isNew3DS && !envIsHomebrew()) { + uint8_t mask; + if (R_SUCCEEDED(svcGetProcessAffinityMask(&mask, CUR_PROCESS_HANDLE, 4)) && mask >= 4) { mCoreConfigSetDefaultIntValue(&runner->config, "threadedVideo", 1); mCoreLoadForeignConfig(runner->core, &runner->config); } @@ -390,6 +391,11 @@ static void _gameUnloaded(struct mGUIRunner* runner) { } } +static void _storeCounter(struct mGUIRunner* runner) { + UNUSED(runner); + frameCounter = C3D_FrameCounter(0); +} + static void _drawTex(struct mCore* core, bool faded) { unsigned screen_w, screen_h; switch (screenMode) { @@ -848,7 +854,7 @@ int main() { .teardown = 0, .gameLoaded = _gameLoaded, .gameUnloaded = _gameUnloaded, - .prepareForFrame = 0, + .prepareForFrame = _storeCounter, .drawFrame = _drawFrame, .drawScreenshot = _drawScreenshot, .paused = _gameUnloaded,