aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorAndreas Hartmetz <[email protected]>2014-04-13 22:29:35 +0200
committerIlia Mirkin <[email protected]>2014-04-29 20:35:10 -0400
commit1c6aa6599efd9b5cca270bef2e53fd7ac5f31647 (patch)
tree22f4d89bca34fde94a6991956b38da8848c93c49 /src/gallium
parentca848e8bee7683e296e40a7870750d8a156850ca (diff)
translate_sse: Use the correct buffer index in this fast path.
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 <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/translate/translate_sse.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/translate/translate_sse.c b/src/gallium/auxiliary/translate/translate_sse.c
index 1b698cd7c7c..c7c53b3fb6c 100644
--- a/src/gallium/auxiliary/translate/translate_sse.c
+++ b/src/gallium/auxiliary/translate/translate_sse.c
@@ -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);