From 13ed7b6cd434b795464c102c6c51863d96bcb071 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Mon, 14 Apr 2025 08:11:23 +0200 Subject: [PATCH] yes --- Sources/Backends/OpenGL/EGL/EGLInstance.c | 37 +-------------------- Tests/main.c | 39 +++++++++++++++++++++++ Tests/xmake.lua | 2 ++ 3 files changed, 42 insertions(+), 36 deletions(-) diff --git a/Sources/Backends/OpenGL/EGL/EGLInstance.c b/Sources/Backends/OpenGL/EGL/EGLInstance.c index e9203f5..079d756 100644 --- a/Sources/Backends/OpenGL/EGL/EGLInstance.c +++ b/Sources/Backends/OpenGL/EGL/EGLInstance.c @@ -12,13 +12,6 @@ static PulseLibModule egl_lib_module = PULSE_NULL_LIB_MODULE; static uint32_t loader_references_count = 0; -#define CheckEgl(instance)\ - do { \ - EGLint err = instance->eglGetError(); \ - if(err != EGL_SUCCESS) \ - fprintf(stderr, "EGL Error: 0x%04x at %s:%d\n", err, __FILE__, __LINE__); \ - } while(0) - static bool EGLLoadFunctions(EGLInstance* instance) { #ifdef PULSE_PLAT_WINDOWS @@ -32,6 +25,7 @@ static bool EGLLoadFunctions(EGLInstance* instance) }; #endif + for(size_t i = 0; i < sizeof(libnames) / sizeof(const char*); i++) { if(loader_references_count == 0) @@ -73,10 +67,8 @@ bool EGLLoadOpenGLContext(EGLInstance* instance, EGLDisplay* display, EGLDeviceE *display = instance->eglGetPlatformDisplayEXT(EGL_PLATFORM_DEVICE_EXT, device, PULSE_NULLPTR); else *display = instance->eglGetDisplay(EGL_DEFAULT_DISPLAY); - CheckEgl(instance); if(display == EGL_NO_DISPLAY || !instance->eglInitialize(*display, PULSE_NULLPTR, PULSE_NULLPTR)) return false; - CheckEgl(instance); EGLint attribs[] = { EGL_RENDERABLE_TYPE, es_context ? EGL_OPENGL_ES3_BIT : EGL_OPENGL_BIT, @@ -85,16 +77,13 @@ bool EGLLoadOpenGLContext(EGLInstance* instance, EGLDisplay* display, EGLDeviceE }; EGLint num_configs; instance->eglChooseConfig(*display, attribs, config, 1, &num_configs); - CheckEgl(instance); instance->eglBindAPI(es_context ? EGL_OPENGL_ES_API : EGL_OPENGL_API); - CheckEgl(instance); EGLint pbufferAttribs[] = { EGL_WIDTH, 1, EGL_HEIGHT, 1, EGL_NONE }; *surface = instance->eglCreatePbufferSurface(*display, *config, pbufferAttribs); - CheckEgl(instance); if(es_context) { EGLint ctx_attribs[] = { @@ -102,7 +91,6 @@ bool EGLLoadOpenGLContext(EGLInstance* instance, EGLDisplay* display, EGLDeviceE EGL_NONE }; *context = instance->eglCreateContext(*display, *config, EGL_NO_CONTEXT, ctx_attribs); - CheckEgl(instance); } else { @@ -113,28 +101,20 @@ bool EGLLoadOpenGLContext(EGLInstance* instance, EGLDisplay* display, EGLDeviceE EGL_NONE }; *context = instance->eglCreateContext(*display, *config, EGL_NO_CONTEXT, ctx_attribs); - CheckEgl(instance); } if(*context == EGL_NO_CONTEXT) { instance->eglDestroySurface(*display, *surface); - CheckEgl(instance); instance->eglTerminate(*display); - CheckEgl(instance); return false; } if(!instance->eglMakeCurrent(*display, *surface, *surface, *context)) { - CheckEgl(instance); instance->eglDestroySurface(*display, *surface); - CheckEgl(instance); instance->eglDestroyContext(display, *context); - CheckEgl(instance); instance->eglTerminate(*display); - CheckEgl(instance); return false; } - CheckEgl(instance); return true; } @@ -154,11 +134,9 @@ bool EGLLoadInstance(EGLInstance* instance, const char** extensions, uint32_t ex uint64_t best_device_score = 0; instance->eglQueryDevicesEXT(0, PULSE_NULLPTR, &device_count); - CheckEgl(instance); devices = (EGLDeviceEXT*)calloc(device_count, sizeof(EGLDeviceEXT)); PULSE_CHECK_ALLOCATION_RETVAL(devices, false); instance->eglQueryDevicesEXT(device_count, devices, &device_count); - CheckEgl(instance); for(int32_t i = 0; i < device_count; i++) { @@ -170,22 +148,15 @@ bool EGLLoadInstance(EGLInstance* instance, const char** extensions, uint32_t ex continue; PFNGLGETINTEGERI_VPROC glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)instance->eglGetProcAddress("glGetIntegeri_v"); - CheckEgl(instance); PFNGLGETINTEGERVPROC glGetIntegerv = (PFNGLGETINTEGERVPROC)instance->eglGetProcAddress("glGetIntegerv"); - CheckEgl(instance); PFNGLGETSTRINGPROC glGetString = (PFNGLGETSTRINGPROC)instance->eglGetProcAddress("glGetString"); - CheckEgl(instance); PFNGLGETSTRINGIPROC glGetStringi = (PFNGLGETSTRINGIPROC)instance->eglGetProcAddress("glGetStringi"); - CheckEgl(instance); if(!glGetIntegeri_v || !glGetIntegerv || !glGetString || !glGetStringi) { instance->eglDestroySurface(display, surface); - CheckEgl(instance); instance->eglDestroyContext(display, context); - CheckEgl(instance); instance->eglTerminate(display); - CheckEgl(instance); continue; } @@ -247,11 +218,8 @@ bool EGLLoadInstance(EGLInstance* instance, const char** extensions, uint32_t ex current_device_score += max_texture_size; instance->eglDestroySurface(display, surface); - CheckEgl(instance); instance->eglDestroyContext(display, context); - CheckEgl(instance); instance->eglTerminate(display); - CheckEgl(instance); if(extensions_found_count != extensions_count) current_device_score = 0; @@ -273,11 +241,8 @@ void EGLUnloadInstance(EGLInstance* instance) { PULSE_CHECK_PTR(instance); instance->eglDestroySurface(instance->display, instance->surface); - CheckEgl(instance); instance->eglDestroyContext(instance->display, instance->context); - CheckEgl(instance); instance->eglTerminate(instance->display); - CheckEgl(instance); loader_references_count--; if(loader_references_count != 0) diff --git a/Tests/main.c b/Tests/main.c index bf1a921..760f05d 100644 --- a/Tests/main.c +++ b/Tests/main.c @@ -37,6 +37,41 @@ } #endif +#ifdef WINTRACE + #include + #include + + LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS* ExceptionInfo) + { + fprintf(stderr, "Exception occurred!\n"); + PrintStackTrace(); + return EXCEPTION_EXECUTE_HANDLER; + } + + void PrintStackTrace() + { + // Initialize symbols + HANDLE process = GetCurrentProcess(); + SymInitialize(process, NULL, TRUE); + + // Capture stack backtrace + void* stack[62]; + USHORT frames = CaptureStackBackTrace(0, 62, stack, NULL); + + SYMBOL_INFO* symbol = (SYMBOL_INFO*)calloc(sizeof(SYMBOL_INFO) + 256 * sizeof(char), 1); + symbol->MaxNameLen = 255; + symbol->SizeOfStruct = sizeof(SYMBOL_INFO); + + for(USHORT i = 0; i < frames; i++) + { + SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol); + fprintf(stderr, "[%d] %s - 0x%0llX\n", i, symbol->Name, symbol->Address); + } + + free(symbol); + } +#endif + extern void TestBackend(); extern void TestDevice(); extern void TestBuffer(); @@ -51,6 +86,10 @@ int main(void) signal(SIGABRT, SignalHandler); #endif + #ifdef WINTRACE + SetUnhandledExceptionFilter(ExceptionHandler); + #endif + UNITY_BEGIN(); TestBackend(); TestDevice(); diff --git a/Tests/xmake.lua b/Tests/xmake.lua index 144d6db..8d262ef 100644 --- a/Tests/xmake.lua +++ b/Tests/xmake.lua @@ -204,6 +204,8 @@ for name, module in pairs(tests) do add_packages("libbacktrace") set_extension(".x86_64") add_defines("BACKTRACE") + elseif is_plat("windows") then + add_defines("WINTRACE") end target_end() end