1
// Copyright 2013 Dolphin Emulator Project
2
// Licensed under GPLv2
3
// Refer to the license.txt file included.
5
#include "DriverDetails.h"
6
#include "GLFunctions.h"
11
PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
12
PFNGLUNMAPBUFFERPROC glUnmapBuffer;
13
PFNGLBINDBUFFERRANGEPROC glBindBufferRange;
15
PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
17
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
18
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
19
PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
21
PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
22
PFNGLDELETESYNCPROC glDeleteSync;
23
PFNGLFENCESYNCPROC glFenceSync;
25
PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf;
26
PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
27
PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv;
28
PFNGLBINDSAMPLERPROC glBindSampler;
29
PFNGLDELETESAMPLERSPROC glDeleteSamplers;
30
PFNGLGENSAMPLERSPROC glGenSamplers;
32
PFNGLGETPROGRAMBINARYPROC glGetProgramBinary;
33
PFNGLPROGRAMBINARYPROC glProgramBinary;
34
PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;
36
PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
38
PFNGLRENDERBUFFERSTORAGEMULTISAMPLE glRenderbufferStorageMultisample;
40
PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
41
PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
43
PFNGLBEGINQUERYPROC glBeginQuery;
44
PFNGLENDQUERYPROC glEndQuery;
45
PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv;
46
PFNGLDELETEQUERIESPROC glDeleteQueries;
47
PFNGLGENQUERIESPROC glGenQueries;
52
void LoadFunction(const char *name, void **func)
55
*func = (void*)eglGetProcAddress(name);
58
// Fall back to trying dlsym
59
if (self) // Just in case dlopen fails
60
*func = dlsym(self, name);
63
ERROR_LOG(VIDEO, "Couldn't load function %s", name);
72
self = dlopen(NULL, RTLD_LAZY);
74
LoadFunction("glUnmapBuffer", (void**)&glUnmapBuffer);
76
if (DriverDetails::HasBug(DriverDetails::BUG_ISTEGRA))
78
LoadFunction("glBeginQueryEXT", (void**)&glBeginQuery);
79
LoadFunction("glEndQueryEXT", (void**)&glEndQuery);
80
LoadFunction("glGetQueryObjectuivEXT", (void**)&glGetQueryObjectuiv);
81
LoadFunction("glDeleteQueriesEXT", (void**)&glDeleteQueries);
82
LoadFunction("glGenQueriesEXT", (void**)&glGenQueries);
84
LoadFunction("glMapBufferRangeNV", (void**)&glMapBufferRange);
85
LoadFunction("glBindBufferRangeNV", (void**)&glBindBufferRange);
86
LoadFunction("glBlitFramebufferNV", (void**)&glBlitFramebuffer);
88
LoadFunction("glGenVertexArraysOES", (void**)&glGenVertexArrays);
89
LoadFunction("glDeleteVertexArraysOES", (void**)&glDeleteVertexArrays);
90
LoadFunction("glBindVertexArrayOES", (void**)&glBindVertexArray);
92
LoadFunction("glRenderbufferStorageMultisampleNV", (void**)&glRenderbufferStorageMultisample);
94
LoadFunction("glGetUniformBlockIndexNV", (void**)&glGetUniformBlockIndex);
95
LoadFunction("glUniformBlockBindingNV", (void**)&glUniformBlockBinding);
99
LoadFunction("glBeginQuery", (void**)&glBeginQuery);
100
LoadFunction("glEndQuery", (void**)&glEndQuery);
101
LoadFunction("glGetQueryObjectuiv", (void**)&glGetQueryObjectuiv);
102
LoadFunction("glDeleteQueries", (void**)&glDeleteQueries);
103
LoadFunction("glGenQueries", (void**)&glGenQueries);
105
LoadFunction("glMapBufferRange", (void**)&glMapBufferRange);
106
LoadFunction("glBindBufferRange", (void**)&glBindBufferRange);
107
LoadFunction("glBlitFramebuffer", (void**)&glBlitFramebuffer);
109
LoadFunction("glGenVertexArrays", (void**)&glGenVertexArrays);
110
LoadFunction("glDeleteVertexArrays", (void**)&glDeleteVertexArrays);
111
LoadFunction("glBindVertexArray", (void**)&glBindVertexArray);
113
LoadFunction("glClientWaitSync", (void**)&glClientWaitSync);
114
LoadFunction("glDeleteSync", (void**)&glDeleteSync);
115
LoadFunction("glFenceSync", (void**)&glFenceSync);
117
LoadFunction("glSamplerParameterf", (void**)&glSamplerParameterf);
118
LoadFunction("glSamplerParameteri", (void**)&glSamplerParameteri);
119
LoadFunction("glSamplerParameterfv", (void**)&glSamplerParameterfv);
120
LoadFunction("glBindSampler", (void**)&glBindSampler);
121
LoadFunction("glDeleteSamplers", (void**)&glDeleteSamplers);
122
LoadFunction("glGenSamplers", (void**)&glGenSamplers);
124
LoadFunction("glGetProgramBinary", (void**)&glGetProgramBinary);
125
LoadFunction("glProgramBinary", (void**)&glProgramBinary);
126
LoadFunction("glProgramParameteri", (void**)&glProgramParameteri);
128
LoadFunction("glDrawRangeElements", (void**)&glDrawRangeElements);
130
LoadFunction("glRenderbufferStorageMultisample", (void**)&glRenderbufferStorageMultisample);
132
LoadFunction("glGetUniformBlockIndex", (void**)&glGetUniformBlockIndex);
133
LoadFunction("glUniformBlockBinding", (void**)&glUniformBlockBinding);