Commit a7c01c62 by Corentin Wallez

Add an angle_link_glx that can be used for debugging

This replaces the dlsyming of glX entry point with linking to libGL which in trun allows the ANGLE to be traced using apitrace. Re-land with a trivial compilation fix (MEMBER vs MEMEBER) BUG=angleproject:892 Change-Id: Ie89b6fe26eb80d3d8d48f49645d7a6254230bf5c Reviewed-on: https://chromium-review.googlesource.com/287143Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Tested-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent 819d9bc2
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
'angle_enable_d3d11%': 0, 'angle_enable_d3d11%': 0,
'angle_enable_gl%': 0, 'angle_enable_gl%': 0,
'angle_enable_hlsl%': 0, 'angle_enable_hlsl%': 0,
'angle_link_glx%': 0,
'conditions': 'conditions':
[ [
['OS=="win"', ['OS=="win"',
......
...@@ -108,6 +108,7 @@ bool FunctionsGLX::initialize(Display *xDisplay, int screen, std::string *errorS ...@@ -108,6 +108,7 @@ bool FunctionsGLX::initialize(Display *xDisplay, int screen, std::string *errorS
mXDisplay = xDisplay; mXDisplay = xDisplay;
mXScreen = screen; mXScreen = screen;
#if !defined(ANGLE_LINK_GLX)
// Some OpenGL implementations can't handle having this library // Some OpenGL implementations can't handle having this library
// handle closed while there's any X window still open against // handle closed while there's any X window still open against
// which a GLXWindow was ever created. // which a GLXWindow was ever created.
...@@ -131,25 +132,33 @@ bool FunctionsGLX::initialize(Display *xDisplay, int screen, std::string *errorS ...@@ -131,25 +132,33 @@ bool FunctionsGLX::initialize(Display *xDisplay, int screen, std::string *errorS
*errorString = "Could not retrieve glXGetProcAddress"; *errorString = "Could not retrieve glXGetProcAddress";
return false; return false;
} }
#else
getProc = reinterpret_cast<PFNGETPROCPROC>(glXGetProcAddress);
#endif
#define GET_PROC_OR_ERROR(MEMBER, NAME) \ #define GET_PROC_OR_ERROR(MEMBER, NAME) \
if (!GetProc(getProc, MEMBER, NAME)) \ if (!GetProc(getProc, MEMBER, #NAME)) \
{ \ { \
*errorString = "Could not load GLX entry point " NAME; \ *errorString = "Could not load GLX entry point " #NAME; \
return false; \ return false; \
} }
#if !defined(ANGLE_LINK_GLX)
#define GET_FNPTR_OR_ERROR(MEMBER, NAME) GET_PROC_OR_ERROR(MEMBER, NAME)
#else
#define GET_FNPTR_OR_ERROR(MEMBER, NAME) *MEMBER = NAME;
#endif
// GLX 1.0 // GLX 1.0
GET_PROC_OR_ERROR(&mFnPtrs->destroyContextPtr, "glXDestroyContext"); GET_FNPTR_OR_ERROR(&mFnPtrs->destroyContextPtr, glXDestroyContext);
GET_PROC_OR_ERROR(&mFnPtrs->makeCurrentPtr, "glXMakeCurrent"); GET_FNPTR_OR_ERROR(&mFnPtrs->makeCurrentPtr, glXMakeCurrent);
GET_PROC_OR_ERROR(&mFnPtrs->swapBuffersPtr, "glXSwapBuffers"); GET_FNPTR_OR_ERROR(&mFnPtrs->swapBuffersPtr, glXSwapBuffers);
GET_PROC_OR_ERROR(&mFnPtrs->queryExtensionPtr, "glXQueryExtension"); GET_FNPTR_OR_ERROR(&mFnPtrs->queryExtensionPtr, glXQueryExtension);
GET_PROC_OR_ERROR(&mFnPtrs->queryVersionPtr, "glXQueryVersion"); GET_FNPTR_OR_ERROR(&mFnPtrs->queryVersionPtr, glXQueryVersion);
GET_PROC_OR_ERROR(&mFnPtrs->waitXPtr, "glXWaitX"); GET_FNPTR_OR_ERROR(&mFnPtrs->waitXPtr, glXWaitX);
GET_PROC_OR_ERROR(&mFnPtrs->waitGLPtr, "glXWaitGL"); GET_FNPTR_OR_ERROR(&mFnPtrs->waitGLPtr, glXWaitGL);
// GLX 1.1 // GLX 1.1
GET_PROC_OR_ERROR(&mFnPtrs->queryExtensionsStringPtr, "glXQueryExtensionsString"); GET_FNPTR_OR_ERROR(&mFnPtrs->queryExtensionsStringPtr, glXQueryExtensionsString);
// Check we have a working GLX // Check we have a working GLX
{ {
...@@ -183,20 +192,20 @@ bool FunctionsGLX::initialize(Display *xDisplay, int screen, std::string *errorS ...@@ -183,20 +192,20 @@ bool FunctionsGLX::initialize(Display *xDisplay, int screen, std::string *errorS
angle::SplitStringAlongWhitespace(extensions, &mExtensions); angle::SplitStringAlongWhitespace(extensions, &mExtensions);
// GLX 1.3 // GLX 1.3
GET_PROC_OR_ERROR(&mFnPtrs->getFBConfigsPtr, "glXGetFBConfigs"); GET_FNPTR_OR_ERROR(&mFnPtrs->getFBConfigsPtr, glXGetFBConfigs);
GET_PROC_OR_ERROR(&mFnPtrs->chooseFBConfigPtr, "glXChooseFBConfig"); GET_FNPTR_OR_ERROR(&mFnPtrs->chooseFBConfigPtr, glXChooseFBConfig);
GET_PROC_OR_ERROR(&mFnPtrs->getFBConfigAttribPtr, "glXGetFBConfigAttrib"); GET_FNPTR_OR_ERROR(&mFnPtrs->getFBConfigAttribPtr, glXGetFBConfigAttrib);
GET_PROC_OR_ERROR(&mFnPtrs->getVisualFromFBConfigPtr, "glXGetVisualFromFBConfig"); GET_FNPTR_OR_ERROR(&mFnPtrs->getVisualFromFBConfigPtr, glXGetVisualFromFBConfig);
GET_PROC_OR_ERROR(&mFnPtrs->createWindowPtr, "glXCreateWindow"); GET_FNPTR_OR_ERROR(&mFnPtrs->createWindowPtr, glXCreateWindow);
GET_PROC_OR_ERROR(&mFnPtrs->destroyWindowPtr, "glXDestroyWindow"); GET_FNPTR_OR_ERROR(&mFnPtrs->destroyWindowPtr, glXDestroyWindow);
GET_PROC_OR_ERROR(&mFnPtrs->createPbufferPtr, "glXCreatePbuffer"); GET_FNPTR_OR_ERROR(&mFnPtrs->createPbufferPtr, glXCreatePbuffer);
GET_PROC_OR_ERROR(&mFnPtrs->destroyPbufferPtr, "glXDestroyPbuffer"); GET_FNPTR_OR_ERROR(&mFnPtrs->destroyPbufferPtr, glXDestroyPbuffer);
GET_PROC_OR_ERROR(&mFnPtrs->queryDrawablePtr, "glXQueryDrawable"); GET_FNPTR_OR_ERROR(&mFnPtrs->queryDrawablePtr, glXQueryDrawable);
// Extensions // Extensions
if (hasExtension("GLX_ARB_create_context")) if (hasExtension("GLX_ARB_create_context"))
{ {
GET_PROC_OR_ERROR(&mFnPtrs->createContextAttribsARBPtr, "glXCreateContextAttribsARB"); GET_PROC_OR_ERROR(&mFnPtrs->createContextAttribsARBPtr, glXCreateContextAttribsARB);
} }
else else
{ {
...@@ -204,13 +213,14 @@ bool FunctionsGLX::initialize(Display *xDisplay, int screen, std::string *errorS ...@@ -204,13 +213,14 @@ bool FunctionsGLX::initialize(Display *xDisplay, int screen, std::string *errorS
} }
if (hasExtension("GLX_EXT_swap_control")) if (hasExtension("GLX_EXT_swap_control"))
{ {
GET_PROC_OR_ERROR(&mFnPtrs->swapIntervalEXTPtr, "glXSwapIntervalEXT"); GET_PROC_OR_ERROR(&mFnPtrs->swapIntervalEXTPtr, glXSwapIntervalEXT);
} }
else else
{ {
mFnPtrs->swapIntervalEXTPtr = nullptr; mFnPtrs->swapIntervalEXTPtr = nullptr;
} }
#undef GET_FNPTR_OR_ERROR
#undef GET_PROC_OR_ERROR #undef GET_PROC_OR_ERROR
*errorString = ""; *errorString = "";
......
...@@ -729,6 +729,20 @@ ...@@ -729,6 +729,20 @@
{ {
'msvs_enable_winphone' : '1', 'msvs_enable_winphone' : '1',
}], }],
['angle_link_glx==1',
{
'link_settings':
{
'libraries':
[
'-lGL',
],
},
'defines':
[
'ANGLE_LINK_GLX',
],
}],
], ],
}, },
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment