glx/drisw: avoid segfaults when we fail to get visual

piglit glx-tfp segfaults on llvmpipe when run vs a 16-bit radeon screen,

it now fails instead of segfaulting, much prettier.

Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2012-03-23 18:37:16 +00:00
parent 0f3aa9f4bd
commit 2c778375a1
1 changed files with 9 additions and 2 deletions

View File

@ -91,6 +91,9 @@ XCreateDrawable(struct drisw_drawable * pdp,
visMask = VisualIDMask;
pdp->visinfo = XGetVisualInfo(dpy, visMask, &visTemp, &num_visuals);
if (!pdp->visinfo || num_visuals == 0)
return False;
/* create XImage */
pdp->ximage = XCreateImage(dpy,
pdp->visinfo->visual,
@ -513,7 +516,7 @@ driswCreateDrawable(struct glx_screen *base, XID xDrawable,
struct drisw_drawable *pdp;
__GLXDRIconfigPrivate *config = (__GLXDRIconfigPrivate *) modes;
struct drisw_screen *psc = (struct drisw_screen *) base;
Bool ret;
const __DRIswrastExtension *swrast = psc->swrast;
pdp = Xmalloc(sizeof(*pdp));
@ -525,7 +528,11 @@ driswCreateDrawable(struct glx_screen *base, XID xDrawable,
pdp->base.drawable = drawable;
pdp->base.psc = &psc->base;
XCreateDrawable(pdp, psc->base.dpy, xDrawable, modes->visualID);
ret = XCreateDrawable(pdp, psc->base.dpy, xDrawable, modes->visualID);
if (!ret) {
Xfree(pdp);
return NULL;
}
/* Create a new drawable */
pdp->driDrawable =