summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2017-05-26 15:28:05 -0400
committerAdam Jackson <ajax@redhat.com>2017-06-16 15:47:58 -0400
commit3169843ccd596c63751cd51297d7fec4da1c2020 (patch)
treeb661734a41ae56667bd0c59622710fdc76673e49
parente93c950ed7adc5fefb9dbe09798b6e3e885a69c6 (diff)
wip: wire up si backend for vfbglxfe
-rw-r--r--glx/glxext.c132
-rw-r--r--hw/vfb/meson.build1
2 files changed, 78 insertions, 55 deletions
diff --git a/glx/glxext.c b/glx/glxext.c
index 2eb596cdb..f872b2ebe 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -46,6 +46,7 @@
#include "glxext.h"
#include "indirect_table.h"
#include "indirect_util.h"
+#include "glxfe.h"
/*
** X resources.
@@ -60,7 +61,6 @@ static DevPrivateKeyRec glxClientPrivateKeyRec;
/*
** Forward declarations.
*/
-static int __glXDispatch(ClientPtr);
static GLboolean __glXFreeContext(__GLXcontext * cx);
/*
@@ -223,18 +223,16 @@ __glXErrorOccured(void)
return errorOccured;
}
-static ExtensionEntry *GLXExtensionEntry;
-
int
__glXError(int error)
{
- return GLXExtensionEntry->errorBase + error;
+ return GlxExtension->errorBase + error;
}
int
__glXEvent(int event)
{
- return GLXExtensionEntry->eventBase + event;
+ return GlxExtension->eventBase + event;
}
__GLXclientState *
@@ -322,13 +320,80 @@ GetGLXDrawableBytes(void *value, XID id, ResourceSizePtr size)
}
}
+/* "sample implementation" */
+static int
+siGlxDispatch(ClientPtr client)
+{
+ REQUEST(xGLXSingleReq);
+ CARD8 opcode;
+ __GLXdispatchSingleProcPtr proc;
+ __GLXclientState *cl;
+ int retval;
+
+ opcode = stuff->glxCode;
+ cl = glxGetClient(client);
+
+ /*
+ ** Use the opcode to index into the procedure table.
+ */
+ proc = __glXGetProtocolDecodeFunction(&Single_dispatch_info, opcode,
+ client->swapped);
+ if (proc != NULL) {
+ retval = (*proc) (cl, (GLbyte *) stuff);
+ }
+ else {
+ retval = BadRequest;
+ }
+
+ return retval;
+}
+
+static const GlxBackend siGlxBackend = {
+ /* Dispatched to every backend */
+ .ClientInfo = siGlxDispatch,
+ .SetClientInfoARB = siGlxDispatch,
+ .SetClientInfo2ARB = siGlxDispatch,
+
+ /* Dispatched to one backend */
+ .Render = siGlxDispatch,
+ .RenderLarge = siGlxDispatch,
+ .CreateContext = siGlxDispatch,
+ .DestroyContext = siGlxDispatch,
+ .MakeCurrent = siGlxDispatch,
+ .IsDirect = siGlxDispatch,
+ .WaitGL = siGlxDispatch,
+ .WaitX = siGlxDispatch,
+ .CopyContext = siGlxDispatch,
+ .SwapBuffers = siGlxDispatch,
+ .UseXFont = siGlxDispatch,
+ .CreateGLXPixmap = siGlxDispatch,
+ .GetVisualConfigs = siGlxDispatch,
+ .DestroyGLXPixmap = siGlxDispatch,
+ .VendorPrivate = siGlxDispatch,
+ .QueryExtensionsString = siGlxDispatch,
+ .QueryServerString = siGlxDispatch,
+ .GetFBConfigs = siGlxDispatch,
+ .CreatePixmap = siGlxDispatch,
+ .DestroyPixmap = siGlxDispatch,
+ .CreateNewContext = siGlxDispatch,
+ .QueryContext = siGlxDispatch,
+ .MakeContextCurrent = siGlxDispatch,
+ .CreatePbuffer = siGlxDispatch,
+ .DestroyPbuffer = siGlxDispatch,
+ .GetDrawableAttributes = siGlxDispatch,
+ .ChangeDrawableAttributes = siGlxDispatch,
+ .CreateWindow = siGlxDispatch,
+ .DestroyWindow = siGlxDispatch,
+ .CreateContextAttribsARB = siGlxDispatch,
+ .Single = siGlxDispatch,
+};
+
/*
** Initialize the GLX extension.
*/
void
-GlxExtensionInit(void)
+GlxBackendInit(void)
{
- ExtensionEntry *extEntry;
ScreenPtr pScreen;
int i;
__GLXprovider *p, **stack;
@@ -367,12 +432,12 @@ GlxExtensionInit(void)
glxScreen = p->screenProbe(pScreen);
if (glxScreen != NULL) {
+ GlxSetBackend(pScreen, &siGlxBackend);
LogMessage(X_INFO,
"GLX: Initialized %s GL provider for screen %d\n",
p->name, i);
break;
}
-
}
if (!p)
@@ -382,25 +447,12 @@ GlxExtensionInit(void)
glx_provided = True;
}
- /* don't register extension if GL is not provided on any screen */
- if (!glx_provided)
- return;
-
- /*
- ** Add extension to server extensions.
- */
- extEntry = AddExtension(GLX_EXTENSION_NAME, __GLX_NUMBER_EVENTS,
- __GLX_NUMBER_ERRORS, __glXDispatch,
- __glXDispatch, ResetExtension, StandardMinorOpcode);
- if (!extEntry) {
- FatalError("__glXExtensionInit: AddExtensions failed\n");
- return;
- }
-
- GLXExtensionEntry = extEntry;
+ /* don't register hooks if GL is not provided on any screen */
+ if (glx_provided) {
#if PRESENT
- __glXregisterPresentCompleteNotify();
+ __glXregisterPresentCompleteNotify();
#endif
+ }
}
/************************************************************************/
@@ -480,33 +532,3 @@ void *__glGetProcAddress(const char *proc)
return ret ? ret : (void *) NoopDDA;
}
-
-/*
-** Top level dispatcher; all commands are executed from here down.
-*/
-static int
-__glXDispatch(ClientPtr client)
-{
- REQUEST(xGLXSingleReq);
- CARD8 opcode;
- __GLXdispatchSingleProcPtr proc;
- __GLXclientState *cl;
- int retval;
-
- opcode = stuff->glxCode;
- cl = glxGetClient(client);
-
- /*
- ** Use the opcode to index into the procedure table.
- */
- proc = __glXGetProtocolDecodeFunction(&Single_dispatch_info, opcode,
- client->swapped);
- if (proc != NULL) {
- retval = (*proc) (cl, (GLbyte *) stuff);
- }
- else {
- retval = BadRequest;
- }
-
- return retval;
-}
diff --git a/hw/vfb/meson.build b/hw/vfb/meson.build
index 6566b4590..c796fe7c5 100644
--- a/hw/vfb/meson.build
+++ b/hw/vfb/meson.build
@@ -15,6 +15,7 @@ executable(
libxserver,
libxserver_xkb_stubs,
libxserver_xi_stubs,
+ libglxfe,
libxserver_glx
],
install: true,