VertexArrayGL: fix the streaming of offset non-packed strides
When the packed stride and source stride were different, the streaming
code path used a loop that added two times the offset for the start of
the index range.
BUG=angleproject:1135
Change-Id: I6d314a1a28abec4df22f7c798c1af87a18d8b7ec
Reviewed-on: https://chromium-review.googlesource.com/295225
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/renderer/gl/VertexArrayGL.cpp b/src/libANGLE/renderer/gl/VertexArrayGL.cpp
index 0da7375..3da883e 100644
--- a/src/libANGLE/renderer/gl/VertexArrayGL.cpp
+++ b/src/libANGLE/renderer/gl/VertexArrayGL.cpp
@@ -308,10 +308,12 @@
else
{
// Copy each vertex individually
- for (size_t vertexIdx = indexRange.start; vertexIdx <= indexRange.end; vertexIdx++)
+ for (size_t vertexIdx = 0; vertexIdx <= streamedVertexCount; vertexIdx++)
{
- memcpy(bufferPointer + curBufferOffset + (destStride * vertexIdx),
- inputPointer + (sourceStride * vertexIdx), destStride);
+ uint8_t *out = bufferPointer + curBufferOffset + (destStride * vertexIdx);
+ const uint8_t *in =
+ inputPointer + sourceStride * (vertexIdx + indexRange.start);
+ memcpy(out, in, destStride);
}
}