summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/params.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/params.cpp')
-rw-r--r--src/3rdparty/angle/src/libANGLE/params.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/params.cpp b/src/3rdparty/angle/src/libANGLE/params.cpp
new file mode 100644
index 0000000000..a89d87e0a9
--- /dev/null
+++ b/src/3rdparty/angle/src/libANGLE/params.cpp
@@ -0,0 +1,68 @@
+//
+// Copyright 2017 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// params:
+// Parameter wrapper structs for OpenGL ES. These helpers cache re-used values
+// in entry point routines.
+
+#include "libANGLE/params.h"
+
+#include "common/utilities.h"
+#include "libANGLE/Context.h"
+#include "libANGLE/VertexArray.h"
+
+namespace gl
+{
+
+// static
+constexpr ParamTypeInfo ParamsBase::TypeInfo;
+constexpr ParamTypeInfo HasIndexRange::TypeInfo;
+
+HasIndexRange::HasIndexRange()
+ : ParamsBase(nullptr), mContext(nullptr), mCount(0), mType(GL_NONE), mIndices(nullptr)
+{
+}
+
+HasIndexRange::HasIndexRange(Context *context, GLsizei count, GLenum type, const void *indices)
+ : ParamsBase(context), mContext(context), mCount(count), mType(type), mIndices(indices)
+{
+}
+
+const Optional<IndexRange> &HasIndexRange::getIndexRange() const
+{
+ if (mIndexRange.valid() || !mContext)
+ {
+ return mIndexRange;
+ }
+
+ const State &state = mContext->getGLState();
+
+ const gl::VertexArray *vao = state.getVertexArray();
+ gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer().get();
+
+ if (elementArrayBuffer)
+ {
+ uintptr_t offset = reinterpret_cast<uintptr_t>(mIndices);
+ IndexRange indexRange;
+ Error error =
+ elementArrayBuffer->getIndexRange(mContext, mType, static_cast<size_t>(offset), mCount,
+ state.isPrimitiveRestartEnabled(), &indexRange);
+ if (error.isError())
+ {
+ mContext->handleError(error);
+ return mIndexRange;
+ }
+
+ mIndexRange = indexRange;
+ }
+ else
+ {
+ mIndexRange = ComputeIndexRange(mType, mIndices, mCount, state.isPrimitiveRestartEnabled());
+ }
+
+ return mIndexRange;
+}
+
+} // namespace gl