diff options
author | Brian <[email protected]> | 2008-05-06 23:08:51 -0600 |
---|---|---|
committer | Brian <[email protected]> | 2008-05-06 23:08:51 -0600 |
commit | df43fb661b2030d9b833a42dd47b8d7bf58d73aa (patch) | |
tree | fe53a42d227411380c67d66f05e4f2f9c323bb69 /src/mesa/shader/slang/slang_link.c | |
parent | 38c5b148531b1f470956bb9d66757e7301ce0535 (diff) |
implement full reference counting for vertex/fragment programs
Use _mesa_reference_vert/fragprog() wherever we assign program pointers.
Fixes a memory corruption bug found with glean/api2 test.
Diffstat (limited to 'src/mesa/shader/slang/slang_link.c')
-rw-r--r-- | src/mesa/shader/slang/slang_link.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c index c8457fc483d..72fe9997c55 100644 --- a/src/mesa/shader/slang/slang_link.c +++ b/src/mesa/shader/slang/slang_link.c @@ -516,19 +516,19 @@ _slang_link(GLcontext *ctx, * changing src/dst registers after merging the uniforms and varying vars. */ if (vertProg) { - shProg->VertexProgram - = vertex_program(_mesa_clone_program(ctx, &vertProg->Base)); + _mesa_reference_vertprog(ctx, &shProg->VertexProgram, + vertex_program(_mesa_clone_program(ctx, &vertProg->Base))); } else { - shProg->VertexProgram = NULL; + _mesa_reference_vertprog(ctx, &shProg->VertexProgram, NULL); } if (fragProg) { - shProg->FragmentProgram - = fragment_program(_mesa_clone_program(ctx, &fragProg->Base)); + _mesa_reference_fragprog(ctx, &shProg->FragmentProgram, + fragment_program(_mesa_clone_program(ctx, &fragProg->Base))); } else { - shProg->FragmentProgram = NULL; + _mesa_reference_fragprog(ctx, &shProg->FragmentProgram, NULL); } if (shProg->VertexProgram) @@ -545,10 +545,12 @@ _slang_link(GLcontext *ctx, if (shProg->VertexProgram) { _mesa_free_parameter_list(shProg->VertexProgram->Base.Parameters); shProg->VertexProgram->Base.Parameters = shProg->Uniforms; + assert(shProg->Uniforms); } if (shProg->FragmentProgram) { _mesa_free_parameter_list(shProg->FragmentProgram->Base.Parameters); shProg->FragmentProgram->Base.Parameters = shProg->Uniforms; + assert(shProg->Uniforms); } if (shProg->VertexProgram) { |