From: Jerome Glisse Date: Sun, 14 Jan 2007 13:49:36 +0000 (+0100) Subject: mesa: Update _Current ptr along Current when a new vertex program is bind. X-Git-Tag: 062012170305~19956 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6dd967e74ff4cb03220d5785bd583203464d299d;p=profile%2Fivi%2Fmesa.git mesa: Update _Current ptr along Current when a new vertex program is bind. On new vertex program bind only the Current ptr where updated to point to the new program; this could lead to _Current pointing to and out of date or even a no more existing program which in turn could lead to a segfault in some driver. To avoid this _Current ptr is updated along Current if _Current where previously pointing to the same program. --- diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c index ddfad47..6db62f5 100644 --- a/src/mesa/shader/program.c +++ b/src/mesa/shader/program.c @@ -1947,6 +1947,8 @@ _mesa_BindProgram(GLenum target, GLuint id) /* bind newProg */ if (target == GL_VERTEX_PROGRAM_ARB) { /* == GL_VERTEX_PROGRAM_NV */ + if (ctx->VertexProgram._Current == ctx->VertexProgram.Current) + ctx->VertexProgram._Current = (struct gl_vertex_program *) newProg; ctx->VertexProgram.Current = (struct gl_vertex_program *) newProg; } else if (target == GL_FRAGMENT_PROGRAM_NV || @@ -1969,7 +1971,7 @@ _mesa_BindProgram(GLenum target, GLuint id) * \note Not compiled into display lists. * \note Called by both glDeleteProgramsNV and glDeleteProgramsARB. */ -void GLAPIENTRY +void GLAPIENTRY _mesa_DeletePrograms(GLsizei n, const GLuint *ids) { GLint i;