--- 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