mesa: Branch 'glsl-compiler-1' - 7 commits
Brian Paul
brianp at kemper.freedesktop.org
Mon Mar 26 15:08:22 UTC 2007
src/mesa/main/context.c | 1 +
src/mesa/shader/program.c | 4 +++-
src/mesa/shader/shader_api.c | 16 ++++++++++++++++
src/mesa/shader/shader_api.h | 3 +++
src/mesa/shader/slang/slang_codegen.c | 10 +++-------
src/mesa/shader/slang/slang_compile.c | 15 +++++++++------
src/mesa/shader/slang/slang_compile_variable.c | 5 +++++
src/mesa/shader/slang/slang_ir.c | 2 +-
8 files changed, 41 insertions(+), 15 deletions(-)
New commits:
diff-tree bb0393a0cdcabcb29ab7924cd4b3c4622fc2d787 (from 9fe342d1e6d3fbd150a1369380a1a4ecf82d6773)
Author: Brian <brian at nostromo.localnet.net>
Date: Sat Mar 24 16:44:20 2007 -0600
fix mem leak
diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index 2210b95..fa57ef8 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -1055,13 +1055,9 @@ _slang_gen_function_call(slang_assemble_
}
/* Replace the function call with the inlined block */
-#if 0
- slang_operation_construct(oper);
- slang_operation_copy(oper, inlined);
-#else
- *oper = *inlined; /* XXX slang_operation_copy() */
-#endif
-
+ slang_operation_destruct(oper);
+ *oper = *inlined;
+ /* XXX slang_operation_destruct(inlined) ??? */
#if 0
assert(inlined->locals);
diff-tree 9fe342d1e6d3fbd150a1369380a1a4ecf82d6773 (from cfdd07d7d394a2a595a545c0ef81d00dd6156742)
Author: Brian <brian at nostromo.localnet.net>
Date: Sat Mar 24 16:43:44 2007 -0600
disable free(var->aux) -- can lead to segfault
diff --git a/src/mesa/shader/slang/slang_compile_variable.c b/src/mesa/shader/slang/slang_compile_variable.c
index e099ecb..9a0b985 100644
--- a/src/mesa/shader/slang/slang_compile_variable.c
+++ b/src/mesa/shader/slang/slang_compile_variable.c
@@ -272,9 +272,11 @@ slang_variable_destruct(slang_variable *
slang_operation_destruct(var->initializer);
slang_alloc_free(var->initializer);
}
+#if 0
if (var->aux) {
_mesa_free(var->aux);
}
+#endif
}
diff-tree cfdd07d7d394a2a595a545c0ef81d00dd6156742 (from 1968444bed931eeafdbe948a30bb871bfcf11b42)
Author: Brian <brian at nostromo.localnet.net>
Date: Sat Mar 24 16:26:51 2007 -0600
fix mem leak
diff --git a/src/mesa/shader/slang/slang_compile_variable.c b/src/mesa/shader/slang/slang_compile_variable.c
index ae37aed..e099ecb 100644
--- a/src/mesa/shader/slang/slang_compile_variable.c
+++ b/src/mesa/shader/slang/slang_compile_variable.c
@@ -272,6 +272,9 @@ slang_variable_destruct(slang_variable *
slang_operation_destruct(var->initializer);
slang_alloc_free(var->initializer);
}
+ if (var->aux) {
+ _mesa_free(var->aux);
+ }
}
diff-tree 1968444bed931eeafdbe948a30bb871bfcf11b42 (from 935f93f966aa298c4d4115ac766cb2ff46ad6514)
Author: Brian <brian at nostromo.localnet.net>
Date: Sat Mar 24 16:22:35 2007 -0600
fix some mem leaks
diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c
index 619b0de..85dd158 100644
--- a/src/mesa/shader/slang/slang_compile.c
+++ b/src/mesa/shader/slang/slang_compile.c
@@ -691,7 +691,7 @@ parse_fully_specified_type(slang_parse_c
/**
* When parsing a compound production, this function is used to parse the
* children.
- * For example, a a while-loop compound will have two children, the
+ * For example, a while-loop compound will have two children, the
* while condition expression and the loop body. So, this function will
* be called twice to parse those two sub-expressions.
* \param C the parsing context
@@ -758,7 +758,7 @@ parse_statement(slang_parse_ctx * C, sla
if (first_var < O->vars->num_variables) {
const unsigned int num_vars = O->vars->num_variables - first_var;
unsigned int i;
-
+ assert(oper->num_children == 0);
oper->num_children = num_vars;
oper->children = slang_operation_new(num_vars);
if (oper->children == NULL) {
@@ -864,16 +864,18 @@ handle_nary_expression(slang_parse_ctx *
{
unsigned int i;
- op->children =
- (slang_operation *) slang_alloc_malloc(n * sizeof(slang_operation));
+ op->children = slang_operation_new(n);
if (op->children == NULL) {
slang_info_log_memory(C->L);
return 0;
}
op->num_children = n;
- for (i = 0; i < n; i++)
+ for (i = 0; i < n; i++) {
+ slang_operation_destruct(&op->children[i]);
op->children[i] = (*ops)[*total_ops - (n + 1 - i)];
+ }
+
(*ops)[*total_ops - (n + 1)] = (*ops)[*total_ops - 1];
*total_ops -= n;
@@ -1153,7 +1155,8 @@ parse_expression(slang_parse_ctx * C, sl
}
C->I++;
- *oper = *ops;
+ slang_operation_destruct(oper);
+ *oper = *ops; /* struct copy */
slang_alloc_free(ops);
return 1;
diff-tree 935f93f966aa298c4d4115ac766cb2ff46ad6514 (from 3493e867e9f2421425627a15eb5d2a2c554fbe8a)
Author: Brian <brian at nostromo.localnet.net>
Date: Sat Mar 24 16:20:02 2007 -0600
Free shader-related context state: _mesa_free_shader_state()
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 0cff90c..72c85de 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1439,6 +1439,7 @@ _mesa_free_context_data( GLcontext *ctx
_mesa_free_viewport_data( ctx );
_mesa_free_colortables_data( ctx );
_mesa_free_program_data(ctx);
+ _mesa_free_shader_state(ctx);
_mesa_free_query_data(ctx);
#if FEATURE_ARB_vertex_buffer_object
diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index 88aa8c5..002b427 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -212,6 +212,22 @@ _mesa_init_shader_state(GLcontext * ctx)
/**
+ * Free the per-context shader-related state.
+ */
+void
+_mesa_free_shader_state(GLcontext *ctx)
+{
+ if (ctx->Shader.CurrentProgram) {
+ ctx->Shader.CurrentProgram->RefCount--;
+ if (ctx->Shader.CurrentProgram->RefCount <= 0) {
+ _mesa_free_shader_program(ctx, ctx->Shader.CurrentProgram);
+ ctx->Shader.CurrentProgram = NULL;
+ }
+ }
+}
+
+
+/**
* Copy string from <src> to <dst>, up to maxLength characters, returning
* length of <dst> in <length>.
* \param src the strings source
diff --git a/src/mesa/shader/shader_api.h b/src/mesa/shader/shader_api.h
index 315f60a..16ed1a0 100644
--- a/src/mesa/shader/shader_api.h
+++ b/src/mesa/shader/shader_api.h
@@ -38,6 +38,9 @@
extern void
_mesa_init_shader_state(GLcontext * ctx);
+extern void
+_mesa_free_shader_state(GLcontext *ctx);
+
extern struct gl_shader_program *
_mesa_new_shader_program(GLcontext *ctx, GLuint name);
diff-tree 3493e867e9f2421425627a15eb5d2a2c554fbe8a (from 49134e8e53d4ae114044ff90174a6777ffbecc60)
Author: Brian <brian at nostromo.localnet.net>
Date: Sat Mar 24 16:18:13 2007 -0600
free prog->Attributes in _mesa_delete_program()
diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c
index c1606ac..e872d78 100644
--- a/src/mesa/shader/program.c
+++ b/src/mesa/shader/program.c
@@ -288,10 +288,12 @@ _mesa_delete_program(GLcontext *ctx, str
if (prog->Parameters) {
_mesa_free_parameter_list(prog->Parameters);
}
-
if (prog->Varying) {
_mesa_free_parameter_list(prog->Varying);
}
+ if (prog->Attributes) {
+ _mesa_free_parameter_list(prog->Attributes);
+ }
/* XXX this is a little ugly */
if (prog->Target == GL_VERTEX_PROGRAM_ARB) {
diff-tree 49134e8e53d4ae114044ff90174a6777ffbecc60 (from 0e71d08e8df7f59da74e78212fe8433ceb7c7315)
Author: Brian <brian at nostromo.localnet.net>
Date: Sat Mar 24 15:29:10 2007 -0600
fix mistake in _slang_free_ir()
diff --git a/src/mesa/shader/slang/slang_ir.c b/src/mesa/shader/slang/slang_ir.c
index 11c09d3..59aac73 100644
--- a/src/mesa/shader/slang/slang_ir.c
+++ b/src/mesa/shader/slang/slang_ir.c
@@ -150,7 +150,7 @@ _slang_free_ir(slang_ir_node *n)
}
for (i = 0; i < 3; i++)
- _slang_free_ir_tree(n->Children[i]);
+ _slang_free_ir(n->Children[i]);
/* Do not free n->List since it's a child elsewhere */
free(n);
}
More information about the mesa-commit
mailing list