translate_sse: Use the correct buffer index in this fast path.
authorAndreas Hartmetz <andreas.hartmetz@kdab.com>
Sun, 13 Apr 2014 20:29:35 +0000 (22:29 +0200)
committerIlia Mirkin <imirkin@alum.mit.edu>
Wed, 30 Apr 2014 00:35:10 +0000 (20:35 -0400)
It is possible that there are multiple input buffers but only one is
relevant for translation. Then there will be only a single translation
group, which might need to source data from a buffer index != 0.

Fixes wrong vertex shader inputs as observed while debugging with an
application and driver combination that requires translation of a
vertex attribute in a non-trivial set of attributes and input buffers.

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/auxiliary/translate/translate_sse.c

index 1b698cd7c7c30917a2759242e37a90ea9860f052..c7c53b3fb6c614bcf57c12a8a8bc5588c24993a1 100644 (file)
@@ -1228,8 +1228,10 @@ static boolean
 incr_inputs(struct translate_sse *p, unsigned index_size)
 {
    if (!index_size && p->nr_buffer_variants == 1) {
+      const unsigned buffer_index = p->buffer_variant[0].buffer_index;
       struct x86_reg stride =
-         x86_make_disp(p->machine_EDI, get_offset(p, &p->buffer[0].stride));
+         x86_make_disp(p->machine_EDI,
+                       get_offset(p, &p->buffer[buffer_index].stride));
 
       if (p->buffer_variant[0].instance_divisor == 0) {
          x64_rexw(p->func);