swpipe: Fix memory pointer scope issue

* Store stVisual in each context
This commit is contained in:
Alexander von Gluck IV
2012-12-06 03:59:38 +00:00
parent 969609f0ef
commit cb44a2a6ef
+16 -8
View File
@@ -73,10 +73,14 @@ hgl_viewport(struct gl_context* glContext, GLint x, GLint y,
} }
static void static st_visual*
hgl_fill_st_visual(st_visual* stVisual, gl_config* glVisual) hgl_fill_st_visual(gl_config* glVisual)
{ {
memset(stVisual, 0, sizeof(*stVisual)); struct st_visual* stVisual = CALLOC_STRUCT(st_visual);
if (!stVisual) {
ERROR("%s: Couldn't allocate st_visual\n", __func__);
return NULL;
}
// Determine color format // Determine color format
if (glVisual->redBits == 8) { if (glVisual->redBits == 8) {
@@ -129,6 +133,8 @@ hgl_fill_st_visual(st_visual* stVisual, gl_config* glVisual)
if (glVisual->haveDepthBuffer || glVisual->haveStencilBuffer) if (glVisual->haveDepthBuffer || glVisual->haveStencilBuffer)
stVisual->buffer_mask |= ST_ATTACHMENT_DEPTH_STENCIL_MASK; stVisual->buffer_mask |= ST_ATTACHMENT_DEPTH_STENCIL_MASK;
return stVisual;
} }
@@ -292,11 +298,10 @@ GalliumContext::CreateContext(Bitmap *bitmap)
TRACE("stencilBits :\t%d\n", glVisual->stencilBits); TRACE("stencilBits :\t%d\n", glVisual->stencilBits);
// Convert Mesa calculated visual into state tracker visual // Convert Mesa calculated visual into state tracker visual
struct st_visual stVisual; context->stVisual = hgl_fill_st_visual(glVisual);
hgl_fill_st_visual(&stVisual, glVisual);
context->draw = new GalliumFramebuffer(&stVisual); context->draw = new GalliumFramebuffer(context->stVisual);
context->read = new GalliumFramebuffer(&stVisual); context->read = new GalliumFramebuffer(context->stVisual);
if (!context->draw || !context->read) { if (!context->draw || !context->read) {
ERROR("%s: Problem allocating framebuffer!\n", __func__); ERROR("%s: Problem allocating framebuffer!\n", __func__);
@@ -312,7 +317,7 @@ GalliumContext::CreateContext(Bitmap *bitmap)
memset(&attribs, 0, sizeof(attribs)); memset(&attribs, 0, sizeof(attribs));
attribs.options.force_glsl_extensions_warn = false; attribs.options.force_glsl_extensions_warn = false;
attribs.profile = ST_PROFILE_DEFAULT; attribs.profile = ST_PROFILE_DEFAULT;
attribs.visual = stVisual; attribs.visual = *context->stVisual;
attribs.major = 1; attribs.major = 1;
attribs.minor = 0; attribs.minor = 0;
//attribs.flags |= ST_CONTEXT_FLAG_DEBUG; //attribs.flags |= ST_CONTEXT_FLAG_DEBUG;
@@ -418,6 +423,9 @@ GalliumContext::DestroyContext(context_id contextID)
if (fContext[contextID]->draw) if (fContext[contextID]->draw)
delete fContext[contextID]->draw; delete fContext[contextID]->draw;
if (fContext[contextID]->stVisual)
FREE(fContext[contextID]->stVisual);
if (fContext[contextID]->manager) if (fContext[contextID]->manager)
FREE(fContext[contextID]->manager); FREE(fContext[contextID]->manager);