From ce0ad53281f236424a72ae021f293a3a5ca69217 Mon Sep 17 00:00:00 2001 From: "RALOVICH, Kristóf" Date: Thu, 23 Jul 2009 17:03:54 +0200 Subject: glx: cache DRI configs in __GLXscreenConfigsRec --- src/glx/x11/glxclient.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/glx') diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h index bf68d0f8910..2778ad878e7 100644 --- a/src/glx/x11/glxclient.h +++ b/src/glx/x11/glxclient.h @@ -501,6 +501,8 @@ struct __GLXscreenConfigsRec { __GLXDRIscreen *driScreen; + const __DRIconfig** driver_configs; + #ifdef __DRI_COPY_SUB_BUFFER const __DRIcopySubBufferExtension *driCopySubBuffer; #endif -- cgit v1.2.3 From e32b601e7d79e8fa67b3e9f636125eebc01f3884 Mon Sep 17 00:00:00 2001 From: "RALOVICH, Kristóf" Date: Thu, 23 Jul 2009 17:04:52 +0200 Subject: glx: properly release DRI configs Release per screen DRI driver configs during screen destruction. --- src/glx/x11/glxext.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/glx') diff --git a/src/glx/x11/glxext.c b/src/glx/x11/glxext.c index b296b7c651c..3078662c9da 100644 --- a/src/glx/x11/glxext.c +++ b/src/glx/x11/glxext.c @@ -149,6 +149,12 @@ FreeScreenConfigs(__GLXdisplayPrivate * priv) Xfree((char *) psc->serverGLXexts); #ifdef GLX_DIRECT_RENDERING + if (psc->driver_configs) { + for(unsigned int i = 0; psc->driver_configs[i]; i++) + free((__DRIconfig*)psc->driver_configs[i]); + free(psc->driver_configs); + psc->driver_configs = NULL; + } if (psc->driScreen) { psc->driScreen->destroyScreen(psc); __glxHashDestroy(psc->drawHash); -- cgit v1.2.3 From 82f4dc21cc5bce9e64fd53d158f7162770e9b652 Mon Sep 17 00:00:00 2001 From: "RALOVICH, Kristóf" Date: Thu, 23 Jul 2009 17:05:43 +0200 Subject: glx: assign per screen driver configs (DRI2) --- src/glx/x11/dri2_glx.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/glx') diff --git a/src/glx/x11/dri2_glx.c b/src/glx/x11/dri2_glx.c index fb31898db2d..c5635a94ab6 100644 --- a/src/glx/x11/dri2_glx.c +++ b/src/glx/x11/dri2_glx.c @@ -481,6 +481,8 @@ static __GLXDRIscreen *dri2CreateScreen(__GLXscreenConfigs *psc, int screen, psc->configs = driConvertConfigs(psc->core, psc->configs, driver_configs); psc->visuals = driConvertConfigs(psc->core, psc->visuals, driver_configs); + psc->driver_configs = driver_configs; + psp->destroyScreen = dri2DestroyScreen; psp->createContext = dri2CreateContext; psp->createDrawable = dri2CreateDrawable; -- cgit v1.2.3 From d090ba9e00c7c7893109ae763385c2e0a66eb16f Mon Sep 17 00:00:00 2001 From: "RALOVICH, Kristóf" Date: Thu, 23 Jul 2009 17:05:50 +0200 Subject: glx: assign per screen driver configs (DRI) --- src/glx/x11/dri_glx.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/glx') diff --git a/src/glx/x11/dri_glx.c b/src/glx/x11/dri_glx.c index ac2eb05341a..d24471c4369 100644 --- a/src/glx/x11/dri_glx.c +++ b/src/glx/x11/dri_glx.c @@ -418,6 +418,8 @@ CallCreateNewScreen(Display *dpy, int scrn, __GLXscreenConfigs *psc, psc->configs = driConvertConfigs(psc->core, psc->configs, driver_configs); psc->visuals = driConvertConfigs(psc->core, psc->visuals, driver_configs); + psc->driver_configs = driver_configs; + /* Visuals with depth != screen depth are subject to automatic compositing * in the X server, so DRI1 can't render to them properly. Mark them as * non-conformant to prevent apps from picking them up accidentally. -- cgit v1.2.3 From 45f4e8842e3dae9d8be2a38769a57a524fdc335f Mon Sep 17 00:00:00 2001 From: "RALOVICH, Kristóf" Date: Thu, 23 Jul 2009 17:05:59 +0200 Subject: glx: assign per screen driver configs (DRISW) --- src/glx/x11/drisw_glx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/glx') diff --git a/src/glx/x11/drisw_glx.c b/src/glx/x11/drisw_glx.c index 1c229dde900..15e15866582 100644 --- a/src/glx/x11/drisw_glx.c +++ b/src/glx/x11/drisw_glx.c @@ -401,7 +401,7 @@ driCreateScreen(__GLXscreenConfigs * psc, int screen, psc->configs = driConvertConfigs(psc->core, psc->configs, driver_configs); psc->visuals = driConvertConfigs(psc->core, psc->visuals, driver_configs); - free(driver_configs); + psc->driver_configs = driver_configs; psp->destroyScreen = driDestroyScreen; psp->createContext = driCreateContext; -- cgit v1.2.3