gallium/utils: Fix vertex element setup
authorFabian Bieler <der.fabe@gmx.net>
Thu, 24 Feb 2011 09:56:16 +0000 (10:56 +0100)
committerMarek Olšák <maraeo@gmail.com>
Thu, 24 Feb 2011 14:05:10 +0000 (15:05 +0100)
Check if element was translated per element instead of per buffer.

src/gallium/auxiliary/util/u_vbuf_mgr.c

index 096392f313325cd7ea740a17aee4188b1c0e3cb4..dec8dd717e8a475557fc0483d56613f0f6d79013 100644 (file)
@@ -156,7 +156,7 @@ static void u_vbuf_translate_begin(struct u_vbuf_mgr_priv *mgr,
 {
    struct translate_key key;
    struct translate_element *te;
-   unsigned tr_elem_index[PIPE_MAX_ATTRIBS] = {0};
+   unsigned tr_elem_index[PIPE_MAX_ATTRIBS];
    struct translate *tr;
    boolean vb_translated[PIPE_MAX_ATTRIBS] = {0};
    uint8_t *vb_map[PIPE_MAX_ATTRIBS] = {0}, *out_map;
@@ -166,6 +166,7 @@ static void u_vbuf_translate_begin(struct u_vbuf_mgr_priv *mgr,
    struct pipe_vertex_element new_velems[PIPE_MAX_ATTRIBS];
 
    memset(&key, 0, sizeof(key));
+   memset(tr_elem_index, 0xff, sizeof(tr_elem_index));
 
    /* Initialize the translate key, i.e. the recipe how vertices should be
      * translated. */
@@ -281,7 +282,7 @@ static void u_vbuf_translate_begin(struct u_vbuf_mgr_priv *mgr,
 
       /* Setup new vertex elements. */
       for (i = 0; i < mgr->ve->count; i++) {
-         if (vb_translated[mgr->ve->ve[i].vertex_buffer_index]) {
+         if (tr_elem_index[i] < key.nr_elements) {
             te = &key.element[tr_elem_index[i]];
             new_velems[i].instance_divisor = mgr->ve->ve[i].instance_divisor;
             new_velems[i].src_format = te->output_format;