Browse Source

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.
tags/pre-merge-glsl-compiler-1
Jerome Glisse 18 years ago
parent
commit
6dd967e74f
1 changed files with 3 additions and 1 deletions
  1. 3
    1
      src/mesa/shader/program.c

+ 3
- 1
src/mesa/shader/program.c View File



/* bind newProg */ /* bind newProg */
if (target == GL_VERTEX_PROGRAM_ARB) { /* == GL_VERTEX_PROGRAM_NV */ 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; ctx->VertexProgram.Current = (struct gl_vertex_program *) newProg;
} }
else if (target == GL_FRAGMENT_PROGRAM_NV || else if (target == GL_FRAGMENT_PROGRAM_NV ||
* \note Not compiled into display lists. * \note Not compiled into display lists.
* \note Called by both glDeleteProgramsNV and glDeleteProgramsARB. * \note Called by both glDeleteProgramsNV and glDeleteProgramsARB.
*/ */
void GLAPIENTRY
void GLAPIENTRY
_mesa_DeletePrograms(GLsizei n, const GLuint *ids) _mesa_DeletePrograms(GLsizei n, const GLuint *ids)
{ {
GLint i; GLint i;

Loading…
Cancel
Save