Signed-off-by: Adam Jackson <a...@redhat.com> --- glx/vndcmds.c | 2 ++ glx/vndext.c | 9 +++++++++ glx/vndserver.h | 4 +--- 3 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/glx/vndcmds.c b/glx/vndcmds.c index c3e1332bf0..493e2bfc04 100644 --- a/glx/vndcmds.c +++ b/glx/vndcmds.c @@ -472,6 +472,8 @@ void GlxDispatchReset(void) int GlxDispatchRequest(ClientPtr client) { REQUEST(xReq); + if (GlxExtensionEntry->base == 0) + return BadRequest; if (stuff->data < OPCODE_ARRAY_LEN) { if (dispatchFuncs[stuff->data] == NULL) { // Try to find a dispatch stub. diff --git a/glx/vndext.c b/glx/vndext.c index cef306a400..d7936467be 100644 --- a/glx/vndext.c +++ b/glx/vndext.c @@ -39,6 +39,7 @@ #include <GL/glxproto.h> #include "vndservervendor.h" +ExtensionEntry *GlxExtensionEntry; int GlxErrorBase = 0; static CallbackListRec vndInitCallbackList; static CallbackListPtr vndInitCallbackListPtr = &vndInitCallbackList; @@ -202,6 +203,7 @@ void GlxExtensionInit(void) { ExtensionEntry *extEntry; + GlxExtensionEntry = NULL; // Init private keys, per-screen data if (!dixRegisterPrivateKey(&glvXGLVScreenPrivKey, PRIVATE_SCREEN, 0)) @@ -228,8 +230,15 @@ GlxExtensionInit(void) return; } + GlxExtensionEntry = extEntry; GlxErrorBase = extEntry->errorBase; CallCallbacks(&vndInitCallbackListPtr, extEntry); + + /* We'd better have found at least one vendor */ + for (int i = 0; i < screenInfo.numScreens; i++) + if (GlxGetVendorForScreen(serverClient, screenInfo.screens[i])) + return; + extEntry->base = 0; } static int diff --git a/glx/vndserver.h b/glx/vndserver.h index 12297349c4..a175656ae7 100644 --- a/glx/vndserver.h +++ b/glx/vndserver.h @@ -62,9 +62,7 @@ typedef struct GlxClientPrivRec { extern int GlxErrorBase; extern RESTYPE idResource; -// Defined in glxext.c. -const ExtensionEntry *GlxGetExtensionEntry(void); - +extern ExtensionEntry *GlxExtensionEntry; Bool GlxDispatchInit(void); void GlxDispatchReset(void); -- 2.17.0 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel