gallium: in softpipe_get_vertex_info() generate a vbuf vertex_info with real attribs
authorBrian <brian.paul@tungstengraphics.com>
Thu, 13 Mar 2008 22:57:57 +0000 (16:57 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Thu, 13 Mar 2008 22:57:57 +0000 (16:57 -0600)
Can't use the EMIT_ALL shortcut/optimization anymore because of passthrough mode.

src/gallium/drivers/softpipe/sp_state_derived.c

index eafbaed4b94e12ba1840c4c01ac42e97c4be5b11..10483675eac5b27b571271d6de16f3ac03abd1aa 100644 (file)
@@ -72,10 +72,22 @@ softpipe_get_vertex_info(struct softpipe_context *softpipe)
           */
          struct vertex_info *vinfo_vbuf = &softpipe->vertex_info_vbuf;
          vinfo_vbuf->num_attribs = 0;
+#if 0
+         /* special-case to allow memcpy of whole vertex */
          draw_emit_vertex_attr(vinfo_vbuf, EMIT_ALL, INTERP_NONE, 0);
          /* size in dwords or floats */
          vinfo_vbuf->size = 4 * draw_num_vs_outputs(softpipe->draw)
                           + sizeof(struct vertex_header) / 4;
+#else
+         /* for pass-through mode, we need a more explicit list of attribs */
+         const uint num = draw_num_vs_outputs(softpipe->draw);
+         uint i;
+         draw_emit_vertex_attr(vinfo_vbuf, EMIT_HEADER, INTERP_NONE, 0);
+         for (i = 0; i < num; i++) {
+            draw_emit_vertex_attr(vinfo_vbuf, EMIT_4F, INTERP_PERSPECTIVE, i);
+         }
+         draw_compute_vertex_size(vinfo_vbuf);
+#endif
       }
 
       /*