Cocoa Port: Fix crashes and improve stability.

- Fixes a crash that can occur on startup or when modifying the Video Pixel Scaler in Preferences. Fixes #321. (Regression from commit 0663661.)
- Fixes a crash on startup where write+execute privileges returned by mprotect() are not supported when compiled against the macOS v10.15 SDK or later. Fixes #335.
- Fixes a possible crash that can occur if an invalid ID is sent when trying to set the 3D Rendering Engine. Maybe fixes #342.
This commit is contained in:
rogerman 2021-08-26 16:09:50 -07:00
parent 92cb90f433
commit 64cbba2e24
3 changed files with 22 additions and 5 deletions

View File

@ -1,7 +1,7 @@
/* /*
Copyright (C) 2006 yopyop Copyright (C) 2006 yopyop
Copyright (C) 2011 Loren Merritt Copyright (C) 2011 Loren Merritt
Copyright (C) 2012-2017 DeSmuME team Copyright (C) 2012-2021 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -31,8 +31,14 @@
#include <errno.h> #include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <stddef.h> #include <stddef.h>
// The static code buffer relies on write+execute privileges provided by mprotect(),
// which isn't supported by the macOS v10.15 SDK and later, as well as Apple's other
// modern operating systems. Therefore, we are disabling this on all Apple systems
// for now.
#ifndef __APPLE__
#define HAVE_STATIC_CODE_BUFFER #define HAVE_STATIC_CODE_BUFFER
#endif #endif
#endif
#include "utils/bits.h" #include "utils/bits.h"
#include "utils/AsmJit/AsmJit.h" #include "utils/AsmJit/AsmJit.h"

View File

@ -5613,7 +5613,7 @@ OGLImage::~OGLImage()
} }
delete this->_vf; delete this->_vf;
free(_vfMasterDstBuffer); free_aligned(_vfMasterDstBuffer);
} }
bool OGLImage::GetFiltersPreferGPU() bool OGLImage::GetFiltersPreferGPU()
@ -6090,7 +6090,7 @@ void OGLImage::SetCPUPixelScalerOGL(const VideoFilterTypeID filterID)
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0);
_vfMasterDstBuffer = newMasterBuffer; _vfMasterDstBuffer = newMasterBuffer;
free(oldMasterBuffer); free_aligned(oldMasterBuffer);
} }
this->_vf->ChangeFilterByID(filterID); this->_vf->ChangeFilterByID(filterID);

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2013-2018 DeSmuME team Copyright (C) 2013-2021 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -36,11 +36,13 @@
#import "userinterface/MacMetalDisplayView.h" #import "userinterface/MacMetalDisplayView.h"
#endif #endif
#define GPU_3D_RENDERER_COUNT 3
#ifdef BOOL #ifdef BOOL
#undef BOOL #undef BOOL
#endif #endif
GPU3DInterface *core3DList[] = { GPU3DInterface *core3DList[GPU_3D_RENDERER_COUNT+1] = {
&gpu3DNull, &gpu3DNull,
&gpu3DRasterize, &gpu3DRasterize,
&gpu3Dgl, &gpu3Dgl,
@ -394,6 +396,15 @@ public:
- (void) setRender3DRenderingEngine:(NSInteger)rendererID - (void) setRender3DRenderingEngine:(NSInteger)rendererID
{ {
if (rendererID < CORE3DLIST_NULL)
{
rendererID = CORE3DLIST_NULL;
}
else if (rendererID > GPU_3D_RENDERER_COUNT)
{
rendererID = CORE3DLIST_SWRASTERIZE;
}
gpuEvent->ApplyRender3DSettingsLock(); gpuEvent->ApplyRender3DSettingsLock();
GPU->Set3DRendererByID(rendererID); GPU->Set3DRendererByID(rendererID);
gpuEvent->ApplyRender3DSettingsUnlock(); gpuEvent->ApplyRender3DSettingsUnlock();