Vulkan: DrawElements with line loops client side memory support
- Also enables 6 new tests in LineLoopTests.cpp in angle_end2end
Bug: angleproject:2458
Change-Id: I4aec12b0ac780e81e6811f1199a5acaf17d9b982
Reviewed-on: https://chromium-review.googlesource.com/1010411
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Luc Ferron <lucferron@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp b/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
index d13e6aa..5b34f65 100644
--- a/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
+++ b/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
@@ -405,22 +405,24 @@
}
// Handle GL_LINE_LOOP drawElements.
- gl::Buffer *elementArrayBuffer = mState.getElementArrayBuffer().get();
- if (!elementArrayBuffer)
- {
- UNIMPLEMENTED();
- return gl::InternalError() << "Line loop indices in client memory not supported";
- }
-
- BufferVk *elementArrayBufferVk = vk::GetImpl(elementArrayBuffer);
-
- VkIndexType indexType = gl_vk::GetIndexType(drawCallParams.type());
-
if (mDirtyLineLoopTranslation)
{
- ANGLE_TRY(mLineLoopHelper.getIndexBufferForElementArrayBuffer(
- renderer, elementArrayBufferVk, indexType, drawCallParams.indexCount(),
- &mCurrentElementArrayBufferHandle, &mCurrentElementArrayBufferOffset));
+ gl::Buffer *elementArrayBuffer = mState.getElementArrayBuffer().get();
+ VkIndexType indexType = gl_vk::GetIndexType(drawCallParams.type());
+
+ if (!elementArrayBuffer)
+ {
+ ANGLE_TRY(mLineLoopHelper.getIndexBufferForClientElementArray(
+ renderer, drawCallParams.indices(), indexType, drawCallParams.indexCount(),
+ &mCurrentElementArrayBufferHandle, &mCurrentElementArrayBufferOffset));
+ }
+ else
+ {
+ BufferVk *elementArrayBufferVk = vk::GetImpl(elementArrayBuffer);
+ ANGLE_TRY(mLineLoopHelper.getIndexBufferForElementArrayBuffer(
+ renderer, elementArrayBufferVk, indexType, drawCallParams.indexCount(),
+ &mCurrentElementArrayBufferHandle, &mCurrentElementArrayBufferOffset));
+ }
}
ANGLE_TRY(onIndexedDraw(context, renderer, drawCallParams, drawNode, newCommandBuffer));
@@ -485,7 +487,7 @@
{
ANGLE_TRY(onDraw(context, renderer, drawCallParams, drawNode, newCommandBuffer));
- if (!mState.getElementArrayBuffer().get())
+ if (!mState.getElementArrayBuffer().get() && drawCallParams.mode() != GL_LINE_LOOP)
{
ANGLE_TRY(drawCallParams.ensureIndexRangeResolved(context));
ANGLE_TRY(streamIndexData(renderer, drawCallParams));