tnl: fix result vector allocation regression
authorBrian Paul <brianp@vmware.com>
Fri, 7 Oct 2011 16:55:43 +0000 (10:55 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 7 Oct 2011 16:58:53 +0000 (10:58 -0600)
We need to allocate all the output vectors.
Fixes a regression from commit f7f678331d5e95d2266fe6b3ea1cfa47d6421065
Fixes fd.o bugs 41441 and 41492.

src/mesa/tnl/t_vb_program.c

index cc5e856..367dfd5 100644 (file)
@@ -336,11 +336,17 @@ run_vp( struct gl_context *ctx, struct tnl_pipeline_stage *stage )
    for (i = 0; i < VERT_RESULT_MAX; i++) {
       if (program->Base.OutputsWritten & BITFIELD64_BIT(i)) {
          outputs[numOutputs++] = i;
+      }
+   }
 
-        if (!store->results[i].data) {
-           _mesa_vector4f_alloc( &store->results[i], 0, VB->Size, 32 );
-           store->results[i].size = 4;
-        }
+   /* Allocate result vectors.  We delay this until now to avoid allocating
+    * memory that would never be used if we don't run the software tnl pipeline.
+    */
+   if (!store->results[0].storage) {
+      for (i = 0; i < VERT_RESULT_MAX; i++) {
+         assert(!store->results[i].storage);
+         _mesa_vector4f_alloc( &store->results[i], 0, VB->Size, 32 );
+         store->results[i].size = 4;
       }
    }