---
 src/mesa/main/shaderobj.c |   23 +++++++++++++++++++++--
 1 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/shaderobj.c b/src/mesa/main/shaderobj.c
index 454007f..8a2e159 100644
--- a/src/mesa/main/shaderobj.c
+++ b/src/mesa/main/shaderobj.c
@@ -110,6 +110,7 @@ _mesa_new_shader(struct gl_context *ctx, GLuint name, 
GLenum type)
    if (shader) {
       shader->Type = type;
       shader->Name = name;
+      shader->UBOCount = 0;
       _mesa_init_shader(ctx, shader);
    }
    return shader;
@@ -296,7 +297,6 @@ _mesa_clear_shader_program_data(struct gl_context *ctx,
    shProg->InfoLog = ralloc_strdup(shProg, "");
 }
 
-
 /**
  * Free all the data that hangs off a shader program object, but not the
  * object itself.
@@ -305,7 +305,7 @@ void
 _mesa_free_shader_program_data(struct gl_context *ctx,
                                struct gl_shader_program *shProg)
 {
-   GLuint i;
+   GLuint i,j;
    gl_shader_type sh;
 
    assert(shProg->Type == GL_SHADER_PROGRAM_MESA);
@@ -348,6 +348,25 @@ _mesa_free_shader_program_data(struct gl_context *ctx,
         shProg->_LinkedShaders[sh] = NULL;
       }
    }
+
+   for (i = 0; i < shProg->IndexedVariableCount; i++) {
+      free(shProg->IndexedUBOVariables[i].Name);
+   }
+   if(shProg->IndexedVariableCount)
+      free(shProg->IndexedUBOVariables);
+   shProg->IndexedVariableCount = 0;
+
+   for (i = 0; i < shProg->UBOCount; i++) {
+      free(shProg->UniformBufferObject[i].Name);
+      for (j = 0; j < shProg->UniformBufferObject[i].NumberOfVariables; j++) {
+         free(shProg->UniformBufferObject[i].Variables[j].Name);
+         ralloc_free(shProg->UniformBufferObject[i].Variables[j].Storage);
+      }
+   }
+
+   if (shProg->UBOCount)
+      free(shProg->UniformBufferObject);
+   shProg->UBOCount = 0;
 }
 
 
-- 
1.7.7

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to