[Mesa-dev] [PATCH] translate: fix start_instance parameter in sse version

Samuel Pitoiset samuel.pitoiset at gmail.com
Sun Jun 19 14:05:56 UTC 2016


Looks correct to me.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

On 06/19/2016 06:47 AM, Ilia Mirkin wrote:
> The generic version gets this right already, but this was using an
> incorrect formula in SSE.
>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>  src/gallium/auxiliary/translate/translate_sse.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/src/gallium/auxiliary/translate/translate_sse.c b/src/gallium/auxiliary/translate/translate_sse.c
> index 162e555..298192f 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().
>


More information about the mesa-dev mailing list