diff options
author | Zack Rusin <[email protected]> | 2013-06-27 20:40:10 -0400 |
---|---|---|
committer | Zack Rusin <[email protected]> | 2013-06-28 05:21:20 -0400 |
commit | 1c2e5c223da28cdffe156b6b430fcdf638909021 (patch) | |
tree | f86833cf8b5b43134231309cc75932da000de080 /src/gallium/auxiliary/draw/draw_vs_variant.c | |
parent | df4ab7974a825bf686f9dfa3474f3648e9a3ca66 (diff) |
draw/translate: fix instancing
We were incorrectly computing the buffer offset when using the
instances. The buffer offset is always equal to:
start_instance * stride + (instance_num / instance_divisor) *
stride
We were completely ignoring the start instance quite
often producing instances that completely wrong, e.g. if
start instance = 5, instance divisor = 2, then on the first
iteration it should be:
5 * stride, not (5/2) * stride as we'd have currently, and if
start instance = 1, instance divisor = 3, then on the first
iteration it should be:
1 * stride, not 0 as we'd have.
This fixes it and adjusts all the code to the changes.
Signed-off-by: Zack Rusin <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_vs_variant.c')
-rw-r--r-- | src/gallium/auxiliary/draw/draw_vs_variant.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/draw/draw_vs_variant.c b/src/gallium/auxiliary/draw/draw_vs_variant.c index 152c1303183..37500c7db8d 100644 --- a/src/gallium/auxiliary/draw/draw_vs_variant.c +++ b/src/gallium/auxiliary/draw/draw_vs_variant.c @@ -168,6 +168,7 @@ static void PIPE_CDECL vsvg_run_elts( struct draw_vs_variant *variant, vsvg->fetch->run_elts( vsvg->fetch, elts, count, + vsvg->draw->start_instance, vsvg->draw->instance_id, temp_buffer ); @@ -211,6 +212,7 @@ static void PIPE_CDECL vsvg_run_elts( struct draw_vs_variant *variant, vsvg->emit->run( vsvg->emit, 0, count, + vsvg->draw->start_instance, vsvg->draw->instance_id, output_buffer ); @@ -234,6 +236,7 @@ static void PIPE_CDECL vsvg_run_linear( struct draw_vs_variant *variant, vsvg->fetch->run( vsvg->fetch, start, count, + vsvg->draw->start_instance, vsvg->draw->instance_id, temp_buffer ); @@ -274,6 +277,7 @@ static void PIPE_CDECL vsvg_run_linear( struct draw_vs_variant *variant, vsvg->emit->run( vsvg->emit, 0, count, + vsvg->draw->start_instance, vsvg->draw->instance_id, output_buffer ); |