[PATCH 1/4] glx: Remove current context cache
Ian Romanick
idr at freedesktop.org
Tue Oct 8 10:09:49 PDT 2013
Patches 1, 3, and 4 are
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
I sent out separate comments about 2.
On 10/02/2013 02:51 PM, Adam Jackson wrote:
> This is something of a pessimization, since now we'll call the
> provider's MakeCurrent hook more often. But that's correct, since the
> provider might have a current GL context itself (think glamor), so while
> this cache might be useful it should be done down in the provider
> itself.
>
> Reviewed-by: Eric Anholt <eric at anholt.net>
> Signed-off-by: Adam Jackson <ajax at redhat.com>
> ---
> glx/glxcmds.c | 13 -------------
> glx/glxcontext.h | 2 --
> glx/glxdri.c | 1 -
> glx/glxdri2.c | 1 -
> glx/glxdriswrast.c | 1 -
> glx/glxext.c | 25 +------------------------
> glx/glxext.h | 1 -
> glx/glxserver.h | 4 ----
> hw/dmx/glxProxy/global.c | 6 ------
> hw/dmx/glxProxy/glxcmds.c | 4 ----
> hw/dmx/glxProxy/glxext.c | 13 -------------
> hw/dmx/glxProxy/glxext.h | 1 -
> hw/dmx/glxProxy/glxserver.h | 6 ------
> 13 files changed, 1 insertion(+), 77 deletions(-)
>
> diff --git a/glx/glxcmds.c b/glx/glxcmds.c
> index 5b7a628..663448a 100644
> --- a/glx/glxcmds.c
> +++ b/glx/glxcmds.c
> @@ -187,16 +187,9 @@ validGlxDrawable(ClientPtr client, XID id, int type, int access_mode,
> return TRUE;
> }
>
> -void
> -__glXContextDestroy(__GLXcontext * context)
> -{
> - __glXFlushContextCache();
> -}
> -
> static void
> __glXdirectContextDestroy(__GLXcontext * context)
> {
> - __glXContextDestroy(context);
> free(context);
> }
>
> @@ -438,10 +431,6 @@ static void
> StopUsingContext(__GLXcontext * glxc)
> {
> if (glxc) {
> - if (glxc == __glXLastContext) {
> - /* Tell server GL library */
> - __glXLastContext = 0;
> - }
> glxc->isCurrent = GL_FALSE;
> if (!glxc->idExists) {
> FreeResourceByType(glxc->id, __glXContextRes, FALSE);
> @@ -453,7 +442,6 @@ static void
> StartUsingContext(__GLXclientState * cl, __GLXcontext * glxc)
> {
> glxc->isCurrent = GL_TRUE;
> - __glXLastContext = glxc;
> }
>
> /**
> @@ -627,7 +615,6 @@ DoMakeCurrent(__GLXclientState * cl,
> if (!(*prevglxc->loseCurrent) (prevglxc)) {
> return __glXError(GLXBadContext);
> }
> - __glXFlushContextCache();
> if (!prevglxc->isDirect) {
> prevglxc->drawPriv = NULL;
> prevglxc->readPriv = NULL;
> diff --git a/glx/glxcontext.h b/glx/glxcontext.h
> index 4764e56..96a4dd2 100644
> --- a/glx/glxcontext.h
> +++ b/glx/glxcontext.h
> @@ -124,8 +124,6 @@ struct __GLXcontext {
> __GLXdrawable *readPriv;
> };
>
> -void __glXContextDestroy(__GLXcontext * context);
> -
> extern int validGlxScreen(ClientPtr client, int screen,
> __GLXscreen ** pGlxScreen, int *err);
>
> diff --git a/glx/glxdri.c b/glx/glxdri.c
> index 1ac6839..f146c7c 100644
> --- a/glx/glxdri.c
> +++ b/glx/glxdri.c
> @@ -295,7 +295,6 @@ __glXDRIcontextDestroy(__GLXcontext * baseContext)
> context->hwContextID);
> __glXleaveServer(GL_FALSE);
>
> - __glXContextDestroy(&context->base);
> free(context);
> }
>
> diff --git a/glx/glxdri2.c b/glx/glxdri2.c
> index 8a1fa41..19caeed 100644
> --- a/glx/glxdri2.c
> +++ b/glx/glxdri2.c
> @@ -261,7 +261,6 @@ __glXDRIcontextDestroy(__GLXcontext * baseContext)
> __GLXDRIscreen *screen = (__GLXDRIscreen *) context->base.pGlxScreen;
>
> (*screen->core->destroyContext) (context->driContext);
> - __glXContextDestroy(&context->base);
> free(context);
> }
>
> diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c
> index b478398..861e97c 100644
> --- a/glx/glxdriswrast.c
> +++ b/glx/glxdriswrast.c
> @@ -137,7 +137,6 @@ __glXDRIcontextDestroy(__GLXcontext * baseContext)
> __GLXDRIscreen *screen = (__GLXDRIscreen *) context->base.pGlxScreen;
>
> (*screen->core->destroyContext) (context->driContext);
> - __glXContextDestroy(&context->base);
> free(context);
> }
>
> diff --git a/glx/glxext.c b/glx/glxext.c
> index bc7fe82..1bb884f 100644
> --- a/glx/glxext.c
> +++ b/glx/glxext.c
> @@ -48,12 +48,6 @@
> #include "indirect_util.h"
>
> /*
> -** The last context used by the server. It is the context that is current
> -** from the server's perspective.
> -*/
> -__GLXcontext *__glXLastContext;
> -
> -/*
> ** X resources.
> */
> RESTYPE __glXContextRes;
> @@ -79,7 +73,6 @@ static int __glXDispatch(ClientPtr);
> static void
> ResetExtension(ExtensionEntry * extEntry)
> {
> - __glXFlushContextCache();
> }
>
> /*
> @@ -141,8 +134,6 @@ DrawableGone(__GLXdrawable * glxPriv, XID xid)
> if (c->isCurrent && (c->drawPriv == glxPriv || c->readPriv == glxPriv)) {
> (*c->loseCurrent) (c);
> c->isCurrent = GL_FALSE;
> - if (c == __glXLastContext)
> - __glXFlushContextCache();
> }
> if (c->drawPriv == glxPriv)
> c->drawPriv = NULL;
> @@ -201,9 +192,6 @@ __glXFreeContext(__GLXcontext * cx)
>
> free(cx->feedbackBuf);
> free(cx->selectBuf);
> - if (cx == __glXLastContext) {
> - __glXFlushContextCache();
> - }
>
> __glXRemoveFromContextList(cx);
>
> @@ -396,12 +384,6 @@ GlxExtensionInit(void)
>
> /************************************************************************/
>
> -void
> -__glXFlushContextCache(void)
> -{
> - __glXLastContext = 0;
> -}
> -
> /*
> ** Make a context the current one for the GL (in this implementation, there
> ** is only one instance of the GL, and we use it to serve all GL clients by
> @@ -439,11 +421,6 @@ __glXForceCurrent(__GLXclientState * cl, GLXContextTag tag, int *error)
> if (cx->wait && (*cx->wait) (cx, cl, error))
> return NULL;
>
> - if (cx == __glXLastContext) {
> - /* No need to re-bind */
> - return cx;
> - }
> -
> /* Make this context the current one for the GL. */
> if (!cx->isDirect) {
> if (!(*cx->makeCurrent) (cx)) {
> @@ -453,7 +430,7 @@ __glXForceCurrent(__GLXclientState * cl, GLXContextTag tag, int *error)
> return 0;
> }
> }
> - __glXLastContext = cx;
> +
> return cx;
> }
>
> diff --git a/glx/glxext.h b/glx/glxext.h
> index 9b0978b..8b62c40 100644
> --- a/glx/glxext.h
> +++ b/glx/glxext.h
> @@ -36,7 +36,6 @@
> */
>
> extern GLboolean __glXFreeContext(__GLXcontext * glxc);
> -extern void __glXFlushContextCache(void);
>
> extern Bool __glXAddContext(__GLXcontext * cx);
> extern void __glXErrorCallBack(GLenum code);
> diff --git a/glx/glxserver.h b/glx/glxserver.h
> index 1021aec..9178537 100644
> --- a/glx/glxserver.h
> +++ b/glx/glxserver.h
> @@ -80,10 +80,6 @@ void GlxSetVisualConfigs(int nconfigs, void *configs, void **privates);
>
> void __glXScreenInitVisuals(__GLXscreen * screen);
>
> -/*
> -** The last context used (from the server's persective) is cached.
> -*/
> -extern __GLXcontext *__glXLastContext;
> extern __GLXcontext *__glXForceCurrent(__GLXclientState *, GLXContextTag,
> int *);
>
> diff --git a/hw/dmx/glxProxy/global.c b/hw/dmx/glxProxy/global.c
> index 6d4612d..9f6e022 100644
> --- a/hw/dmx/glxProxy/global.c
> +++ b/hw/dmx/glxProxy/global.c
> @@ -31,12 +31,6 @@
> #include "glxserver.h"
>
> /*
> -** The last context used by the server. It is the context that is current
> -** from the server's perspective.
> -*/
> -__GLXcontext *__glXLastContext;
> -
> -/*
> ** X resources.
> */
> RESTYPE __glXContextRes;
> diff --git a/hw/dmx/glxProxy/glxcmds.c b/hw/dmx/glxProxy/glxcmds.c
> index 8cdb25e..2220399 100644
> --- a/hw/dmx/glxProxy/glxcmds.c
> +++ b/hw/dmx/glxProxy/glxcmds.c
> @@ -763,10 +763,6 @@ static void
> StopUsingContext(__GLXcontext * glxc)
> {
> if (glxc) {
> - if (glxc == __glXLastContext) {
> - /* Tell server GL library */
> - __glXLastContext = 0;
> - }
> glxc->isCurrent = GL_FALSE;
> if (!glxc->idExists) {
> __glXFreeContext(glxc);
> diff --git a/hw/dmx/glxProxy/glxext.c b/hw/dmx/glxProxy/glxext.c
> index e72a040..e4abd02 100644
> --- a/hw/dmx/glxProxy/glxext.c
> +++ b/hw/dmx/glxProxy/glxext.c
> @@ -59,7 +59,6 @@ static int __glXDispatch(ClientPtr);
> static void
> ResetExtension(ExtensionEntry * extEntry)
> {
> - __glXFlushContextCache();
> __glXScreenReset();
> SwapBarrierReset();
> }
> @@ -274,10 +273,6 @@ __glXFreeContext(__GLXcontext * cx)
>
> free(cx);
>
> - if (cx == __glXLastContext) {
> - __glXFlushContextCache();
> - }
> -
> return GL_TRUE;
> }
>
> @@ -378,14 +373,6 @@ __glXCoreType(void)
>
> /************************************************************************/
>
> -void
> -__glXFlushContextCache(void)
> -{
> - __glXLastContext = 0;
> -}
> -
> -/************************************************************************/
> -
> /*
> ** Top level dispatcher; all commands are executed from here down.
> */
> diff --git a/hw/dmx/glxProxy/glxext.h b/hw/dmx/glxProxy/glxext.h
> index 47cec15..fcdba75 100644
> --- a/hw/dmx/glxProxy/glxext.h
> +++ b/hw/dmx/glxProxy/glxext.h
> @@ -49,7 +49,6 @@ typedef struct {
> } __GLXextensionInfo;
>
> extern GLboolean __glXFreeContext(__GLXcontext * glxc);
> -extern void __glXFlushContextCache(void);
>
> extern void __glXFreeGLXWindow(__glXWindow * pGlxWindow);
> extern void __glXFreeGLXPixmap(__GLXpixmap * pGlxPixmap);
> diff --git a/hw/dmx/glxProxy/glxserver.h b/hw/dmx/glxProxy/glxserver.h
> index ad94966..9fa837c 100644
> --- a/hw/dmx/glxProxy/glxserver.h
> +++ b/hw/dmx/glxProxy/glxserver.h
> @@ -76,12 +76,6 @@ typedef struct __GLXclientStateRec __GLXclientState;
> extern __GLXscreenInfo *__glXActiveScreens;
> extern GLint __glXNumActiveScreens;
>
> -/************************************************************************/
> -
> -/*
> -** The last context used (from the server's persective) is cached.
> -*/
> -extern __GLXcontext *__glXLastContext;
> extern __GLXcontext *__glXForceCurrent(__GLXclientState *, GLXContextTag,
> int *);
>
>
More information about the xorg-devel
mailing list