From: Ilia Mirkin Date: Sun, 19 Jun 2016 04:43:06 +0000 (-0400) Subject: translate: fix start_instance parameter in sse version X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5b0d64886dfe9d42d02666ee1b07f2aa375197a5;p=mesa.git translate: fix start_instance parameter in sse version The generic version gets this right already, but this was using an incorrect formula in SSE. Signed-off-by: Ilia Mirkin Cc: "11.2 12.0" Reviewed-by: Samuel Pitoiset --- diff --git a/src/gallium/auxiliary/translate/translate_sse.c b/src/gallium/auxiliary/translate/translate_sse.c index 162e555a873..298192f2875 100644 --- a/src/gallium/auxiliary/translate/translate_sse.c +++ b/src/gallium/auxiliary/translate/translate_sse.c @@ -1098,13 +1098,14 @@ init_inputs(struct translate_sse *p, unsigned index_size) * base_ptr + stride * index, where index depends on instance divisor */ if (variant->instance_divisor) { + struct x86_reg tmp_EDX = p->tmp2_EDX; + /* Start with instance = instance_id * which is true if divisor is 1. */ x86_mov(p->func, tmp_EAX, instance_id); if (variant->instance_divisor != 1) { - struct x86_reg tmp_EDX = p->tmp2_EDX; struct x86_reg tmp_ECX = p->src_ECX; /* TODO: Add x86_shr() to rtasm and use it whenever @@ -1113,14 +1114,13 @@ init_inputs(struct translate_sse *p, unsigned index_size) x86_xor(p->func, tmp_EDX, tmp_EDX); x86_mov_reg_imm(p->func, tmp_ECX, variant->instance_divisor); x86_div(p->func, tmp_ECX); /* EAX = EDX:EAX / ECX */ - - /* instance = (instance_id - start_instance) / divisor + - * start_instance - */ - x86_mov(p->func, tmp_EDX, start_instance); - x86_add(p->func, tmp_EAX, tmp_EDX); } + /* instance = (instance_id / divisor) + start_instance + */ + x86_mov(p->func, tmp_EDX, start_instance); + x86_add(p->func, tmp_EAX, tmp_EDX); + /* XXX we need to clamp the index here too, but to a * per-array max value, not the draw->pt.max_index value * that's being given to us via translate->set_buffer().