gallium/draw: cope with unused vertex_elements
authorKeith Whitwell <keithw@vmware.com>
Thu, 30 Apr 2009 09:59:19 +0000 (10:59 +0100)
committerKeith Whitwell <keithw@vmware.com>
Tue, 5 May 2009 12:14:46 +0000 (13:14 +0100)
src/gallium/auxiliary/draw/draw_pt.h
src/gallium/auxiliary/draw/draw_pt_fetch.c
src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c

index 6f3e1e0..8ef0ea8 100644 (file)
@@ -187,6 +187,7 @@ struct pt_emit *draw_pt_emit_create( struct draw_context *draw );
 
 struct pt_fetch;
 void draw_pt_fetch_prepare( struct pt_fetch *fetch,
+                            unsigned vertex_input_count,
                            unsigned vertex_size );
 
 void draw_pt_fetch_run( struct pt_fetch *fetch,
index 505d32f..65c3a34 100644 (file)
@@ -26,6 +26,7 @@
  **************************************************************************/
 
 #include "util/u_memory.h"
+#include "util/u_math.h"
 #include "draw/draw_context.h"
 #include "draw/draw_private.h"
 #include "draw/draw_vbuf.h"
@@ -56,9 +57,11 @@ struct pt_fetch {
  *
  */
 void draw_pt_fetch_prepare( struct pt_fetch *fetch,
+                            unsigned vs_input_count,
                            unsigned vertex_size )
 {
    struct draw_context *draw = fetch->draw;
+   unsigned nr_inputs;
    unsigned i, nr = 0;
    unsigned dst_offset = 0;
    struct translate_key key;
@@ -89,8 +92,11 @@ void draw_pt_fetch_prepare( struct pt_fetch *fetch,
       dst_offset += 4 * sizeof(float);
    }
       
+   assert( draw->pt.nr_vertex_elements >= vs_input_count );
 
-   for (i = 0; i < draw->pt.nr_vertex_elements; i++) {
+   nr_inputs = MIN2( vs_input_count, draw->pt.nr_vertex_elements );
+
+   for (i = 0; i < nr_inputs; i++) {
       key.element[nr].input_format = draw->pt.vertex_element[i].src_format;
       key.element[nr].input_buffer = draw->pt.vertex_element[i].vertex_buffer_index;
       key.element[nr].input_offset = draw->pt.vertex_element[i].src_offset;
index 11ac90f..df6c265 100644 (file)
@@ -77,8 +77,8 @@ static void fetch_pipeline_prepare( struct draw_pt_middle_end *middle,
    
 
    draw_pt_fetch_prepare( fpme->fetch, 
+                          vs->info.num_inputs,
                          fpme->vertex_size );
-
    /* XXX: it's not really gl rasterization rules we care about here,
     * but gl vs dx9 clip spaces.
     */