llvmpipe: Texture cache in 4 ubytes instead of 4 floats.
[mesa.git] / src / gallium / auxiliary / draw / draw_pt_fetch.c
index 6377f896fb058232697b1a049c6f81757ff47612..65c3a34c3474a664fbac65042117800174eda9db 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;
@@ -114,7 +120,7 @@ void draw_pt_fetch_prepare( struct pt_fetch *fetch,
       fetch->translate = translate_cache_find(fetch->cache, &key);
 
       {
-        static struct vertex_header vh = { 0, 1, 0, 0xffff };
+         static struct vertex_header vh = { 0, 1, 0, UNDEFINED_VERTEX_ID, { .0f, .0f, .0f, .0f } };
         fetch->translate->set_buffer(fetch->translate,
                                      draw->pt.nr_vertex_buffers,
                                      &vh,
@@ -144,7 +150,7 @@ void draw_pt_fetch_run( struct pt_fetch *fetch,
                            i, 
                            ((char *)draw->pt.user.vbuffer[i] + 
                             draw->pt.vertex_buffer[i].buffer_offset),
-                           draw->pt.vertex_buffer[i].pitch );
+                           draw->pt.vertex_buffer[i].stride );
    }
 
    translate->run_elts( translate,
@@ -180,7 +186,7 @@ void draw_pt_fetch_run_linear( struct pt_fetch *fetch,
                            i,
                            ((char *)draw->pt.user.vbuffer[i] +
                             draw->pt.vertex_buffer[i].buffer_offset),
-                           draw->pt.vertex_buffer[i].pitch );
+                           draw->pt.vertex_buffer[i].stride );
    }
 
    translate->run( translate,