From e08b851c79ae9a7fc0a2066e49110dc7fb426bce Mon Sep 17 00:00:00 2001 From: Peter Fors Date: Mon, 28 Apr 2025 22:19:43 +0200 Subject: reverted rewrite of ppu, optimized what functions should be forced inline, gained ~2.5% performance --- base/opengl_loader.c | 210 --------------------------------------------------- 1 file changed, 210 deletions(-) delete mode 100644 base/opengl_loader.c (limited to 'base/opengl_loader.c') diff --git a/base/opengl_loader.c b/base/opengl_loader.c deleted file mode 100644 index 36d2444..0000000 --- a/base/opengl_loader.c +++ /dev/null @@ -1,210 +0,0 @@ -#ifdef _WIN32 -typedef __int64 GLintptr; -#else -typedef intptr_t GLintptr; -#endif -typedef void GLvoid; -typedef unsigned char GLboolean; -typedef unsigned char GLubyte; -typedef char GLchar; - -typedef int GLint; -typedef int GLsizei; - -typedef unsigned int GLenum; -typedef unsigned int GLuint; -typedef unsigned int GLbitfield; - -typedef float GLfloat; -typedef double GLdouble; - -typedef unsigned long long GLsizeiptr; - -#define GL_NO_ERROR 0 -#define GL_INFO_LOG_LENGTH 0x8b84 -#define GL_ZERO 0x0000 -#define GL_ONE 0x0001 -#define GL_ALPHA 0x1906 -#define GL_BLEND 0x0be2 -#define GL_CLAMP_TO_EDGE 0x812f -#define GL_COLOR_BUFFER_BIT 0x4000 -#define GL_COMPILE_STATUS 0x8b81 -#define GL_DEPTH_TEST 0x0b71 -#define GL_FRAMEBUFFER_SRGB 0x8db9 -#define GL_FRAGMENT_SHADER 0x8b30 -#define GL_LINK_STATUS 0x8b82 -#define GL_MODELVIEW 0x1700 -#define GL_NEAREST 0x2600 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_PROJECTION 0x1701 -#define GL_QUADS 0x0007 -#define GL_RGBA 0x1908 -#define GL_RGBA8 0x8058 -#define GL_SCISSOR_TEST 0x0c11 -#define GL_SRGB8_ALPHA8 0x8c43 -#define GL_SRC_ALPHA 0x0302 -#define GL_TEXTURE0 0x84c0 -#define GL_TEXTURE_2D 0x0de1 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_VERTEX_SHADER 0x8b31 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_STATIC_DRAW 0x88e4 -#define GL_FLOAT 0x1406 -#define GL_FALSE 0 -#define GL_TRUE 1 -#define GL_LINEAR 0x2601 -#define GL_FUNC_ADD 0x8006 -#define GL_CULL_FACE 0x0b44 -#define GL_STREAM_DRAW 0x88e0 -#define GL_WRITE_ONLY 0x88b9 -#define GL_TRIANGLES 0x0004 -#define GL_UNSIGNED_INT 0x1405 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_MULTISAMPLE 0x809d -#define GL_DYNAMIC_DRAW 0x88e8 -#define GL_RED 0x1903 -#define GL_FRAMEBUFFER_WIDTH 0x9310 -#define GL_FRAMEBUFFER_HEIGHT 0x9311 -#define GL_VIEWPORT 0x0ba2 -#define GL_PIXEL_UNPACK_BUFFER 0x88ec -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88ef -#define GL_VERTEX_ARRAY_BINDING 0x85b5 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_CURRENT_PROGRAM 0x8b8d -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_SRGB_ALPHA 0x8c43 -#define GL_UNPACK_ROW_LENGTH 0x0cf2 -#define GL_UNPACK_SKIP_PIXELS 0x0cf4 -#define GL_UNPACK_SKIP_ROWS 0x0cf3 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8646 - -#define DECLARE_GL_FUNCTION(Name, ReturnType, ...) typedef ReturnType (*type_##Name)(__VA_ARGS__); -#define DECLARE_GLOBAL_FUNCTION(Name, ...) type_##Name Name; - -#define GL_FUNCTIONS(X) \ - X(glActiveTexture, void, GLenum texture) \ - X(glAttachShader, void, GLuint program, GLuint shader) \ - X(glBindBuffer, void, GLenum target, GLuint buffer) \ - X(glBindTexture, void, GLenum target, GLuint texture) \ - X(glBufferData, void, GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage) \ - X(glClear, void, GLbitfield mask) \ - X(glClearColor, void, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) \ - X(glCompileShader, void, GLuint shader) \ - X(glCreateProgram, GLuint) \ - X(glCreateShader, GLuint, GLenum type) \ - X(glDeleteShader, void, GLuint shader) \ - X(glDrawElements, void, GLenum mode, GLsizei count, GLenum type, const GLvoid *indices) \ - X(glEnableVertexAttribArray, void, GLuint index) \ - X(glGenBuffers, void, GLsizei n, GLuint *buffers) \ - X(glGenTextures, void, GLsizei n, GLuint *textures) \ - X(glGetShaderInfoLog, void, GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog) \ - X(glGetShaderiv, void, GLuint shader, GLenum pname, GLint *params) \ - X(glGetUniformLocation, GLint, GLuint program, const GLchar *name) \ - X(glLinkProgram, void, GLuint program) \ - X(glShaderSource, void, GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length) \ - X(glTexImage2D, void, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) \ - X(glTexParameteri, void, GLenum target, GLenum pname, GLint param) \ - X(glTexSubImage2D, void, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) \ - X(glUniform1f, void, GLint location, GLfloat v0) \ - X(glUniform1i, void, GLint location, GLint v0) \ - X(glUniform2f, void, GLint location, GLfloat v0, GLfloat v1) \ - X(glUniform4f, void, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \ - X(glUseProgram, void, GLuint program) \ - X(glVertexAttribPointer, void, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer) \ - X(glViewport, void, GLint x, GLint y, GLsizei width, GLsizei height) \ - X(glDeleteProgram, void, GLuint program) \ - X(glDeleteBuffers, void, GLsizei n, const GLuint *buffers) \ - X(glDeleteTextures, void, GLsizei n, const GLuint *textures) \ - X(glEnable, void, GLenum cap) \ - X(glGenerateMipmap, void, GLenum target) \ - X(glGetProgramiv, void, GLuint program, GLenum pname, GLint *params) \ - X(glGetAttribLocation, GLint, GLuint program, const GLchar *name) \ - X(glDetachShader, void, GLuint program, GLuint shader) \ - X(glUniformMatrix4fv, void, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \ - X(glMapBuffer, void*, GLenum target, GLenum access) \ - X(glUnmapBuffer, GLboolean, GLenum target) \ - X(glBlendEquation, void, GLenum mode) \ - X(glBlendFunc, void, GLenum sfactor, GLenum dfactor) \ - X(glDisable, void, GLenum cap) \ - X(glScissor, void, GLint x, GLint y, GLsizei width, GLsizei height) \ - X(glTexCoord2f, void, GLfloat s, GLfloat t) \ - X(glVertex2f, void, GLfloat x, GLfloat y) \ - X(glGetError, GLenum) \ - X(glGetProgramInfoLog, void, GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog) \ - X(glGenVertexArrays, void, GLsizei n, GLuint *arrays) \ - X(glBindVertexArray, void, GLuint array) \ - X(glDeleteVertexArrays, void, GLsizei n, const GLuint *arrays) \ - X(glDrawArrays, void, GLenum mode, GLint first, GLsizei count) \ - X(glBufferSubData, void, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data) \ - X(glDisableVertexAttribArray, void, GLuint index) \ - X(glGetIntegerv, void, GLenum pname, GLint *data) \ - X(glBindAttribLocation, void, GLuint program, GLuint index, const GLchar *name) \ - X(glGetUniformfv, void, GLuint program, GLint location, GLfloat *params) \ - X(glPixelStorei, void, GLenum pname, GLint param) \ - X(glGetVertexAttribiv, void, GLuint index, GLenum pname, GLint *params) \ - X(glFinish, void) - -GL_FUNCTIONS(DECLARE_GL_FUNCTION) -GL_FUNCTIONS(DECLARE_GLOBAL_FUNCTION) - - -#if defined(_WIN32) -static void *get_any_gl_address(const char *name) { - void *p = (void *)wglGetProcAddress(name); - if(!p) { - HMODULE module = LoadLibraryA("opengl32.dll"); - if(module) { - p = (void *)GetProcAddress(module, name); - } - } - return p; -} - -#define GetOpenGLFunction(Name, ...) \ - *(void **)&Name = (void *)get_any_gl_address(#Name); \ - if(!Name) { \ - DEBUG_PRINT("Failed to load OpenGL function: %s\n", #Name); \ - exit(EXIT_FAILURE); \ - } - -#elif defined(__linux__) -#include -static void *glXGetProcAddress(const GLubyte *procName) { - static void *(*glxGetProcAddress)(const GLubyte *); - if(!glxGetProcAddress) { - void *libGL = dlopen("libGL.so.1", RTLD_LAZY | RTLD_GLOBAL); - if(!libGL) { - DEBUG_PRINT("Error: Unable to load libGL.so.1\n"); - exit(EXIT_FAILURE); - } - glxGetProcAddress = dlsym(libGL, "glXGetProcAddress"); - if(!glxGetProcAddress) { - DEBUG_PRINT("Error: Unable to find glXGetProcAddress\n"); - exit(EXIT_FAILURE); - } - } - return glxGetProcAddress(procName); -} - -#define GetOpenGLFunction(Name, ...) \ - *(void **)&Name = (void *)glXGetProcAddress((const GLubyte *)#Name); \ - if(!Name) { \ - DEBUG_PRINT("Failed to load OpenGL function: %s\n", #Name); \ - exit(EXIT_FAILURE); \ - } -#endif - -__attribute__((cold, noinline, section(".init_section"))) -static void gl_loader() { - GL_FUNCTIONS(GetOpenGLFunction); -}; \ No newline at end of file -- cgit v1.2.3