diff options
author | Zack Rusin <[email protected]> | 2010-06-16 08:52:33 -0400 |
---|---|---|
committer | Zack Rusin <[email protected]> | 2010-06-16 14:43:56 -0400 |
commit | 668fa68019ec09fcd0486e612d01d61a0c9a4b2f (patch) | |
tree | 3cf52ea6769808d7175533c5d72052895438ab50 | |
parent | e41ad8d2c5cac28cbdc3c1c234f1149c91a8d803 (diff) |
translate: don't crash on elts paths with instances
-rw-r--r-- | src/gallium/auxiliary/translate/translate_generic.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/gallium/auxiliary/translate/translate_generic.c b/src/gallium/auxiliary/translate/translate_generic.c index f8dbd2b36a1..0e43a512ee8 100644 --- a/src/gallium/auxiliary/translate/translate_generic.c +++ b/src/gallium/auxiliary/translate/translate_generic.c @@ -378,25 +378,28 @@ static void PIPE_CDECL generic_run_elts( struct translate *translate, char *dst = (vert + tg->attrib[attr].output_offset); - if (tg->attrib[attr].instance_divisor) { - index = instance_id / tg->attrib[attr].instance_divisor; - } else { - index = elt; - } + if (tg->attrib[attr].type == TRANSLATE_ELEMENT_NORMAL) { + if (tg->attrib[attr].instance_divisor) { + index = instance_id / tg->attrib[attr].instance_divisor; + } else { + index = elt; + } - index = MIN2(index, tg->attrib[attr].max_index); + index = MIN2(index, tg->attrib[attr].max_index); - src = tg->attrib[attr].input_ptr + - tg->attrib[attr].input_stride * index; + src = tg->attrib[attr].input_ptr + + tg->attrib[attr].input_stride * index; - tg->attrib[attr].fetch( data, src, 0, 0 ); + tg->attrib[attr].fetch( data, src, 0, 0 ); + } else { + data[0] = (float)instance_id; + } if (0) debug_printf("vert %d/%d attr %d: %f %f %f %f\n", i, elt, attr, data[0], data[1], data[2], data[3]); tg->attrib[attr].emit( data, dst ); } - vert += tg->translate.key.output_stride; } } |