Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP1:GA
xorg-x11-server.19083
U_glx-Do-not-call-into-Composite-if-it-is-disab...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File U_glx-Do-not-call-into-Composite-if-it-is-disabled.patch of Package xorg-x11-server.19083
Git-commit: 1326ee0bc5eb858c3c00847b3ba65134e4ca2e2d Patch-mainline: Upstream Author: Michal Srb <msrb@suse.com> Subject: glx: Do not call into Composite if it is disabled. References: bnc#1079607 fdo#104993 Otherwise X server crashes if GLX is enabled and Composite disabled. For example the compIsAlternateVisual function will try to lookup CompScreenPtr using the CompScreenPrivateKey, but that was never initialized if Composite is disabled. Fixes: f84e59a4f4. ("glx: Duplicate relevant fbconfigs for compositing visuals") Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104993 Signed-off-by: Michal Srb <msrb@suse.com> --- glx/glxdricommon.c | 63 +++++++++++++++++++++++++++++------------------------- glx/glxscreens.c | 33 +++++++++++++++++----------- 2 files changed, 55 insertions(+), 41 deletions(-) Index: xorg-server-1.19.6/glx/glxdricommon.c =================================================================== --- xorg-server-1.19.6.orig/glx/glxdricommon.c +++ xorg-server-1.19.6/glx/glxdricommon.c @@ -35,6 +35,7 @@ #include <GL/glxtokens.h> #include <GL/internal/dri_interface.h> #include <os.h> +#include "extinit.h" #include "glxserver.h" #include "glxext.h" #include "glxcontext.h" @@ -206,25 +207,27 @@ createModeFromConfig(const __DRIcoreExte config->config.yInverted = GL_TRUE; #ifdef COMPOSITE - /* - * Here we decide what fbconfigs will be duplicated for compositing. - * fgbconfigs marked with duplicatedForConf will be reserved for - * compositing visuals. - * It might look strange to do this decision this late when translation - * from a __DRIConfig is already done, but using the __DRIConfig - * accessor function becomes worse both with respect to code complexity - * and CPU usage. - */ - if (duplicateForComp && - (render_type_is_pbuffer_only(renderType) || - config->config.rgbBits != 32 || - config->config.visualRating != GLX_NONE || - config->config.sampleBuffers != 0)) { - free(config); - return NULL; - } + if (!noCompositeExtension) { + /* + * Here we decide what fbconfigs will be duplicated for compositing. + * fgbconfigs marked with duplicatedForConf will be reserved for + * compositing visuals. + * It might look strange to do this decision this late when translation + * from a __DRIConfig is already done, but using the __DRIConfig + * accessor function becomes worse both with respect to code complexity + * and CPU usage. + */ + if (duplicateForComp && + (render_type_is_pbuffer_only(renderType) || + config->config.rgbBits != 32 || + config->config.visualRating != GLX_NONE || + config->config.sampleBuffers != 0)) { + free(config); + return NULL; + } - config->config.duplicatedForComp = duplicateForComp; + config->config.duplicatedForComp = duplicateForComp; + } #endif return &config->config; @@ -258,14 +261,16 @@ glxConvertConfigs(const __DRIcoreExtensi } #ifdef COMPOSITE - /* Duplicate fbconfigs for use with compositing visuals */ - for (i = 0; configs[i]; i++) { - tail->next = createModeFromConfig(core, configs[i], GLX_TRUE_COLOR, - GL_TRUE); - if (tail->next == NULL) - continue; + if (!noCompositeExtension) { + /* Duplicate fbconfigs for use with compositing visuals */ + for (i = 0; configs[i]; i++) { + tail->next = createModeFromConfig(core, configs[i], GLX_TRUE_COLOR, + GL_TRUE); + if (tail->next == NULL) + continue; - tail = tail->next; + tail = tail->next; + } } #endif Index: xorg-server-1.19.6/glx/glxscreens.c =================================================================== --- xorg-server-1.19.6.orig/glx/glxscreens.c +++ xorg-server-1.19.6/glx/glxscreens.c @@ -38,6 +38,7 @@ #include <os.h> #include <colormapst.h> +#include "extinit.h" #include "privates.h" #include "glxserver.h" #include "glxutil.h" @@ -279,10 +280,12 @@ pickFBConfig(__GLXscreen * pGlxScreen, V if (config->visualID != 0) continue; #ifdef COMPOSITE - /* Use only duplicated configs for compIsAlternateVisuals */ - if (!!compIsAlternateVisual(pGlxScreen->pScreen, visual->vid) != - !!config->duplicatedForComp) - continue; + if (!noCompositeExtension) { + /* Use only duplicated configs for compIsAlternateVisuals */ + if (!!compIsAlternateVisual(pGlxScreen->pScreen, visual->vid) != + !!config->duplicatedForComp) + continue; + } #endif /* * If possible, use the same swapmethod for all built-in visual @@ -352,8 +355,10 @@ __glXScreenInit(__GLXscreen * pGlxScreen pGlxScreen->visuals[pGlxScreen->numVisuals++] = config; config->visualID = visual->vid; #ifdef COMPOSITE - if (compIsAlternateVisual(pScreen, visual->vid)) - config->visualSelectGroup++; + if (!noCompositeExtension) { + if (compIsAlternateVisual(pScreen, visual->vid)) + config->visualSelectGroup++; + } #endif } } @@ -375,10 +380,12 @@ __glXScreenInit(__GLXscreen * pGlxScreen */ depth = config->redBits + config->greenBits + config->blueBits; #ifdef COMPOSITE - if (config->duplicatedForComp) { - depth += config->alphaBits; - config->visualSelectGroup++; - } + if (!noCompositeExtension) { + if (config->duplicatedForComp) { + depth += config->alphaBits; + config->visualSelectGroup++; + } + } #endif /* Make sure that our FBconfig's depth can actually be displayed * (corresponds to an existing visual). @@ -403,8 +410,10 @@ __glXScreenInit(__GLXscreen * pGlxScreen continue; #ifdef COMPOSITE - if (config->duplicatedForComp) - (void) CompositeRegisterAlternateVisuals(pScreen, &visual->vid, 1); + if (!noCompositeExtension) { + if (config->duplicatedForComp) + (void) CompositeRegisterAlternateVisuals(pScreen, &visual->vid, 1); + } #endif pGlxScreen->visuals[pGlxScreen->numVisuals++] = config; initGlxVisual(visual, config);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor