From 0acb31be171f01aec8b38ceaddf47b7da6dae2a0 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Wed, 9 Feb 2011 20:42:50 +0100 Subject: [PATCH] st/dri: Fix surfaceless gl using contexts with previous bound surfaces ctx->dPriv might be != NULL then draw which is NULL is accessed: struct dri_drawable *draw = dri_drawable(driDrawPriv); [..] if (ctx->dPriv != driDrawPriv) { ctx->dPriv = driDrawPriv; draw->texture_stamp = driDrawPriv->lastStamp - 1; } --- src/gallium/state_trackers/dri/common/dri_context.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/dri/common/dri_context.c b/src/gallium/state_trackers/dri/common/dri_context.c index 3d5d24e692c..999b41152e1 100644 --- a/src/gallium/state_trackers/dri/common/dri_context.c +++ b/src/gallium/state_trackers/dri/common/dri_context.c @@ -169,6 +169,11 @@ dri_make_current(__DRIcontext * cPriv, ++ctx->bind_count; + if (!driDrawPriv && !driReadPriv) + return ctx->stapi->make_current(ctx->stapi, ctx->st, NULL, NULL); + else if (!driDrawPriv || !driReadPriv) + return GL_FALSE; + if (ctx->dPriv != driDrawPriv) { ctx->dPriv = driDrawPriv; draw->texture_stamp = driDrawPriv->lastStamp - 1; @@ -178,8 +183,7 @@ dri_make_current(__DRIcontext * cPriv, read->texture_stamp = driReadPriv->lastStamp - 1; } - ctx->stapi->make_current(ctx->stapi, ctx->st, - (draw) ? &draw->base : NULL, (read) ? &read->base : NULL); + ctx->stapi->make_current(ctx->stapi, ctx->st, &draw->base, &read->base); return GL_TRUE; } -- 2.30.2