glsl/linker: Make separate allocations to track vertex and fragment shaders.
authorPaul Berry <stereotype441@gmail.com>
Wed, 31 Jul 2013 05:38:43 +0000 (22:38 -0700)
committerPaul Berry <stereotype441@gmail.com>
Fri, 2 Aug 2013 03:20:41 +0000 (20:20 -0700)
There's no reason to be clever about this.  By making separate
allocations for vertex and fragment shaders, we'll allow geometry
shaders to be added without introducing any complication.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/linker.cpp

index 7fae0b8c47d4920b8f7e47676fa9c3642ed07400..d7ea740dbf05d9af7c57dfeb215592394287d71a 100644 (file)
@@ -1615,8 +1615,9 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
    unsigned num_frag_shaders = 0;
 
    vert_shader_list = (struct gl_shader **)
-      calloc(2 * prog->NumShaders, sizeof(struct gl_shader *));
-   frag_shader_list =  &vert_shader_list[prog->NumShaders];
+      calloc(prog->NumShaders, sizeof(struct gl_shader *));
+   frag_shader_list = (struct gl_shader **)
+      calloc(prog->NumShaders, sizeof(struct gl_shader *));
 
    unsigned min_version = UINT_MAX;
    unsigned max_version = 0;
@@ -1948,6 +1949,7 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
 
 done:
    free(vert_shader_list);
+   free(frag_shader_list);
 
    for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
       if (prog->_LinkedShaders[i] == NULL)