From bbf185fdcc8060bc1dccf96b22f1d68bc6d023bf Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 19 Nov 2021 23:02:33 +1100 Subject: [PATCH] Add register dumping for Darwin ARM64, simplify opengl function loading code slightly --- src/Logger.c | 6 ++++++ src/Window_Carbon.c | 4 +--- src/Window_Win.c | 7 +++++-- src/Window_X11.c | 3 +-- src/_WindowBase.h | 1 - src/interop_cocoa.m | 4 +--- 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/Logger.c b/src/Logger.c index c5cdf4f51..ad3c8c87c 100644 --- a/src/Logger.c +++ b/src/Logger.c @@ -457,6 +457,12 @@ static void PrintRegisters(cc_string* str, void* ctx) { #elif defined __x86_64__ #define REG_GET(reg, ign) &r->__ss.__r##reg Dump_X64() +#elif defined __aarch64__ + #define REG_GNUM(num) &r->__ss.__x[num] + #define REG_GET_SP() &r->__ss.__sp + #define REG_GET_IP() &r->__ss.__pc + /* TODO this reads invalid memory */ + Dump_ARM64() #elif defined __arm__ #define REG_GNUM(num) &r->__ss.__r[num] #define REG_GET(reg, ign) &r->__ss.__ ## reg diff --git a/src/Window_Carbon.c b/src/Window_Carbon.c index 0d06148cd..ad77125e8 100644 --- a/src/Window_Carbon.c +++ b/src/Window_Carbon.c @@ -798,11 +798,9 @@ void GLContext_Free(void) { void* GLContext_GetAddress(const char* function) { static const cc_string glPath = String_FromConst("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"); static void* lib; - void* addr; if (!lib) lib = DynamicLib_Load2(&glPath); - addr = DynamicLib_Get2(lib, function); - return GLContext_IsInvalidAddress(addr) ? NULL : addr; + return DynamicLib_Get2(lib, function); } cc_bool GLContext_SwapBuffers(void) { diff --git a/src/Window_Win.c b/src/Window_Win.c index f9251e103..9b72dfa1b 100644 --- a/src/Window_Win.c +++ b/src/Window_Win.c @@ -651,16 +651,19 @@ void GLContext_Free(void) { ctx_handle = NULL; } +/* https://www.khronos.org/opengl/wiki/Load_OpenGL_Functions#Windows */ +#define GLContext_IsInvalidAddress(ptr) (ptr == (void*)0 || ptr == (void*)1 || ptr == (void*)-1 || ptr == (void*)2) + void* GLContext_GetAddress(const char* function) { static const cc_string glPath = String_FromConst("OPENGL32.dll"); static void* lib; + void* addr = (void*)wglGetProcAddress(function); if (!GLContext_IsInvalidAddress(addr)) return addr; /* Some drivers return NULL from wglGetProcAddress for core OpenGL functions */ if (!lib) lib = DynamicLib_Load2(&glPath); - addr = DynamicLib_Get2(lib, function); - return GLContext_IsInvalidAddress(addr) ? NULL : addr; + return DynamicLib_Get2(lib, function); } cc_bool GLContext_SwapBuffers(void) { diff --git a/src/Window_X11.c b/src/Window_X11.c index 7b96ce1f4..895a2bf1b 100644 --- a/src/Window_X11.c +++ b/src/Window_X11.c @@ -1159,8 +1159,7 @@ void GLContext_Free(void) { } void* GLContext_GetAddress(const char* function) { - void* addr = (void*)glXGetProcAddress((const GLubyte*)function); - return GLContext_IsInvalidAddress(addr) ? NULL : addr; + return (void*)glXGetProcAddress((const GLubyte*)function); } cc_bool GLContext_SwapBuffers(void) { diff --git a/src/_WindowBase.h b/src/_WindowBase.h index 5e8cc230d..4acd278ec 100644 --- a/src/_WindowBase.h +++ b/src/_WindowBase.h @@ -99,7 +99,6 @@ static void InitGraphicsMode(struct GraphicsMode* m) { #ifdef CC_BUILD_GL /* OpenGL contexts are heavily tied to the window, so for simplicitly are also included here */ /* EGL is window system agnostic, other OpenGL context backends are tied to one windowing system. */ -#define GLContext_IsInvalidAddress(ptr) (ptr == (void*)0 || ptr == (void*)1 || ptr == (void*)-1 || ptr == (void*)2) void GLContext_GetAll(const struct DynamicLibSym* syms, int count) { int i; diff --git a/src/interop_cocoa.m b/src/interop_cocoa.m index 0f1c7eef1..a05ba6e33 100644 --- a/src/interop_cocoa.m +++ b/src/interop_cocoa.m @@ -606,11 +606,9 @@ void GLContext_Free(void) { void* GLContext_GetAddress(const char* function) { static const cc_string glPath = String_FromConst("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"); static void* lib; - void* addr; if (!lib) lib = DynamicLib_Load2(&glPath); - addr = DynamicLib_Get2(lib, function); - return GLContext_IsInvalidAddress(addr) ? NULL : addr; + return DynamicLib_Get2(lib, function); } cc_bool GLContext_SwapBuffers(void) {