From 34d3103dee972839f1a1cae696881d0ecff0aa25 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Mon, 3 Jun 2019 16:52:59 -0700 Subject: [PATCH] iris: Fix SO stride units for DrawTransformFeedback Mesa measures in DWords. The hardware also claims to measure in DWords. Except the SO_WRITE_OFFSET field is actually bits 31:2, with 1:0 MBZ. Which means that it really measures in bytes. So, convert to bytes. Without this, our offset / stride denominator was 1/4th the size it should be, leading to 4x the vertex count that we should have had. Fixes GTF-GL46.gtf40.GL3Tests.transform_feedback2.transform_feedback2_two_buffers --- src/gallium/drivers/iris/iris_context.h | 2 +- src/gallium/drivers/iris/iris_program.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h index 4e544f830fd..e319ecb6df1 100644 --- a/src/gallium/drivers/iris/iris_context.h +++ b/src/gallium/drivers/iris/iris_context.h @@ -396,7 +396,7 @@ struct iris_stream_output_target { /** Storage holding the offset where we're writing in the buffer */ struct iris_state_ref offset; - /** Stride (dwords-per-vertex) during this transform feedback operation */ + /** Stride (bytes-per-vertex) during this transform feedback operation */ uint16_t stride; /** Has 3DSTATE_SO_BUFFER actually been emitted, zeroing the offsets? */ diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c index 3f8896ffd7d..d2a17b17ae7 100644 --- a/src/gallium/drivers/iris/iris_program.c +++ b/src/gallium/drivers/iris/iris_program.c @@ -1666,7 +1666,7 @@ iris_update_compiled_shaders(struct iris_context *ice) struct iris_stream_output_target *so = (void *) ice->state.so_target[i]; if (so) - so->stride = ish->stream_output.stride[i]; + so->stride = ish->stream_output.stride[i] * sizeof(uint32_t); } } -- 2.30.2