added some missing FLUSH_VERTICES calls
authorBrian Paul <brian.paul@tungstengraphics.com>
Sat, 17 Jan 2004 17:33:22 +0000 (17:33 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sat, 17 Jan 2004 17:33:22 +0000 (17:33 +0000)
src/mesa/main/arbprogram.c
src/mesa/main/nvprogram.c
src/mesa/main/program.c

index 56aa61526306ab36d9c1ec8a69efe031159f06bd..ab27e086770ab781334941d7d9d81af2056a31bd 100644 (file)
@@ -56,6 +56,7 @@ _mesa_EnableVertexAttribArrayARB(GLuint index)
       return;
    }
 
+   FLUSH_VERTICES(ctx, _NEW_ARRAY);
    ctx->Array.VertexAttrib[index].Enabled = GL_TRUE;
    ctx->Array._Enabled |= _NEW_ARRAY_ATTRIB(index);
    ctx->Array.NewState |= _NEW_ARRAY_ATTRIB(index);
@@ -74,6 +75,7 @@ _mesa_DisableVertexAttribArrayARB(GLuint index)
       return;
    }
 
+   FLUSH_VERTICES(ctx, _NEW_ARRAY);
    ctx->Array.VertexAttrib[index].Enabled = GL_FALSE;
    ctx->Array._Enabled &= ~_NEW_ARRAY_ATTRIB(index);
    ctx->Array.NewState |= _NEW_ARRAY_ATTRIB(index);
@@ -189,6 +191,8 @@ _mesa_ProgramStringARB(GLenum target, GLenum format, GLsizei len,
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
+   FLUSH_VERTICES(ctx, _NEW_PROGRAM);
+
    if (target == GL_VERTEX_PROGRAM_ARB
        && ctx->Extensions.ARB_vertex_program) {
       struct vertex_program *prog = ctx->VertexProgram.Current;
@@ -241,6 +245,8 @@ _mesa_ProgramEnvParameter4fARB(GLenum target, GLuint index,
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
+   FLUSH_VERTICES(ctx, _NEW_PROGRAM);
+
    if (target == GL_FRAGMENT_PROGRAM_ARB
        && ctx->Extensions.ARB_fragment_program) {
       if (index >= ctx->Const.MaxFragmentProgramEnvParams) {
@@ -296,6 +302,8 @@ _mesa_GetProgramEnvParameterfvARB(GLenum target, GLuint index,
 {
    GET_CURRENT_CONTEXT(ctx);
 
+   FLUSH_VERTICES(ctx, _NEW_PROGRAM);
+
    if (!ctx->_CurrentProgram)
       ASSERT_OUTSIDE_BEGIN_END(ctx);
 
@@ -333,6 +341,8 @@ _mesa_ProgramLocalParameter4fARB(GLenum target, GLuint index,
    struct program *prog;
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
+   FLUSH_VERTICES(ctx, _NEW_PROGRAM);
+
    if ((target == GL_FRAGMENT_PROGRAM_NV
         && ctx->Extensions.NV_fragment_program) ||
        (target == GL_FRAGMENT_PROGRAM_ARB
index d982d3d26139cf7f74af52bcb116f38fde6403f5..d32cb7f2b51608fb898010612e6431b0de45a1ce 100644 (file)
@@ -69,6 +69,8 @@ _mesa_ExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params)
       return;
    }
 
+   FLUSH_VERTICES(ctx, _NEW_PROGRAM);
+
    vprog = (struct vertex_program *)
       _mesa_HashLookup(ctx->Shared->Programs, id);
 
@@ -514,6 +516,8 @@ _mesa_LoadProgramNV(GLenum target, GLuint id, GLsizei len,
       return;
    }
 
+   FLUSH_VERTICES(ctx, _NEW_PROGRAM);
+
    prog = (struct program *) _mesa_HashLookup(ctx->Shared->Programs, id);
 
    if (prog && prog->Target != 0 && prog->Target != target) {
@@ -599,6 +603,7 @@ _mesa_ProgramParameter4fNV(GLenum target, GLuint index,
 
    if (target == GL_VERTEX_PROGRAM_NV && ctx->Extensions.NV_vertex_program) {
       if (index < MAX_NV_VERTEX_PROGRAM_PARAMS) {
+         FLUSH_VERTICES(ctx, _NEW_PROGRAM);
          ASSIGN_4V(ctx->VertexProgram.Parameters[index], x, y, z, w);
       }
       else {
@@ -700,6 +705,8 @@ _mesa_TrackMatrixNV(GLenum target, GLuint address,
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
+   FLUSH_VERTICES(ctx, _NEW_PROGRAM);
+
    if (target == GL_VERTEX_PROGRAM_NV && ctx->Extensions.NV_vertex_program) {
       if (address & 0x3) {
          /* addr must be multiple of four */
@@ -762,6 +769,8 @@ _mesa_ProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte *name,
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
+   FLUSH_VERTICES(ctx, _NEW_PROGRAM);
+
    prog = (struct program *) _mesa_HashLookup(ctx->Shared->Programs, id);
    if (!prog || prog->Target != GL_FRAGMENT_PROGRAM_NV) {
       _mesa_error(ctx, GL_INVALID_OPERATION, "glProgramNamedParameterNV");
index 83bbb20492046b544f7f9ad8611c8192064d0790..aca9be979ddebca618c5177605d4090a09c8e098 100644 (file)
@@ -798,6 +798,9 @@ _mesa_BindProgram(GLenum target, GLuint id)
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
+   /* texture state is dependent on current fragment and vertex programs */
+   FLUSH_VERTICES(ctx, _NEW_PROGRAM | _NEW_TEXTURE);
+
    if ((target == GL_VERTEX_PROGRAM_NV
         && ctx->Extensions.NV_vertex_program) ||
        (target == GL_VERTEX_PROGRAM_ARB
@@ -899,7 +902,7 @@ _mesa_DeletePrograms(GLsizei n, const GLuint *ids)
 {
    GLint i;
    GET_CURRENT_CONTEXT(ctx);
-   ASSERT_OUTSIDE_BEGIN_END(ctx);
+   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
    if (n < 0) {
       _mesa_error( ctx, GL_INVALID_VALUE, "glDeleteProgramsNV" );