Use packed enum for DrawElementsType.
The packing and unpacking take a few extra instructions. But it
completely obviates the need for any switches in the validation code.
Speed is slightly faster or the similar depending on the back-end.
Also add gl_angle_ext.xml to GL entry point generator inputs. This was
missing and would cause the code generation to miss certain changes.
Bug: angleproject:2985
Change-Id: I1ea41a71db71135000166ead8305ec42d22ff7b3
Reviewed-on: https://chromium-review.googlesource.com/c/1351729
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
diff --git a/src/common/PackedEnums.h b/src/common/PackedEnums.h
index 79cefb9..d6a4fbc 100644
--- a/src/common/PackedEnums.h
+++ b/src/common/PackedEnums.h
@@ -268,6 +268,47 @@
"PrimitiveMode violation");
static_assert(ToGLenum(PrimitiveMode::TriangleStripAdjacency) == GL_TRIANGLE_STRIP_ADJACENCY,
"PrimitiveMode violation");
+
+enum class DrawElementsType : size_t
+{
+ UnsignedByte = 0,
+ UnsignedShort = 1,
+ UnsignedInt = 2,
+ InvalidEnum = 3,
+ EnumCount = 3,
+};
+
+template <>
+constexpr DrawElementsType FromGLenum<DrawElementsType>(GLenum from)
+{
+ GLenum scaled = (from - GL_UNSIGNED_BYTE);
+ GLenum packed = (scaled >> 1);
+
+ if ((scaled & 1) != 0 || packed >= static_cast<GLenum>(DrawElementsType::EnumCount))
+ {
+ return DrawElementsType::InvalidEnum;
+ }
+
+ return static_cast<DrawElementsType>(packed);
+}
+
+constexpr GLenum ToGLenum(DrawElementsType from)
+{
+ return ((static_cast<GLenum>(from) << 1) + GL_UNSIGNED_BYTE);
+}
+
+static_assert(ToGLenum(DrawElementsType::UnsignedByte) == GL_UNSIGNED_BYTE,
+ "DrawElementsType violation");
+static_assert(ToGLenum(DrawElementsType::UnsignedShort) == GL_UNSIGNED_SHORT,
+ "DrawElementsType violation");
+static_assert(ToGLenum(DrawElementsType::UnsignedInt) == GL_UNSIGNED_INT,
+ "DrawElementsType violation");
+static_assert(FromGLenum<DrawElementsType>(GL_UNSIGNED_BYTE) == DrawElementsType::UnsignedByte,
+ "DrawElementsType violation");
+static_assert(FromGLenum<DrawElementsType>(GL_UNSIGNED_SHORT) == DrawElementsType::UnsignedShort,
+ "DrawElementsType violation");
+static_assert(FromGLenum<DrawElementsType>(GL_UNSIGNED_INT) == DrawElementsType::UnsignedInt,
+ "DrawElementsType violation");
} // namespace gl
namespace egl
diff --git a/src/common/angleutils.h b/src/common/angleutils.h
index c4bdfbe..7e7460a 100644
--- a/src/common/angleutils.h
+++ b/src/common/angleutils.h
@@ -307,11 +307,11 @@
#ifndef ANGLE_STRINGIFY
# define ANGLE_STRINGIFY(x) #x
#endif
+// clang-format on
#ifndef ANGLE_MACRO_STRINGIFY
# define ANGLE_MACRO_STRINGIFY(x) ANGLE_STRINGIFY(x)
#endif
-// clang-format on
// Detect support for C++17 [[nodiscard]]
#if !defined(__has_cpp_attribute)
diff --git a/src/common/utilities.cpp b/src/common/utilities.cpp
index 2175074..8ef211d 100644
--- a/src/common/utilities.cpp
+++ b/src/common/utilities.cpp
@@ -530,22 +530,22 @@
return -1;
}
-IndexRange ComputeIndexRange(GLenum indexType,
+IndexRange ComputeIndexRange(DrawElementsType indexType,
const GLvoid *indices,
size_t count,
bool primitiveRestartEnabled)
{
switch (indexType)
{
- case GL_UNSIGNED_BYTE:
+ case DrawElementsType::UnsignedByte:
return ComputeTypedIndexRange(static_cast<const GLubyte *>(indices), count,
primitiveRestartEnabled,
GetPrimitiveRestartIndex(indexType));
- case GL_UNSIGNED_SHORT:
+ case DrawElementsType::UnsignedShort:
return ComputeTypedIndexRange(static_cast<const GLushort *>(indices), count,
primitiveRestartEnabled,
GetPrimitiveRestartIndex(indexType));
- case GL_UNSIGNED_INT:
+ case DrawElementsType::UnsignedInt:
return ComputeTypedIndexRange(static_cast<const GLuint *>(indices), count,
primitiveRestartEnabled,
GetPrimitiveRestartIndex(indexType));
@@ -555,15 +555,15 @@
}
}
-GLuint GetPrimitiveRestartIndex(GLenum indexType)
+GLuint GetPrimitiveRestartIndex(DrawElementsType indexType)
{
switch (indexType)
{
- case GL_UNSIGNED_BYTE:
+ case DrawElementsType::UnsignedByte:
return 0xFF;
- case GL_UNSIGNED_SHORT:
+ case DrawElementsType::UnsignedShort:
return 0xFFFF;
- case GL_UNSIGNED_INT:
+ case DrawElementsType::UnsignedInt:
return 0xFFFFFFFF;
default:
UNREACHABLE();
diff --git a/src/common/utilities.h b/src/common/utilities.h
index 8918e45..512e05d 100644
--- a/src/common/utilities.h
+++ b/src/common/utilities.h
@@ -63,13 +63,13 @@
// Find the range of index values in the provided indices pointer. Primitive restart indices are
// only counted in the range if primitive restart is disabled.
-IndexRange ComputeIndexRange(GLenum indexType,
+IndexRange ComputeIndexRange(DrawElementsType indexType,
const GLvoid *indices,
size_t count,
bool primitiveRestartEnabled);
// Get the primitive restart index value for the given index type.
-GLuint GetPrimitiveRestartIndex(GLenum indexType);
+GLuint GetPrimitiveRestartIndex(DrawElementsType indexType);
bool IsTriangleMode(PrimitiveMode drawMode);
bool IsLineMode(PrimitiveMode primitiveMode);
diff --git a/src/libANGLE/Buffer.cpp b/src/libANGLE/Buffer.cpp
index c8ec6b6..94afe14 100644
--- a/src/libANGLE/Buffer.cpp
+++ b/src/libANGLE/Buffer.cpp
@@ -227,7 +227,7 @@
}
angle::Result Buffer::getIndexRange(const gl::Context *context,
- GLenum type,
+ DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
diff --git a/src/libANGLE/Buffer.h b/src/libANGLE/Buffer.h
index 15f3101..4150018 100644
--- a/src/libANGLE/Buffer.h
+++ b/src/libANGLE/Buffer.h
@@ -103,7 +103,7 @@
void onPixelPack(const Context *context);
angle::Result getIndexRange(const gl::Context *context,
- GLenum type,
+ DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 132563a..150301f 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -2242,7 +2242,10 @@
instanceCount);
}
-void Context::drawElements(PrimitiveMode mode, GLsizei count, GLenum type, const void *indices)
+void Context::drawElements(PrimitiveMode mode,
+ GLsizei count,
+ DrawElementsType type,
+ const void *indices)
{
// No-op if count draws no primitives for given mode
if (noopDraw(mode, count))
@@ -2256,7 +2259,7 @@
void Context::drawElementsInstanced(PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices,
GLsizei instances)
{
@@ -2275,7 +2278,7 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices)
{
// No-op if count draws no primitives for given mode
@@ -2295,7 +2298,7 @@
ANGLE_CONTEXT_TRY(mImplementation->drawArraysIndirect(this, mode, indirect));
}
-void Context::drawElementsIndirect(PrimitiveMode mode, GLenum type, const void *indirect)
+void Context::drawElementsIndirect(PrimitiveMode mode, DrawElementsType type, const void *indirect)
{
ANGLE_CONTEXT_TRY(prepareForDraw(mode));
ANGLE_CONTEXT_TRY(mImplementation->drawElementsIndirect(this, mode, type, indirect));
@@ -5461,7 +5464,7 @@
void Context::multiDrawElements(PrimitiveMode mode,
const GLsizei *counts,
- GLenum type,
+ DrawElementsType type,
const GLvoid *const *indices,
GLsizei drawcount)
{
@@ -5497,7 +5500,7 @@
void Context::multiDrawElementsInstanced(PrimitiveMode mode,
const GLsizei *counts,
- GLenum type,
+ DrawElementsType type,
const GLvoid *const *indices,
const GLsizei *instanceCounts,
GLsizei drawcount)
@@ -8186,6 +8189,7 @@
{
updateValidDrawModes(context);
updateValidBindTextureTypes(context);
+ updateValidDrawElementsTypes(context);
}
void StateCache::updateActiveAttribsMask(Context *context)
@@ -8403,4 +8407,16 @@
{TextureType::CubeMap, true},
}};
}
+
+void StateCache::updateValidDrawElementsTypes(Context *context)
+{
+ bool supportsUint =
+ (context->getClientMajorVersion() >= 3 || context->getExtensions().elementIndexUint);
+
+ mCachedValidDrawElementsTypes = {{
+ {DrawElementsType::UnsignedByte, true},
+ {DrawElementsType::UnsignedShort, true},
+ {DrawElementsType::UnsignedInt, supportsUint},
+ }};
+}
} // namespace gl
diff --git a/src/libANGLE/Context.h b/src/libANGLE/Context.h
index c880db5..5f95a4a 100644
--- a/src/libANGLE/Context.h
+++ b/src/libANGLE/Context.h
@@ -156,6 +156,12 @@
return mCachedValidBindTextureTypes[type];
}
+ // Cannot chance except on Context/Extension init.
+ bool isValidDrawElementsType(DrawElementsType type) const
+ {
+ return mCachedValidDrawElementsTypes[type];
+ }
+
// State change notifications.
void onVertexArrayBindingChange(Context *context);
void onProgramExecutableChange(Context *context);
@@ -181,6 +187,7 @@
void updateBasicDrawStatesError();
void updateValidDrawModes(Context *context);
void updateValidBindTextureTypes(Context *context);
+ void updateValidDrawElementsTypes(Context *context);
intptr_t getBasicDrawStatesErrorImpl(Context *context) const;
@@ -199,6 +206,8 @@
mCachedValidDrawModes;
angle::PackedEnumMap<TextureType, bool, angle::EnumSize<TextureType>() + 1>
mCachedValidBindTextureTypes;
+ angle::PackedEnumMap<DrawElementsType, bool, angle::EnumSize<DrawElementsType>() + 1>
+ mCachedValidDrawElementsTypes;
};
class Context final : public egl::LabeledObject, angle::NonCopyable, public angle::ObserverInterface
@@ -690,20 +699,23 @@
void drawArrays(PrimitiveMode mode, GLint first, GLsizei count);
void drawArraysInstanced(PrimitiveMode mode, GLint first, GLsizei count, GLsizei instanceCount);
- void drawElements(PrimitiveMode mode, GLsizei count, GLenum type, const void *indices);
+ void drawElements(PrimitiveMode mode,
+ GLsizei count,
+ DrawElementsType type,
+ const void *indices);
void drawElementsInstanced(PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices,
GLsizei instances);
void drawRangeElements(PrimitiveMode mode,
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices);
void drawArraysIndirect(PrimitiveMode mode, const void *indirect);
- void drawElementsIndirect(PrimitiveMode mode, GLenum type, const void *indirect);
+ void drawElementsIndirect(PrimitiveMode mode, DrawElementsType type, const void *indirect);
void blitFramebuffer(GLint srcX0,
GLint srcY0,
@@ -1572,12 +1584,12 @@
GLsizei drawcount);
void multiDrawElements(PrimitiveMode mode,
const GLsizei *counts,
- GLenum type,
+ DrawElementsType type,
const GLvoid *const *indices,
GLsizei drawcount);
void multiDrawElementsInstanced(PrimitiveMode mode,
const GLsizei *counts,
- GLenum type,
+ DrawElementsType type,
const GLvoid *const *indices,
const GLsizei *instanceCounts,
GLsizei drawcount);
diff --git a/src/libANGLE/IndexRangeCache.cpp b/src/libANGLE/IndexRangeCache.cpp
index 1898772..5540dc8 100644
--- a/src/libANGLE/IndexRangeCache.cpp
+++ b/src/libANGLE/IndexRangeCache.cpp
@@ -19,7 +19,7 @@
IndexRangeCache::~IndexRangeCache() {}
-void IndexRangeCache::addRange(GLenum type,
+void IndexRangeCache::addRange(DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
@@ -28,7 +28,7 @@
mIndexRangeCache[IndexRangeKey(type, offset, count, primitiveRestartEnabled)] = range;
}
-bool IndexRangeCache::findRange(GLenum type,
+bool IndexRangeCache::findRange(DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
@@ -62,7 +62,8 @@
while (i != mIndexRangeCache.end())
{
size_t rangeStart = i->first.offset;
- size_t rangeEnd = i->first.offset + (GetTypeInfo(i->first.type).bytes * i->first.count);
+ size_t rangeEnd =
+ i->first.offset + (GetDrawElementsTypeSize(i->first.type) * i->first.count);
if (invalidateEnd < rangeStart || invalidateStart > rangeEnd)
{
@@ -81,10 +82,10 @@
}
IndexRangeCache::IndexRangeKey::IndexRangeKey()
- : IndexRangeCache::IndexRangeKey(GL_NONE, 0, 0, false)
+ : IndexRangeCache::IndexRangeKey(DrawElementsType::InvalidEnum, 0, 0, false)
{}
-IndexRangeCache::IndexRangeKey::IndexRangeKey(GLenum type_,
+IndexRangeCache::IndexRangeKey::IndexRangeKey(DrawElementsType type_,
size_t offset_,
size_t count_,
bool primitiveRestartEnabled_)
diff --git a/src/libANGLE/IndexRangeCache.h b/src/libANGLE/IndexRangeCache.h
index 3f5d623..f53602d 100644
--- a/src/libANGLE/IndexRangeCache.h
+++ b/src/libANGLE/IndexRangeCache.h
@@ -10,11 +10,11 @@
#ifndef LIBANGLE_INDEXRANGECACHE_H_
#define LIBANGLE_INDEXRANGECACHE_H_
+#include "angle_gl.h"
+#include "common/PackedEnums.h"
#include "common/angleutils.h"
#include "common/mathutil.h"
-#include "angle_gl.h"
-
#include <map>
namespace gl
@@ -26,12 +26,12 @@
IndexRangeCache();
~IndexRangeCache();
- void addRange(GLenum type,
+ void addRange(DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
const IndexRange &range);
- bool findRange(GLenum type,
+ bool findRange(DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
@@ -44,11 +44,11 @@
struct IndexRangeKey
{
IndexRangeKey();
- IndexRangeKey(GLenum type, size_t offset, size_t count, bool primitiveRestart);
+ IndexRangeKey(DrawElementsType type, size_t offset, size_t count, bool primitiveRestart);
bool operator<(const IndexRangeKey &rhs) const;
- GLenum type;
+ DrawElementsType type;
size_t offset;
size_t count;
bool primitiveRestartEnabled;
diff --git a/src/libANGLE/VertexArray.cpp b/src/libANGLE/VertexArray.cpp
index f62e7ce..440da98 100644
--- a/src/libANGLE/VertexArray.cpp
+++ b/src/libANGLE/VertexArray.cpp
@@ -529,7 +529,7 @@
}
angle::Result VertexArray::getIndexRangeImpl(const Context *context,
- GLenum type,
+ DrawElementsType type,
GLsizei indexCount,
const void *indices,
IndexRange *indexRangeOut) const
@@ -553,12 +553,12 @@
VertexArray::IndexRangeCache::IndexRangeCache() = default;
-void VertexArray::IndexRangeCache::put(GLenum type,
+void VertexArray::IndexRangeCache::put(DrawElementsType type,
GLsizei indexCount,
size_t offset,
const IndexRange &indexRange)
{
- ASSERT(type != GL_NONE);
+ ASSERT(type != DrawElementsType::InvalidEnum);
mTypeKey = type;
mIndexCountKey = indexCount;
diff --git a/src/libANGLE/VertexArray.h b/src/libANGLE/VertexArray.h
index 6a37c03..6e86b7d 100644
--- a/src/libANGLE/VertexArray.h
+++ b/src/libANGLE/VertexArray.h
@@ -256,7 +256,7 @@
bool hasTransformFeedbackBindingConflict(const gl::Context *context) const;
ANGLE_INLINE angle::Result getIndexRange(const Context *context,
- GLenum type,
+ DrawElementsType type,
GLsizei indexCount,
const void *indices,
IndexRange *indexRangeOut) const
@@ -291,7 +291,7 @@
void updateCachedMappedArrayBuffers(VertexBinding *binding);
angle::Result getIndexRangeImpl(const Context *context,
- GLenum type,
+ DrawElementsType type,
GLsizei indexCount,
const void *indices,
IndexRange *indexRangeOut) const;
@@ -315,9 +315,12 @@
public:
IndexRangeCache();
- void invalidate() { mTypeKey = GL_NONE; }
+ void invalidate() { mTypeKey = DrawElementsType::InvalidEnum; }
- bool get(GLenum type, GLsizei indexCount, const void *indices, IndexRange *indexRangeOut)
+ bool get(DrawElementsType type,
+ GLsizei indexCount,
+ const void *indices,
+ IndexRange *indexRangeOut)
{
size_t offset = reinterpret_cast<uintptr_t>(indices);
if (mTypeKey == type && mIndexCountKey == indexCount && mOffsetKey == offset)
@@ -329,10 +332,13 @@
return false;
}
- void put(GLenum type, GLsizei indexCount, size_t offset, const IndexRange &indexRange);
+ void put(DrawElementsType type,
+ GLsizei indexCount,
+ size_t offset,
+ const IndexRange &indexRange);
private:
- GLenum mTypeKey;
+ DrawElementsType mTypeKey;
GLsizei mIndexCountKey;
size_t mOffsetKey;
IndexRange mPayload;
diff --git a/src/libANGLE/formatutils.h b/src/libANGLE/formatutils.h
index a883bf7..e2d491c 100644
--- a/src/libANGLE/formatutils.h
+++ b/src/libANGLE/formatutils.h
@@ -40,7 +40,7 @@
{
Type() : bytes(0), bytesShift(0), specialInterpretation(0) {}
- Type(uint32_t packedTypeInfo)
+ explicit Type(uint32_t packedTypeInfo)
: bytes(packedTypeInfo & 0xff),
bytesShift((packedTypeInfo >> 8) & 0xff),
specialInterpretation((packedTypeInfo >> 16) & 1)
@@ -59,6 +59,21 @@
return Type(GetPackedTypeInfo(type));
}
+// This helpers use tricks based on the assumption that the type has certain values.
+static_assert(static_cast<GLuint>(DrawElementsType::UnsignedByte) == 0, "Please update this code.");
+static_assert(static_cast<GLuint>(DrawElementsType::UnsignedShort) == 1,
+ "Please update this code.");
+static_assert(static_cast<GLuint>(DrawElementsType::UnsignedInt) == 2, "Please update this code.");
+ANGLE_INLINE GLuint GetDrawElementsTypeSize(DrawElementsType type)
+{
+ return (1 << static_cast<GLuint>(type));
+}
+
+ANGLE_INLINE GLuint GetDrawElementsTypeShift(DrawElementsType type)
+{
+ return static_cast<GLuint>(type);
+}
+
// Information about an OpenGL internal format. Can be keyed on the internalFormat and type
// members.
struct InternalFormat
diff --git a/src/libANGLE/renderer/BufferImpl.h b/src/libANGLE/renderer/BufferImpl.h
index e6c12c5..33a3432 100644
--- a/src/libANGLE/renderer/BufferImpl.h
+++ b/src/libANGLE/renderer/BufferImpl.h
@@ -59,7 +59,7 @@
virtual angle::Result unmap(const gl::Context *context, GLboolean *result) = 0;
virtual angle::Result getIndexRange(const gl::Context *context,
- GLenum type,
+ gl::DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
diff --git a/src/libANGLE/renderer/BufferImpl_mock.h b/src/libANGLE/renderer/BufferImpl_mock.h
index 0f32787..7d6901d 100644
--- a/src/libANGLE/renderer/BufferImpl_mock.h
+++ b/src/libANGLE/renderer/BufferImpl_mock.h
@@ -43,9 +43,13 @@
angle::Result(const gl::Context *contextImpl, size_t, size_t, GLbitfield, void **));
MOCK_METHOD2(unmap, angle::Result(const gl::Context *contextImpl, GLboolean *result));
- MOCK_METHOD6(
- getIndexRange,
- angle::Result(const gl::Context *, GLenum, size_t, size_t, bool, gl::IndexRange *));
+ MOCK_METHOD6(getIndexRange,
+ angle::Result(const gl::Context *,
+ gl::DrawElementsType,
+ size_t,
+ size_t,
+ bool,
+ gl::IndexRange *));
MOCK_METHOD0(destructor, void());
diff --git a/src/libANGLE/renderer/ContextImpl.h b/src/libANGLE/renderer/ContextImpl.h
index b07a930..137480c 100644
--- a/src/libANGLE/renderer/ContextImpl.h
+++ b/src/libANGLE/renderer/ContextImpl.h
@@ -54,12 +54,12 @@
virtual angle::Result drawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) = 0;
virtual angle::Result drawElementsInstanced(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances) = 0;
virtual angle::Result drawRangeElements(const gl::Context *context,
@@ -67,7 +67,7 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) = 0;
virtual angle::Result drawArraysIndirect(const gl::Context *context,
@@ -75,7 +75,7 @@
const void *indirect) = 0;
virtual angle::Result drawElementsIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
const void *indirect) = 0;
// CHROMIUM_path_rendering path drawing methods.
diff --git a/src/libANGLE/renderer/d3d/BufferD3D.cpp b/src/libANGLE/renderer/d3d/BufferD3D.cpp
index 2fd5b88..7609eec 100644
--- a/src/libANGLE/renderer/d3d/BufferD3D.cpp
+++ b/src/libANGLE/renderer/d3d/BufferD3D.cpp
@@ -175,7 +175,7 @@
}
angle::Result BufferD3D::getIndexRange(const gl::Context *context,
- GLenum type,
+ gl::DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
diff --git a/src/libANGLE/renderer/d3d/BufferD3D.h b/src/libANGLE/renderer/d3d/BufferD3D.h
index ab96c4e..19ea78c 100644
--- a/src/libANGLE/renderer/d3d/BufferD3D.h
+++ b/src/libANGLE/renderer/d3d/BufferD3D.h
@@ -58,7 +58,7 @@
void promoteStaticUsage(const gl::Context *context, size_t dataSize);
angle::Result getIndexRange(const gl::Context *context,
- GLenum type,
+ gl::DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
diff --git a/src/libANGLE/renderer/d3d/IndexBuffer.cpp b/src/libANGLE/renderer/d3d/IndexBuffer.cpp
index b46c4d1..1b04193 100644
--- a/src/libANGLE/renderer/d3d/IndexBuffer.cpp
+++ b/src/libANGLE/renderer/d3d/IndexBuffer.cpp
@@ -50,7 +50,7 @@
}
}
-GLenum IndexBufferInterface::getIndexType() const
+gl::DrawElementsType IndexBufferInterface::getIndexType() const
{
return mIndexBuffer->getIndexType();
}
@@ -122,7 +122,7 @@
angle::Result IndexBufferInterface::setBufferSize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType)
+ gl::DrawElementsType indexType)
{
if (mIndexBuffer->getBufferSize() == 0)
{
@@ -142,7 +142,7 @@
angle::Result StreamingIndexBufferInterface::reserveBufferSpace(const gl::Context *context,
unsigned int size,
- GLenum indexType)
+ gl::DrawElementsType indexType)
{
unsigned int curBufferSize = getBufferSize();
unsigned int writePos = getWritePosition();
@@ -168,7 +168,7 @@
angle::Result StaticIndexBufferInterface::reserveBufferSpace(const gl::Context *context,
unsigned int size,
- GLenum indexType)
+ gl::DrawElementsType indexType)
{
unsigned int curSize = getBufferSize();
if (curSize == 0)
diff --git a/src/libANGLE/renderer/d3d/IndexBuffer.h b/src/libANGLE/renderer/d3d/IndexBuffer.h
index 7671443..e21bca2 100644
--- a/src/libANGLE/renderer/d3d/IndexBuffer.h
+++ b/src/libANGLE/renderer/d3d/IndexBuffer.h
@@ -10,6 +10,7 @@
#ifndef LIBANGLE_RENDERER_D3D_INDEXBUFFER_H_
#define LIBANGLE_RENDERER_D3D_INDEXBUFFER_H_
+#include "common/PackedEnums.h"
#include "common/angleutils.h"
#include "libANGLE/Error.h"
@@ -30,7 +31,7 @@
virtual angle::Result initialize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType,
+ gl::DrawElementsType indexType,
bool dynamic) = 0;
virtual angle::Result mapBuffer(const gl::Context *context,
@@ -41,11 +42,11 @@
virtual angle::Result discard(const gl::Context *context) = 0;
- virtual GLenum getIndexType() const = 0;
- virtual unsigned int getBufferSize() const = 0;
+ virtual gl::DrawElementsType getIndexType() const = 0;
+ virtual unsigned int getBufferSize() const = 0;
virtual angle::Result setSize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType) = 0;
+ gl::DrawElementsType indexType) = 0;
unsigned int getSerial() const;
@@ -65,9 +66,9 @@
virtual angle::Result reserveBufferSpace(const gl::Context *context,
unsigned int size,
- GLenum indexType) = 0;
+ gl::DrawElementsType indexType) = 0;
- GLenum getIndexType() const;
+ gl::DrawElementsType getIndexType() const;
unsigned int getBufferSize() const;
unsigned int getSerial() const;
@@ -88,7 +89,7 @@
angle::Result setBufferSize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType);
+ gl::DrawElementsType indexType);
private:
IndexBuffer *mIndexBuffer;
@@ -105,7 +106,7 @@
angle::Result reserveBufferSpace(const gl::Context *context,
unsigned int size,
- GLenum indexType) override;
+ gl::DrawElementsType indexType) override;
};
class StaticIndexBufferInterface : public IndexBufferInterface
@@ -116,7 +117,7 @@
angle::Result reserveBufferSpace(const gl::Context *context,
unsigned int size,
- GLenum indexType) override;
+ gl::DrawElementsType indexType) override;
};
} // namespace rx
diff --git a/src/libANGLE/renderer/d3d/IndexDataManager.cpp b/src/libANGLE/renderer/d3d/IndexDataManager.cpp
index 6a96c66..d626ef5 100644
--- a/src/libANGLE/renderer/d3d/IndexDataManager.cpp
+++ b/src/libANGLE/renderer/d3d/IndexDataManager.cpp
@@ -26,9 +26,9 @@
template <typename InputT, typename DestT>
void ConvertIndexArray(const void *input,
- GLenum sourceType,
+ gl::DrawElementsType sourceType,
void *output,
- GLenum destinationType,
+ gl::DrawElementsType destinationType,
GLsizei count,
bool usePrimitiveRestartFixedIndex)
{
@@ -53,8 +53,8 @@
}
}
-void ConvertIndices(GLenum sourceType,
- GLenum destinationType,
+void ConvertIndices(gl::DrawElementsType sourceType,
+ gl::DrawElementsType destinationType,
const void *input,
GLsizei count,
void *output,
@@ -62,20 +62,20 @@
{
if (sourceType == destinationType)
{
- const gl::Type &typeInfo = gl::GetTypeInfo(destinationType);
- memcpy(output, input, count * typeInfo.bytes);
+ const GLuint dstTypeSize = gl::GetDrawElementsTypeSize(destinationType);
+ memcpy(output, input, count * dstTypeSize);
return;
}
- if (sourceType == GL_UNSIGNED_BYTE)
+ if (sourceType == gl::DrawElementsType::UnsignedByte)
{
- ASSERT(destinationType == GL_UNSIGNED_SHORT);
+ ASSERT(destinationType == gl::DrawElementsType::UnsignedShort);
ConvertIndexArray<GLubyte, GLushort>(input, sourceType, output, destinationType, count,
usePrimitiveRestartFixedIndex);
}
- else if (sourceType == GL_UNSIGNED_SHORT)
+ else if (sourceType == gl::DrawElementsType::UnsignedShort)
{
- ASSERT(destinationType == GL_UNSIGNED_INT);
+ ASSERT(destinationType == gl::DrawElementsType::UnsignedInt);
ConvertIndexArray<GLushort, GLuint>(input, sourceType, output, destinationType, count,
usePrimitiveRestartFixedIndex);
}
@@ -87,18 +87,18 @@
IndexBufferInterface *buffer,
const void *data,
unsigned int count,
- GLenum srcType,
- GLenum dstType,
+ gl::DrawElementsType srcType,
+ gl::DrawElementsType dstType,
bool usePrimitiveRestartFixedIndex,
unsigned int *offset)
{
- const gl::Type &dstTypeInfo = gl::GetTypeInfo(dstType);
+ const GLuint dstTypeBytesShift = gl::GetDrawElementsTypeShift(dstType);
- bool check = (count > (std::numeric_limits<unsigned int>::max() >> dstTypeInfo.bytesShift));
+ bool check = (count > (std::numeric_limits<unsigned int>::max() >> dstTypeBytesShift));
ANGLE_CHECK(GetImplAs<ContextD3D>(context), !check,
"Reserving indices exceeds the maximum buffer size.", GL_OUT_OF_MEMORY);
- unsigned int bufferSizeRequired = count << dstTypeInfo.bytesShift;
+ unsigned int bufferSizeRequired = count << dstTypeBytesShift;
ANGLE_TRY(buffer->reserveBufferSpace(context, bufferSizeRequired, dstType));
void *output = nullptr;
@@ -109,30 +109,8 @@
ANGLE_TRY(buffer->unmapBuffer(context));
return angle::Result::Continue();
}
-
-unsigned int ElementTypeSize(GLenum elementType)
-{
- switch (elementType)
- {
- case GL_UNSIGNED_BYTE:
- return sizeof(GLubyte);
- case GL_UNSIGNED_SHORT:
- return sizeof(GLushort);
- case GL_UNSIGNED_INT:
- return sizeof(GLuint);
- default:
- UNREACHABLE();
- return 0;
- }
-}
-
} // anonymous namespace
-bool IsOffsetAligned(GLenum elementType, unsigned int offset)
-{
- return (offset % ElementTypeSize(elementType) == 0);
-}
-
// IndexDataManager implementation.
IndexDataManager::IndexDataManager(BufferFactoryD3D *factory)
: mFactory(factory), mStreamingBufferShort(), mStreamingBufferInt()
@@ -155,15 +133,16 @@
// we will start by falling back to streaming, and after a while will start using a static
// translated copy of the index buffer.
angle::Result IndexDataManager::prepareIndexData(const gl::Context *context,
- GLenum srcType,
- GLenum dstType,
+ gl::DrawElementsType srcType,
+ gl::DrawElementsType dstType,
GLsizei count,
gl::Buffer *glBuffer,
const void *indices,
TranslatedIndexData *translated)
{
- const gl::Type &srcTypeInfo = gl::GetTypeInfo(srcType);
- const gl::Type &dstTypeInfo = gl::GetTypeInfo(dstType);
+ GLuint srcTypeBytes = gl::GetDrawElementsTypeSize(srcType);
+ GLuint srcTypeShift = gl::GetDrawElementsTypeShift(srcType);
+ GLuint dstTypeShift = gl::GetDrawElementsTypeShift(dstType);
BufferD3D *buffer = glBuffer ? GetImplAs<BufferD3D>(glBuffer) : nullptr;
@@ -187,7 +166,7 @@
// Case 2: the indices are already in a buffer
unsigned int offset = static_cast<unsigned int>(reinterpret_cast<uintptr_t>(indices));
- ASSERT(srcTypeInfo.bytes * static_cast<unsigned int>(count) + offset <= buffer->getSize());
+ ASSERT(srcTypeBytes * static_cast<unsigned int>(count) + offset <= buffer->getSize());
bool offsetAligned = IsOffsetAligned(srcType, offset);
@@ -197,7 +176,7 @@
translated->storage = buffer;
translated->indexBuffer = nullptr;
translated->serial = buffer->getSerial();
- translated->startIndex = (offset >> srcTypeInfo.bytesShift);
+ translated->startIndex = (offset >> srcTypeShift);
translated->startOffset = offset;
return angle::Result::Continue();
}
@@ -225,7 +204,7 @@
ANGLE_TRY(streamIndexData(context, bufferData + offset, count, srcType, dstType,
primitiveRestartFixedIndexEnabled, translated));
- buffer->promoteStaticUsage(context, count << srcTypeInfo.bytesShift);
+ buffer->promoteStaticUsage(context, count << srcTypeShift);
}
else
{
@@ -236,7 +215,7 @@
ASSERT(bufferData != nullptr);
unsigned int convertCount =
- static_cast<unsigned int>(buffer->getSize()) >> srcTypeInfo.bytesShift;
+ static_cast<unsigned int>(buffer->getSize()) >> srcTypeShift;
ANGLE_TRY(StreamInIndexBuffer(context, staticBuffer, bufferData, convertCount, srcType,
dstType, primitiveRestartFixedIndexEnabled, nullptr));
}
@@ -244,8 +223,8 @@
translated->indexBuffer = staticBuffer->getIndexBuffer();
translated->serial = staticBuffer->getSerial();
- translated->startIndex = (offset >> srcTypeInfo.bytesShift);
- translated->startOffset = (offset >> srcTypeInfo.bytesShift) << dstTypeInfo.bytesShift;
+ translated->startIndex = (offset >> srcTypeShift);
+ translated->startOffset = (offset >> srcTypeShift) << dstTypeShift;
}
return angle::Result::Continue();
@@ -254,12 +233,12 @@
angle::Result IndexDataManager::streamIndexData(const gl::Context *context,
const void *data,
unsigned int count,
- GLenum srcType,
- GLenum dstType,
+ gl::DrawElementsType srcType,
+ gl::DrawElementsType dstType,
bool usePrimitiveRestartFixedIndex,
TranslatedIndexData *translated)
{
- const gl::Type &dstTypeInfo = gl::GetTypeInfo(dstType);
+ const GLuint dstTypeShift = gl::GetDrawElementsTypeShift(dstType);
IndexBufferInterface *indexBuffer = nullptr;
ANGLE_TRY(getStreamingIndexBuffer(context, dstType, &indexBuffer));
@@ -271,21 +250,23 @@
translated->indexBuffer = indexBuffer->getIndexBuffer();
translated->serial = indexBuffer->getSerial();
- translated->startIndex = (offset >> dstTypeInfo.bytesShift);
+ translated->startIndex = (offset >> dstTypeShift);
translated->startOffset = offset;
return angle::Result::Continue();
}
angle::Result IndexDataManager::getStreamingIndexBuffer(const gl::Context *context,
- GLenum destinationIndexType,
+ gl::DrawElementsType destinationIndexType,
IndexBufferInterface **outBuffer)
{
ASSERT(outBuffer);
- ASSERT(destinationIndexType == GL_UNSIGNED_SHORT || destinationIndexType == GL_UNSIGNED_INT);
+ ASSERT(destinationIndexType == gl::DrawElementsType::UnsignedShort ||
+ destinationIndexType == gl::DrawElementsType::UnsignedInt);
- auto &streamingBuffer =
- (destinationIndexType == GL_UNSIGNED_INT) ? mStreamingBufferInt : mStreamingBufferShort;
+ auto &streamingBuffer = (destinationIndexType == gl::DrawElementsType::UnsignedInt)
+ ? mStreamingBufferInt
+ : mStreamingBufferShort;
if (!streamingBuffer)
{
@@ -301,10 +282,10 @@
angle::Result GetIndexTranslationDestType(const gl::Context *context,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices,
bool usePrimitiveRestartWorkaround,
- GLenum *destTypeOut)
+ gl::DrawElementsType *destTypeOut)
{
// Avoid D3D11's primitive restart index value
// see http://msdn.microsoft.com/en-us/library/windows/desktop/bb205124(v=vs.85).aspx
@@ -314,7 +295,7 @@
// This is a bit of a trick. We assume the count for an indirect draw is zero.
if (indexCount == 0)
{
- *destTypeOut = GL_UNSIGNED_INT;
+ *destTypeOut = gl::DrawElementsType::UnsignedInt;
return angle::Result::Continue();
}
@@ -323,12 +304,14 @@
context, indexType, indexCount, indices, &indexRange));
if (indexRange.end == gl::GetPrimitiveRestartIndex(indexType))
{
- *destTypeOut = GL_UNSIGNED_INT;
+ *destTypeOut = gl::DrawElementsType::UnsignedInt;
return angle::Result::Continue();
}
}
- *destTypeOut = (indexType == GL_UNSIGNED_INT) ? GL_UNSIGNED_INT : GL_UNSIGNED_SHORT;
+ *destTypeOut = (indexType == gl::DrawElementsType::UnsignedInt)
+ ? gl::DrawElementsType::UnsignedInt
+ : gl::DrawElementsType::UnsignedShort;
return angle::Result::Continue();
}
diff --git a/src/libANGLE/renderer/d3d/IndexDataManager.h b/src/libANGLE/renderer/d3d/IndexDataManager.h
index eda4fc9..874580e 100644
--- a/src/libANGLE/renderer/d3d/IndexDataManager.h
+++ b/src/libANGLE/renderer/d3d/IndexDataManager.h
@@ -44,7 +44,7 @@
BufferD3D *srcBuffer;
const void *srcIndices;
unsigned int srcCount;
- GLenum srcIndexType;
+ gl::DrawElementsType srcIndexType;
bool srcIndicesChanged;
};
@@ -55,7 +55,7 @@
IndexBuffer *indexBuffer;
BufferD3D *storage;
- GLenum indexType;
+ gl::DrawElementsType indexType;
unsigned int serial;
SourceIndexData srcIndexData;
@@ -70,8 +70,8 @@
void deinitialize();
angle::Result prepareIndexData(const gl::Context *context,
- GLenum srcType,
- GLenum dstType,
+ gl::DrawElementsType srcType,
+ gl::DrawElementsType dstType,
GLsizei count,
gl::Buffer *glBuffer,
const void *indices,
@@ -81,12 +81,12 @@
angle::Result streamIndexData(const gl::Context *context,
const void *data,
unsigned int count,
- GLenum srcType,
- GLenum dstType,
+ gl::DrawElementsType srcType,
+ gl::DrawElementsType dstType,
bool usePrimitiveRestartFixedIndex,
TranslatedIndexData *translated);
angle::Result getStreamingIndexBuffer(const gl::Context *context,
- GLenum destinationIndexType,
+ gl::DrawElementsType destinationIndexType,
IndexBufferInterface **outBuffer);
using StreamingBuffer = std::unique_ptr<StreamingIndexBufferInterface>;
@@ -98,13 +98,15 @@
angle::Result GetIndexTranslationDestType(const gl::Context *context,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices,
bool usePrimitiveRestartWorkaround,
- GLenum *destTypeOut);
+ gl::DrawElementsType *destTypeOut);
-bool IsOffsetAligned(GLenum elementType, unsigned int offset);
-
+ANGLE_INLINE bool IsOffsetAligned(gl::DrawElementsType elementType, unsigned int offset)
+{
+ return (offset % gl::GetDrawElementsTypeSize(elementType) == 0);
+}
} // namespace rx
#endif // LIBANGLE_INDEXDATAMANAGER_H_
diff --git a/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp b/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp
index 497c55c..df46af1 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/Buffer11.cpp
@@ -1308,13 +1308,13 @@
size_t indicesDataSize = 0;
switch (indexInfo->srcIndexType)
{
- case GL_UNSIGNED_INT:
+ case gl::DrawElementsType::UnsignedInt:
indicesDataSize = sizeof(GLuint) * indexInfo->srcCount;
break;
- case GL_UNSIGNED_SHORT:
+ case gl::DrawElementsType::UnsignedShort:
indicesDataSize = sizeof(GLushort) * indexInfo->srcCount;
break;
- case GL_UNSIGNED_BYTE:
+ case gl::DrawElementsType::UnsignedByte:
indicesDataSize = sizeof(GLubyte) * indexInfo->srcCount;
break;
default:
@@ -1354,15 +1354,18 @@
switch (indexInfo->srcIndexType)
{
- case GL_UNSIGNED_INT:
+ case gl::DrawElementsType::UnsignedInt:
readIndexValue = ReadIndexValueFromIndices<GLuint>;
break;
- case GL_UNSIGNED_SHORT:
+ case gl::DrawElementsType::UnsignedShort:
readIndexValue = ReadIndexValueFromIndices<GLushort>;
break;
- case GL_UNSIGNED_BYTE:
+ case gl::DrawElementsType::UnsignedByte:
readIndexValue = ReadIndexValueFromIndices<GLubyte>;
break;
+ default:
+ UNREACHABLE();
+ return angle::Result::Stop();
}
// Iterate over the cached index data and copy entries indicated into the emulated buffer.
diff --git a/src/libANGLE/renderer/d3d/d3d11/Context11.cpp b/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
index ec7f732..9b9ab9f 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/Context11.cpp
@@ -60,16 +60,17 @@
return false;
}
-bool DrawCallHasStreamingElementArray(const gl::Context *context, GLenum srcType)
+bool DrawCallHasStreamingElementArray(const gl::Context *context, gl::DrawElementsType srcType)
{
const gl::State &glState = context->getGLState();
gl::Buffer *elementArrayBuffer = glState.getVertexArray()->getElementArrayBuffer();
bool primitiveRestartWorkaround =
UsePrimitiveRestartWorkaround(glState.isPrimitiveRestartEnabled(), srcType);
- const GLenum dstType = (srcType == GL_UNSIGNED_INT || primitiveRestartWorkaround)
- ? GL_UNSIGNED_INT
- : GL_UNSIGNED_SHORT;
+ const gl::DrawElementsType dstType =
+ (srcType == gl::DrawElementsType::UnsignedInt || primitiveRestartWorkaround)
+ ? gl::DrawElementsType::UnsignedInt
+ : gl::DrawElementsType::UnsignedShort;
// Not clear where the offset comes from here.
switch (ClassifyIndexStorage(glState, elementArrayBuffer, srcType, dstType, 0))
@@ -246,8 +247,8 @@
GLsizei count)
{
ASSERT(count > 0);
- ANGLE_TRY(mRenderer->getStateManager()->updateState(context, mode, first, count, GL_NONE,
- nullptr, 0, 0));
+ ANGLE_TRY(mRenderer->getStateManager()->updateState(
+ context, mode, first, count, gl::DrawElementsType::InvalidEnum, nullptr, 0, 0));
return mRenderer->drawArrays(context, mode, first, count, 0);
}
@@ -258,15 +259,15 @@
GLsizei instanceCount)
{
ASSERT(count > 0);
- ANGLE_TRY(mRenderer->getStateManager()->updateState(context, mode, first, count, GL_NONE,
- nullptr, instanceCount, 0));
+ ANGLE_TRY(mRenderer->getStateManager()->updateState(
+ context, mode, first, count, gl::DrawElementsType::InvalidEnum, nullptr, instanceCount, 0));
return mRenderer->drawArrays(context, mode, first, count, instanceCount);
}
ANGLE_INLINE angle::Result Context11::drawElementsImpl(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices,
GLsizei instanceCount)
{
@@ -294,7 +295,7 @@
angle::Result Context11::drawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices)
{
return drawElementsImpl(context, mode, count, type, indices, 0);
@@ -303,7 +304,7 @@
angle::Result Context11::drawElementsInstanced(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances)
{
@@ -315,7 +316,7 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices)
{
return drawElementsImpl(context, mode, count, type, indices, 0);
@@ -330,21 +331,22 @@
const gl::DrawArraysIndirectCommand *cmd = nullptr;
ANGLE_TRY(ReadbackIndirectBuffer(context, indirect, &cmd));
- ANGLE_TRY(mRenderer->getStateManager()->updateState(
- context, mode, cmd->first, cmd->count, GL_NONE, nullptr, cmd->instanceCount, 0));
+ ANGLE_TRY(mRenderer->getStateManager()->updateState(context, mode, cmd->first, cmd->count,
+ gl::DrawElementsType::InvalidEnum,
+ nullptr, cmd->instanceCount, 0));
return mRenderer->drawArrays(context, mode, cmd->first, cmd->count, cmd->instanceCount);
}
else
{
- ANGLE_TRY(
- mRenderer->getStateManager()->updateState(context, mode, 0, 0, GL_NONE, nullptr, 0, 0));
+ ANGLE_TRY(mRenderer->getStateManager()->updateState(
+ context, mode, 0, 0, gl::DrawElementsType::InvalidEnum, nullptr, 0, 0));
return mRenderer->drawArraysIndirect(context, indirect);
}
}
angle::Result Context11::drawElementsIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
const void *indirect)
{
if (DrawCallHasStreamingVertexArrays(context, mode) ||
@@ -353,9 +355,9 @@
const gl::DrawElementsIndirectCommand *cmd = nullptr;
ANGLE_TRY(ReadbackIndirectBuffer(context, indirect, &cmd));
- const gl::Type &typeInfo = gl::GetTypeInfo(type);
- const void *indices = reinterpret_cast<const void *>(
- static_cast<uintptr_t>(cmd->firstIndex * typeInfo.bytes));
+ const GLuint typeBytes = gl::GetDrawElementsTypeSize(type);
+ const void *indices =
+ reinterpret_cast<const void *>(static_cast<uintptr_t>(cmd->firstIndex * typeBytes));
// We must explicitly resolve the index range for the slow-path indirect drawElements to
// make sure we are using the correct 'baseVertex'. This parameter does not exist for the
diff --git a/src/libANGLE/renderer/d3d/d3d11/Context11.h b/src/libANGLE/renderer/d3d/d3d11/Context11.h
index e2bde41..4ba58ac 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Context11.h
+++ b/src/libANGLE/renderer/d3d/d3d11/Context11.h
@@ -83,12 +83,12 @@
angle::Result drawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) override;
angle::Result drawElementsInstanced(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances) override;
angle::Result drawRangeElements(const gl::Context *context,
@@ -96,14 +96,14 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) override;
angle::Result drawArraysIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
const void *indirect) override;
angle::Result drawElementsIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
const void *indirect) override;
// Device loss
@@ -171,7 +171,7 @@
angle::Result drawElementsImpl(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices,
GLsizei instanceCount);
diff --git a/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.cpp b/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.cpp
index 7a0d39c..3e3a2b8 100644
--- a/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.cpp
@@ -17,14 +17,18 @@
{
IndexBuffer11::IndexBuffer11(Renderer11 *const renderer)
- : mRenderer(renderer), mBuffer(), mBufferSize(0), mIndexType(GL_NONE), mDynamicUsage(false)
+ : mRenderer(renderer),
+ mBuffer(),
+ mBufferSize(0),
+ mIndexType(gl::DrawElementsType::InvalidEnum),
+ mDynamicUsage(false)
{}
IndexBuffer11::~IndexBuffer11() {}
angle::Result IndexBuffer11::initialize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType,
+ gl::DrawElementsType indexType,
bool dynamic)
{
mBuffer.reset();
@@ -93,7 +97,7 @@
return angle::Result::Continue();
}
-GLenum IndexBuffer11::getIndexType() const
+gl::DrawElementsType IndexBuffer11::getIndexType() const
{
return mIndexType;
}
@@ -105,7 +109,7 @@
angle::Result IndexBuffer11::setSize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType)
+ gl::DrawElementsType indexType)
{
if (bufferSize > mBufferSize || indexType != mIndexType)
{
@@ -136,11 +140,11 @@
{
switch (mIndexType)
{
- case GL_UNSIGNED_BYTE:
+ case gl::DrawElementsType::UnsignedByte:
return DXGI_FORMAT_R16_UINT;
- case GL_UNSIGNED_SHORT:
+ case gl::DrawElementsType::UnsignedShort:
return DXGI_FORMAT_R16_UINT;
- case GL_UNSIGNED_INT:
+ case gl::DrawElementsType::UnsignedInt:
return DXGI_FORMAT_R32_UINT;
default:
UNREACHABLE();
diff --git a/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.h b/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.h
index 76a96d7..8f6f0e6 100644
--- a/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.h
+++ b/src/libANGLE/renderer/d3d/d3d11/IndexBuffer11.h
@@ -24,7 +24,7 @@
angle::Result initialize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType,
+ gl::DrawElementsType indexType,
bool dynamic) override;
angle::Result mapBuffer(const gl::Context *context,
@@ -33,11 +33,11 @@
void **outMappedMemory) override;
angle::Result unmapBuffer(const gl::Context *context) override;
- GLenum getIndexType() const override;
+ gl::DrawElementsType getIndexType() const override;
unsigned int getBufferSize() const override;
angle::Result setSize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType) override;
+ gl::DrawElementsType indexType) override;
angle::Result discard(const gl::Context *context) override;
@@ -49,7 +49,7 @@
d3d11::Buffer mBuffer;
unsigned int mBufferSize;
- GLenum mIndexType;
+ gl::DrawElementsType mIndexType;
bool mDynamicUsage;
};
diff --git a/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp b/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
index 059d515..743551e 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/Renderer11.cpp
@@ -155,7 +155,7 @@
template <typename T>
void CopyLineLoopIndicesWithRestart(const void *indices,
size_t count,
- GLenum indexType,
+ gl::DrawElementsType indexType,
std::vector<GLuint> *bufferOut)
{
GLuint restartIndex = gl::GetPrimitiveRestartIndex(indexType);
@@ -195,22 +195,22 @@
}
void GetLineLoopIndices(const void *indices,
- GLenum indexType,
+ gl::DrawElementsType indexType,
GLuint count,
bool usePrimitiveRestartFixedIndex,
std::vector<GLuint> *bufferOut)
{
- if (indexType != GL_NONE && usePrimitiveRestartFixedIndex)
+ if (indexType != gl::DrawElementsType::InvalidEnum && usePrimitiveRestartFixedIndex)
{
switch (indexType)
{
- case GL_UNSIGNED_BYTE:
+ case gl::DrawElementsType::UnsignedByte:
CopyLineLoopIndicesWithRestart<GLubyte>(indices, count, indexType, bufferOut);
break;
- case GL_UNSIGNED_SHORT:
+ case gl::DrawElementsType::UnsignedShort:
CopyLineLoopIndicesWithRestart<GLushort>(indices, count, indexType, bufferOut);
break;
- case GL_UNSIGNED_INT:
+ case gl::DrawElementsType::UnsignedInt:
CopyLineLoopIndicesWithRestart<GLuint>(indices, count, indexType, bufferOut);
break;
default:
@@ -226,16 +226,16 @@
switch (indexType)
{
// Non-indexed draw
- case GL_NONE:
+ case gl::DrawElementsType::InvalidEnum:
SetLineLoopIndices(&(*bufferOut)[0], count);
break;
- case GL_UNSIGNED_BYTE:
+ case gl::DrawElementsType::UnsignedByte:
CopyLineLoopIndices<GLubyte>(indices, &(*bufferOut)[0], count);
break;
- case GL_UNSIGNED_SHORT:
+ case gl::DrawElementsType::UnsignedShort:
CopyLineLoopIndices<GLushort>(indices, &(*bufferOut)[0], count);
break;
- case GL_UNSIGNED_INT:
+ case gl::DrawElementsType::UnsignedInt:
CopyLineLoopIndices<GLuint>(indices, &(*bufferOut)[0], count);
break;
default:
@@ -260,11 +260,11 @@
template <typename T>
void CopyTriangleFanIndicesWithRestart(const void *indices,
GLuint indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
std::vector<GLuint> *bufferOut)
{
GLuint restartIndex = gl::GetPrimitiveRestartIndex(indexType);
- GLuint d3dRestartIndex = gl::GetPrimitiveRestartIndex(GL_UNSIGNED_INT);
+ GLuint d3dRestartIndex = gl::GetPrimitiveRestartIndex(gl::DrawElementsType::UnsignedInt);
const T *srcPtr = static_cast<const T *>(indices);
Optional<GLuint> vertexA;
Optional<GLuint> vertexB;
@@ -303,22 +303,22 @@
}
void GetTriFanIndices(const void *indices,
- GLenum indexType,
+ gl::DrawElementsType indexType,
GLuint count,
bool usePrimitiveRestartFixedIndex,
std::vector<GLuint> *bufferOut)
{
- if (indexType != GL_NONE && usePrimitiveRestartFixedIndex)
+ if (indexType != gl::DrawElementsType::InvalidEnum && usePrimitiveRestartFixedIndex)
{
switch (indexType)
{
- case GL_UNSIGNED_BYTE:
+ case gl::DrawElementsType::UnsignedByte:
CopyTriangleFanIndicesWithRestart<GLubyte>(indices, count, indexType, bufferOut);
break;
- case GL_UNSIGNED_SHORT:
+ case gl::DrawElementsType::UnsignedShort:
CopyTriangleFanIndicesWithRestart<GLushort>(indices, count, indexType, bufferOut);
break;
- case GL_UNSIGNED_INT:
+ case gl::DrawElementsType::UnsignedInt:
CopyTriangleFanIndicesWithRestart<GLuint>(indices, count, indexType, bufferOut);
break;
default:
@@ -335,16 +335,16 @@
switch (indexType)
{
// Non-indexed draw
- case GL_NONE:
+ case gl::DrawElementsType::InvalidEnum:
SetTriangleFanIndices(&(*bufferOut)[0], numTris);
break;
- case GL_UNSIGNED_BYTE:
+ case gl::DrawElementsType::UnsignedByte:
CopyTriangleFanIndices<GLubyte>(indices, &(*bufferOut)[0], numTris);
break;
- case GL_UNSIGNED_SHORT:
+ case gl::DrawElementsType::UnsignedShort:
CopyTriangleFanIndices<GLushort>(indices, &(*bufferOut)[0], numTris);
break;
- case GL_UNSIGNED_INT:
+ case gl::DrawElementsType::UnsignedInt:
CopyTriangleFanIndices<GLuint>(indices, &(*bufferOut)[0], numTris);
break;
default:
@@ -1503,11 +1503,11 @@
switch (mode)
{
case gl::PrimitiveMode::LineLoop:
- return drawLineLoop(context, clampedVertexCount, GL_NONE, nullptr, 0,
- adjustedInstanceCount);
+ return drawLineLoop(context, clampedVertexCount, gl::DrawElementsType::InvalidEnum,
+ nullptr, 0, adjustedInstanceCount);
case gl::PrimitiveMode::TriangleFan:
- return drawTriangleFan(context, clampedVertexCount, GL_NONE, nullptr, 0,
- adjustedInstanceCount);
+ return drawTriangleFan(context, clampedVertexCount, gl::DrawElementsType::InvalidEnum,
+ nullptr, 0, adjustedInstanceCount);
case gl::PrimitiveMode::Points:
if (getWorkarounds().useInstancedPointSpriteEmulation)
{
@@ -1562,7 +1562,7 @@
gl::PrimitiveMode mode,
GLint startVertex,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices,
GLsizei instanceCount)
{
@@ -1694,7 +1694,7 @@
angle::Result Renderer11::drawLineLoop(const gl::Context *context,
GLuint count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indexPointer,
int baseVertex,
int instances)
@@ -1706,7 +1706,7 @@
const void *indices = indexPointer;
// Get the raw indices for an indexed draw
- if (type != GL_NONE && elementArrayBuffer)
+ if (type != gl::DrawElementsType::InvalidEnum && elementArrayBuffer)
{
BufferD3D *storage = GetImplAs<BufferD3D>(elementArrayBuffer);
intptr_t offset = reinterpret_cast<intptr_t>(indices);
@@ -1720,8 +1720,8 @@
if (!mLineLoopIB)
{
mLineLoopIB = new StreamingIndexBufferInterface(this);
- ANGLE_TRY(
- mLineLoopIB->reserveBufferSpace(context, INITIAL_INDEX_BUFFER_SIZE, GL_UNSIGNED_INT));
+ ANGLE_TRY(mLineLoopIB->reserveBufferSpace(context, INITIAL_INDEX_BUFFER_SIZE,
+ gl::DrawElementsType::UnsignedInt));
}
// Checked by Renderer11::applyPrimitiveType
@@ -1737,7 +1737,8 @@
unsigned int spaceNeeded =
static_cast<unsigned int>(sizeof(GLuint) * mScratchIndexDataBuffer.size());
- ANGLE_TRY(mLineLoopIB->reserveBufferSpace(context, spaceNeeded, GL_UNSIGNED_INT));
+ ANGLE_TRY(
+ mLineLoopIB->reserveBufferSpace(context, spaceNeeded, gl::DrawElementsType::UnsignedInt));
void *mappedMemory = nullptr;
unsigned int offset;
@@ -1771,7 +1772,7 @@
angle::Result Renderer11::drawTriangleFan(const gl::Context *context,
GLuint count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
int baseVertex,
int instances)
@@ -1783,7 +1784,7 @@
const void *indexPointer = indices;
// Get the raw indices for an indexed draw
- if (type != GL_NONE && elementArrayBuffer)
+ if (type != gl::DrawElementsType::InvalidEnum && elementArrayBuffer)
{
BufferD3D *storage = GetImplAs<BufferD3D>(elementArrayBuffer);
intptr_t offset = reinterpret_cast<intptr_t>(indices);
@@ -1798,7 +1799,7 @@
{
mTriangleFanIB = new StreamingIndexBufferInterface(this);
ANGLE_TRY(mTriangleFanIB->reserveBufferSpace(context, INITIAL_INDEX_BUFFER_SIZE,
- GL_UNSIGNED_INT));
+ gl::DrawElementsType::UnsignedInt));
}
// Checked by Renderer11::applyPrimitiveType
@@ -1818,7 +1819,8 @@
const unsigned int spaceNeeded =
static_cast<unsigned int>(mScratchIndexDataBuffer.size() * sizeof(unsigned int));
- ANGLE_TRY(mTriangleFanIB->reserveBufferSpace(context, spaceNeeded, GL_UNSIGNED_INT));
+ ANGLE_TRY(mTriangleFanIB->reserveBufferSpace(context, spaceNeeded,
+ gl::DrawElementsType::UnsignedInt));
void *mappedMemory = nullptr;
unsigned int offset;
diff --git a/src/libANGLE/renderer/d3d/d3d11/Renderer11.h b/src/libANGLE/renderer/d3d/d3d11/Renderer11.h
index dd19d65..6c9f60e 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Renderer11.h
+++ b/src/libANGLE/renderer/d3d/d3d11/Renderer11.h
@@ -408,7 +408,7 @@
gl::PrimitiveMode mode,
GLint startVertex,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices,
GLsizei instanceCount);
angle::Result drawArraysIndirect(const gl::Context *context, const void *indirect);
@@ -509,13 +509,13 @@
angle::Result drawLineLoop(const gl::Context *context,
GLuint count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
int baseVertex,
int instances);
angle::Result drawTriangleFan(const gl::Context *context,
GLuint count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
int baseVertex,
int instances);
diff --git a/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp b/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
index 937801e..890ff57 100644
--- a/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/StateManager11.cpp
@@ -2052,7 +2052,7 @@
gl::PrimitiveMode mode,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
GLsizei instanceCount,
GLint baseVertex)
@@ -2098,7 +2098,7 @@
}
ANGLE_TRY(mVertexArray11->syncStateForDraw(context, firstVertex, vertexOrIndexCount,
- indexTypeOrNone, indices, instanceCount,
+ indexTypeOrInvalid, indices, instanceCount,
baseVertex));
// Changes in the draw call can affect the vertex buffer translations.
@@ -2108,9 +2108,9 @@
invalidateInputLayout();
}
- if (indexTypeOrNone != GL_NONE)
+ if (indexTypeOrInvalid != gl::DrawElementsType::InvalidEnum)
{
- ANGLE_TRY(applyIndexBuffer(context, vertexOrIndexCount, indexTypeOrNone, indices));
+ ANGLE_TRY(applyIndexBuffer(context, vertexOrIndexCount, indexTypeOrInvalid, indices));
}
if (mLastAppliedDrawMode != mode)
@@ -2185,7 +2185,7 @@
break;
case DIRTY_BIT_VERTEX_BUFFERS_AND_INPUT_LAYOUT:
ANGLE_TRY(syncVertexBuffersAndInputLayout(context, mode, firstVertex,
- vertexOrIndexCount, indexTypeOrNone,
+ vertexOrIndexCount, indexTypeOrInvalid,
instanceCount));
break;
case DIRTY_BIT_PRIMITIVE_TOPOLOGY:
@@ -2802,12 +2802,13 @@
return angle::Result::Continue();
}
-angle::Result StateManager11::syncVertexBuffersAndInputLayout(const gl::Context *context,
- gl::PrimitiveMode mode,
- GLint firstVertex,
- GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
- GLsizei instanceCount)
+angle::Result StateManager11::syncVertexBuffersAndInputLayout(
+ const gl::Context *context,
+ gl::PrimitiveMode mode,
+ GLint firstVertex,
+ GLsizei vertexOrIndexCount,
+ gl::DrawElementsType indexTypeOrInvalid,
+ GLsizei instanceCount)
{
const auto &vertexArrayAttribs = mVertexArray11->getTranslatedAttribs();
@@ -2842,14 +2843,14 @@
setInputLayoutInternal(inputLayout);
// Update the applied vertex buffers.
- ANGLE_TRY(applyVertexBuffers(context, mode, indexTypeOrNone, firstVertex));
+ ANGLE_TRY(applyVertexBuffers(context, mode, indexTypeOrInvalid, firstVertex));
return angle::Result::Continue();
}
angle::Result StateManager11::applyVertexBuffers(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
GLint firstVertex)
{
bool programUsesInstancedPointSprites =
@@ -2882,7 +2883,8 @@
ASSERT(attrib.vertexBuffer.get());
buffer = GetAs<VertexBuffer11>(attrib.vertexBuffer.get())->getBuffer().get();
}
- else if (instancedPointSpritesActive && indexTypeOrNone != GL_NONE)
+ else if (instancedPointSpritesActive &&
+ indexTypeOrInvalid != gl::DrawElementsType::InvalidEnum)
{
ASSERT(mVertexArray11->isCachedIndexInfoValid());
TranslatedIndexData indexInfo = mVertexArray11->getCachedIndexInfo();
@@ -2997,7 +2999,7 @@
angle::Result StateManager11::applyIndexBuffer(const gl::Context *context,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices)
{
if (!mIndexBufferIsDirty)
@@ -3006,16 +3008,17 @@
return angle::Result::Continue();
}
- GLenum destElementType = mVertexArray11->getCachedDestinationIndexType();
- gl::Buffer *elementArrayBuffer = mVertexArray11->getState().getElementArrayBuffer();
+ gl::DrawElementsType destElementType = mVertexArray11->getCachedDestinationIndexType();
+ gl::Buffer *elementArrayBuffer = mVertexArray11->getState().getElementArrayBuffer();
TranslatedIndexData indexInfo;
ANGLE_TRY(mIndexDataManager.prepareIndexData(context, indexType, destElementType, indexCount,
elementArrayBuffer, indices, &indexInfo));
- ID3D11Buffer *buffer = nullptr;
- DXGI_FORMAT bufferFormat =
- (indexInfo.indexType == GL_UNSIGNED_INT) ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT;
+ ID3D11Buffer *buffer = nullptr;
+ DXGI_FORMAT bufferFormat = (indexInfo.indexType == gl::DrawElementsType::UnsignedInt)
+ ? DXGI_FORMAT_R32_UINT
+ : DXGI_FORMAT_R16_UINT;
if (indexInfo.storage)
{
diff --git a/src/libANGLE/renderer/d3d/d3d11/StateManager11.h b/src/libANGLE/renderer/d3d/d3d11/StateManager11.h
index 6ca8da9..eb22232 100644
--- a/src/libANGLE/renderer/d3d/d3d11/StateManager11.h
+++ b/src/libANGLE/renderer/d3d/d3d11/StateManager11.h
@@ -212,7 +212,7 @@
gl::PrimitiveMode mode,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
GLsizei instanceCount,
GLint baseVertex);
@@ -365,14 +365,14 @@
gl::PrimitiveMode mode,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
GLsizei instanceCount);
bool setInputLayoutInternal(const d3d11::InputLayout *inputLayout);
angle::Result applyVertexBuffers(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
GLint firstVertex);
// TODO(jmadill): Migrate to d3d11::Buffer.
bool queueVertexBufferChange(size_t bufferIndex,
@@ -386,7 +386,7 @@
// Not handled by an internal dirty bit because it isn't synced on drawArrays calls.
angle::Result applyIndexBuffer(const gl::Context *context,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices);
enum DirtyBitType
diff --git a/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp b/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp
index 27321b0..c12cfd0 100644
--- a/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/VertexArray11.cpp
@@ -25,7 +25,7 @@
mTranslatedAttribs(data.getMaxAttribs()),
mAppliedNumViewsToDivisor(1),
mCurrentElementArrayStorage(IndexStorageType::Invalid),
- mCachedDestinationIndexType(GL_NONE)
+ mCachedDestinationIndexType(gl::DrawElementsType::InvalidEnum)
{}
VertexArray11::~VertexArray11() {}
@@ -122,7 +122,7 @@
angle::Result VertexArray11::syncStateForDraw(const gl::Context *context,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
GLsizei instances,
GLint baseVertex)
@@ -156,24 +156,24 @@
if (activeDynamicAttribs.any())
{
ANGLE_TRY(updateDynamicAttribs(context, stateManager->getVertexDataManager(),
- firstVertex, vertexOrIndexCount, indexTypeOrNone,
+ firstVertex, vertexOrIndexCount, indexTypeOrInvalid,
indices, instances, baseVertex, activeDynamicAttribs));
stateManager->invalidateInputLayout();
}
}
- if (indexTypeOrNone != GL_NONE)
+ if (indexTypeOrInvalid != gl::DrawElementsType::InvalidEnum)
{
bool restartEnabled = context->getGLState().isPrimitiveRestartEnabled();
- if (!mLastDrawElementsType.valid() || mLastDrawElementsType.value() != indexTypeOrNone ||
+ if (!mLastDrawElementsType.valid() || mLastDrawElementsType.value() != indexTypeOrInvalid ||
mLastDrawElementsIndices.value() != indices ||
mLastPrimitiveRestartEnabled.value() != restartEnabled)
{
- mLastDrawElementsType = indexTypeOrNone;
+ mLastDrawElementsType = indexTypeOrInvalid;
mLastDrawElementsIndices = indices;
mLastPrimitiveRestartEnabled = restartEnabled;
- ANGLE_TRY(updateElementArrayStorage(context, vertexOrIndexCount, indexTypeOrNone,
+ ANGLE_TRY(updateElementArrayStorage(context, vertexOrIndexCount, indexTypeOrInvalid,
indices, restartEnabled));
stateManager->invalidateIndexBuffer();
}
@@ -188,7 +188,7 @@
angle::Result VertexArray11::updateElementArrayStorage(const gl::Context *context,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices,
bool restartEnabled)
{
@@ -286,7 +286,7 @@
VertexDataManager *vertexDataManager,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
GLsizei instances,
GLint baseVertex,
@@ -298,8 +298,8 @@
GLint startVertex;
size_t vertexCount;
- ANGLE_TRY(GetVertexRangeInfo(context, firstVertex, vertexOrIndexCount, indexTypeOrNone, indices,
- baseVertex, &startVertex, &vertexCount));
+ ANGLE_TRY(GetVertexRangeInfo(context, firstVertex, vertexOrIndexCount, indexTypeOrInvalid,
+ indices, baseVertex, &startVertex, &vertexCount));
for (size_t dynamicAttribIndex : activeDynamicAttribs)
{
@@ -352,7 +352,7 @@
return mCachedIndexInfo.valid();
}
-GLenum VertexArray11::getCachedDestinationIndexType() const
+gl::DrawElementsType VertexArray11::getCachedDestinationIndexType() const
{
return mCachedDestinationIndexType;
}
diff --git a/src/libANGLE/renderer/d3d/d3d11/VertexArray11.h b/src/libANGLE/renderer/d3d/d3d11/VertexArray11.h
index f75f1fd..9930b14 100644
--- a/src/libANGLE/renderer/d3d/d3d11/VertexArray11.h
+++ b/src/libANGLE/renderer/d3d/d3d11/VertexArray11.h
@@ -36,7 +36,7 @@
angle::Result syncStateForDraw(const gl::Context *context,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
GLsizei instances,
GLint baseVertex);
@@ -56,7 +56,7 @@
void updateCachedIndexInfo(const TranslatedIndexData &indexInfo);
bool isCachedIndexInfoValid() const;
- GLenum getCachedDestinationIndexType() const;
+ gl::DrawElementsType getCachedDestinationIndexType() const;
private:
void updateVertexAttribStorage(const gl::Context *context,
@@ -68,7 +68,7 @@
VertexDataManager *vertexDataManager,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
GLsizei instances,
GLint baseVertex,
@@ -76,7 +76,7 @@
angle::Result updateElementArrayStorage(const gl::Context *context,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices,
bool restartEnabled);
@@ -95,12 +95,12 @@
int mAppliedNumViewsToDivisor;
// If the index buffer needs re-streaming.
- Optional<GLenum> mLastDrawElementsType;
+ Optional<gl::DrawElementsType> mLastDrawElementsType;
Optional<const void *> mLastDrawElementsIndices;
Optional<bool> mLastPrimitiveRestartEnabled;
IndexStorageType mCurrentElementArrayStorage;
Optional<TranslatedIndexData> mCachedIndexInfo;
- GLenum mCachedDestinationIndexType;
+ gl::DrawElementsType mCachedDestinationIndexType;
};
} // namespace rx
diff --git a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
index f262b2d..ba4af4c 100644
--- a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
@@ -2503,17 +2503,18 @@
renderer->presentPathFastEnabled());
}
-bool UsePrimitiveRestartWorkaround(bool primitiveRestartFixedIndexEnabled, GLenum type)
+bool UsePrimitiveRestartWorkaround(bool primitiveRestartFixedIndexEnabled,
+ gl::DrawElementsType type)
{
// We should never have to deal with primitive restart workaround issue with GL_UNSIGNED_INT
// indices, since we restrict it via MAX_ELEMENT_INDEX.
- return (!primitiveRestartFixedIndexEnabled && type == GL_UNSIGNED_SHORT);
+ return (!primitiveRestartFixedIndexEnabled && type == gl::DrawElementsType::UnsignedShort);
}
IndexStorageType ClassifyIndexStorage(const gl::State &glState,
const gl::Buffer *elementArrayBuffer,
- GLenum elementType,
- GLenum destElementType,
+ gl::DrawElementsType elementType,
+ gl::DrawElementsType destElementType,
unsigned int offset)
{
// No buffer bound means we are streaming from a client pointer.
diff --git a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
index c1e2f1a..ed5b5ec 100644
--- a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
+++ b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.h
@@ -422,7 +422,8 @@
};
bool UsePresentPathFast(const Renderer11 *renderer, const gl::FramebufferAttachment *colorbuffer);
-bool UsePrimitiveRestartWorkaround(bool primitiveRestartFixedIndexEnabled, GLenum type);
+bool UsePrimitiveRestartWorkaround(bool primitiveRestartFixedIndexEnabled,
+ gl::DrawElementsType type);
enum class IndexStorageType
{
@@ -443,8 +444,8 @@
IndexStorageType ClassifyIndexStorage(const gl::State &glState,
const gl::Buffer *elementArrayBuffer,
- GLenum elementType,
- GLenum destElementType,
+ gl::DrawElementsType elementType,
+ gl::DrawElementsType destElementType,
unsigned int offset);
} // namespace rx
diff --git a/src/libANGLE/renderer/d3d/d3d9/Context9.cpp b/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
index 412a20f..62422e4 100644
--- a/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
+++ b/src/libANGLE/renderer/d3d/d3d9/Context9.cpp
@@ -163,7 +163,7 @@
angle::Result Context9::drawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices)
{
return mRenderer->genericDrawElements(context, mode, count, type, indices, 0);
@@ -172,7 +172,7 @@
angle::Result Context9::drawElementsInstanced(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances)
{
@@ -184,7 +184,7 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices)
{
return mRenderer->genericDrawElements(context, mode, count, type, indices, 0);
@@ -200,7 +200,7 @@
angle::Result Context9::drawElementsIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
const void *indirect)
{
ANGLE_HR_UNREACHABLE(this);
diff --git a/src/libANGLE/renderer/d3d/d3d9/Context9.h b/src/libANGLE/renderer/d3d/d3d9/Context9.h
index f9f1456..ba4f29a 100644
--- a/src/libANGLE/renderer/d3d/d3d9/Context9.h
+++ b/src/libANGLE/renderer/d3d/d3d9/Context9.h
@@ -82,12 +82,12 @@
angle::Result drawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) override;
angle::Result drawElementsInstanced(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances) override;
angle::Result drawRangeElements(const gl::Context *context,
@@ -95,14 +95,14 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) override;
angle::Result drawArraysIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
const void *indirect) override;
angle::Result drawElementsIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
const void *indirect) override;
// Device loss
diff --git a/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.cpp b/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.cpp
index f1b2cc4..ce1fdb7 100644
--- a/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.cpp
+++ b/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.cpp
@@ -18,7 +18,7 @@
{
mIndexBuffer = nullptr;
mBufferSize = 0;
- mIndexType = 0;
+ mIndexType = gl::DrawElementsType::InvalidEnum;
mDynamic = false;
}
@@ -29,7 +29,7 @@
angle::Result IndexBuffer9::initialize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType,
+ gl::DrawElementsType indexType,
bool dynamic)
{
SafeRelease(mIndexBuffer);
@@ -39,11 +39,12 @@
if (bufferSize > 0)
{
D3DFORMAT format = D3DFMT_UNKNOWN;
- if (indexType == GL_UNSIGNED_SHORT || indexType == GL_UNSIGNED_BYTE)
+ if (indexType == gl::DrawElementsType::UnsignedShort ||
+ indexType == gl::DrawElementsType::UnsignedByte)
{
format = D3DFMT_INDEX16;
}
- else if (indexType == GL_UNSIGNED_INT)
+ else if (indexType == gl::DrawElementsType::UnsignedInt)
{
ASSERT(mRenderer->getNativeExtensions().elementIndexUint);
format = D3DFMT_INDEX32;
@@ -96,7 +97,7 @@
return angle::Result::Continue();
}
-GLenum IndexBuffer9::getIndexType() const
+gl::DrawElementsType IndexBuffer9::getIndexType() const
{
return mIndexType;
}
@@ -108,7 +109,7 @@
angle::Result IndexBuffer9::setSize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType)
+ gl::DrawElementsType indexType)
{
if (bufferSize > mBufferSize || indexType != mIndexType)
{
@@ -140,11 +141,11 @@
{
switch (mIndexType)
{
- case GL_UNSIGNED_BYTE:
+ case gl::DrawElementsType::UnsignedByte:
return D3DFMT_INDEX16;
- case GL_UNSIGNED_SHORT:
+ case gl::DrawElementsType::UnsignedShort:
return D3DFMT_INDEX16;
- case GL_UNSIGNED_INT:
+ case gl::DrawElementsType::UnsignedInt:
return D3DFMT_INDEX32;
default:
UNREACHABLE();
diff --git a/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.h b/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.h
index 0aaf525..ca7cc20 100644
--- a/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.h
+++ b/src/libANGLE/renderer/d3d/d3d9/IndexBuffer9.h
@@ -23,7 +23,7 @@
angle::Result initialize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType,
+ gl::DrawElementsType indexType,
bool dynamic) override;
angle::Result mapBuffer(const gl::Context *context,
@@ -32,11 +32,11 @@
void **outMappedMemory) override;
angle::Result unmapBuffer(const gl::Context *context) override;
- GLenum getIndexType() const override;
+ gl::DrawElementsType getIndexType() const override;
unsigned int getBufferSize() const override;
angle::Result setSize(const gl::Context *context,
unsigned int bufferSize,
- GLenum indexType) override;
+ gl::DrawElementsType indexType) override;
angle::Result discard(const gl::Context *context) override;
@@ -48,7 +48,7 @@
IDirect3DIndexBuffer9 *mIndexBuffer;
unsigned int mBufferSize;
- GLenum mIndexType;
+ gl::DrawElementsType mIndexType;
bool mDynamic;
};
diff --git a/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp b/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
index f578328..4fa012d 100644
--- a/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
+++ b/src/libANGLE/renderer/d3d/d3d9/Renderer9.cpp
@@ -1301,13 +1301,13 @@
const void *indices,
GLsizei count,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
TranslatedIndexData *indexInfo)
{
gl::VertexArray *vao = context->getGLState().getVertexArray();
gl::Buffer *elementArrayBuffer = vao->getElementArrayBuffer();
- GLenum dstType = GL_NONE;
+ gl::DrawElementsType dstType = gl::DrawElementsType::InvalidEnum;
ANGLE_TRY(GetIndexTranslationDestType(context, count, type, indices, false, &dstType));
ANGLE_TRY(mIndexDataManager->prepareIndexData(context, type, dstType, count, elementArrayBuffer,
@@ -1339,7 +1339,7 @@
if (mode == gl::PrimitiveMode::LineLoop)
{
- return drawLineLoop(context, count, GL_NONE, nullptr, 0, nullptr);
+ return drawLineLoop(context, count, gl::DrawElementsType::InvalidEnum, nullptr, 0, nullptr);
}
if (instances > 0)
@@ -1371,7 +1371,7 @@
angle::Result Renderer9::drawElementsImpl(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances)
{
@@ -1415,13 +1415,13 @@
angle::Result Renderer9::drawLineLoop(const gl::Context *context,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
int minIndex,
gl::Buffer *elementArrayBuffer)
{
// Get the raw indices for an indexed draw
- if (type != GL_NONE && elementArrayBuffer)
+ if (type != gl::DrawElementsType::InvalidEnum && elementArrayBuffer)
{
BufferD3D *storage = GetImplAs<BufferD3D>(elementArrayBuffer);
intptr_t offset = reinterpret_cast<intptr_t>(indices);
@@ -1439,7 +1439,7 @@
{
mLineLoopIB = new StreamingIndexBufferInterface(this);
ANGLE_TRY(mLineLoopIB->reserveBufferSpace(context, INITIAL_INDEX_BUFFER_SIZE,
- GL_UNSIGNED_INT));
+ gl::DrawElementsType::UnsignedInt));
}
// Checked by Renderer9::applyPrimitiveType
@@ -1454,7 +1454,8 @@
const unsigned int spaceNeeded =
(static_cast<unsigned int>(count) + 1) * sizeof(unsigned int);
- ANGLE_TRY(mLineLoopIB->reserveBufferSpace(context, spaceNeeded, GL_UNSIGNED_INT));
+ ANGLE_TRY(mLineLoopIB->reserveBufferSpace(context, spaceNeeded,
+ gl::DrawElementsType::UnsignedInt));
void *mappedMemory = nullptr;
unsigned int offset = 0;
@@ -1465,28 +1466,28 @@
switch (type)
{
- case GL_NONE: // Non-indexed draw
+ case gl::DrawElementsType::InvalidEnum: // Non-indexed draw
for (int i = 0; i < count; i++)
{
data[i] = i;
}
data[count] = 0;
break;
- case GL_UNSIGNED_BYTE:
+ case gl::DrawElementsType::UnsignedByte:
for (int i = 0; i < count; i++)
{
data[i] = static_cast<const GLubyte *>(indices)[i];
}
data[count] = static_cast<const GLubyte *>(indices)[0];
break;
- case GL_UNSIGNED_SHORT:
+ case gl::DrawElementsType::UnsignedShort:
for (int i = 0; i < count; i++)
{
data[i] = static_cast<const GLushort *>(indices)[i];
}
data[count] = static_cast<const GLushort *>(indices)[0];
break;
- case GL_UNSIGNED_INT:
+ case gl::DrawElementsType::UnsignedInt:
for (int i = 0; i < count; i++)
{
data[i] = static_cast<const GLuint *>(indices)[i];
@@ -1505,7 +1506,7 @@
{
mLineLoopIB = new StreamingIndexBufferInterface(this);
ANGLE_TRY(mLineLoopIB->reserveBufferSpace(context, INITIAL_INDEX_BUFFER_SIZE,
- GL_UNSIGNED_SHORT));
+ gl::DrawElementsType::UnsignedShort));
}
// Checked by Renderer9::applyPrimitiveType
@@ -1520,7 +1521,8 @@
const unsigned int spaceNeeded =
(static_cast<unsigned int>(count) + 1) * sizeof(unsigned short);
- ANGLE_TRY(mLineLoopIB->reserveBufferSpace(context, spaceNeeded, GL_UNSIGNED_SHORT));
+ ANGLE_TRY(mLineLoopIB->reserveBufferSpace(context, spaceNeeded,
+ gl::DrawElementsType::UnsignedShort));
void *mappedMemory = nullptr;
unsigned int offset;
@@ -1531,28 +1533,28 @@
switch (type)
{
- case GL_NONE: // Non-indexed draw
+ case gl::DrawElementsType::InvalidEnum: // Non-indexed draw
for (int i = 0; i < count; i++)
{
data[i] = static_cast<unsigned short>(i);
}
data[count] = 0;
break;
- case GL_UNSIGNED_BYTE:
+ case gl::DrawElementsType::UnsignedByte:
for (int i = 0; i < count; i++)
{
data[i] = static_cast<const GLubyte *>(indices)[i];
}
data[count] = static_cast<const GLubyte *>(indices)[0];
break;
- case GL_UNSIGNED_SHORT:
+ case gl::DrawElementsType::UnsignedShort:
for (int i = 0; i < count; i++)
{
data[i] = static_cast<const GLushort *>(indices)[i];
}
data[count] = static_cast<const GLushort *>(indices)[0];
break;
- case GL_UNSIGNED_INT:
+ case gl::DrawElementsType::UnsignedInt:
for (int i = 0; i < count; i++)
{
data[i] = static_cast<unsigned short>(static_cast<const GLuint *>(indices)[i]);
@@ -1581,7 +1583,7 @@
angle::Result Renderer9::drawIndexedPoints(const gl::Context *context,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
int minIndex,
gl::Buffer *elementArrayBuffer)
@@ -1601,13 +1603,13 @@
switch (type)
{
- case GL_UNSIGNED_BYTE:
+ case gl::DrawElementsType::UnsignedByte:
DrawPoints<GLubyte>(mDevice, count, indices, minIndex);
return angle::Result::Continue();
- case GL_UNSIGNED_SHORT:
+ case gl::DrawElementsType::UnsignedShort:
DrawPoints<GLushort>(mDevice, count, indices, minIndex);
return angle::Result::Continue();
- case GL_UNSIGNED_INT:
+ case gl::DrawElementsType::UnsignedInt:
DrawPoints<GLuint>(mDevice, count, indices, minIndex);
return angle::Result::Continue();
default:
@@ -1628,7 +1630,8 @@
{
SafeDelete(mCountingIB);
mCountingIB = new StaticIndexBufferInterface(this);
- ANGLE_TRY(mCountingIB->reserveBufferSpace(context, spaceNeeded, GL_UNSIGNED_SHORT));
+ ANGLE_TRY(mCountingIB->reserveBufferSpace(context, spaceNeeded,
+ gl::DrawElementsType::UnsignedShort));
void *mappedMemory = nullptr;
ANGLE_TRY(mCountingIB->mapBuffer(context, spaceNeeded, &mappedMemory, nullptr));
@@ -1650,7 +1653,8 @@
{
SafeDelete(mCountingIB);
mCountingIB = new StaticIndexBufferInterface(this);
- ANGLE_TRY(mCountingIB->reserveBufferSpace(context, spaceNeeded, GL_UNSIGNED_INT));
+ ANGLE_TRY(mCountingIB->reserveBufferSpace(context, spaceNeeded,
+ gl::DrawElementsType::UnsignedInt));
void *mappedMemory = nullptr;
ANGLE_TRY(mCountingIB->mapBuffer(context, spaceNeeded, &mappedMemory, nullptr));
@@ -2972,7 +2976,7 @@
angle::Result Renderer9::genericDrawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances)
{
diff --git a/src/libANGLE/renderer/d3d/d3d9/Renderer9.h b/src/libANGLE/renderer/d3d/d3d9/Renderer9.h
index ffe57ba..a0444a8 100644
--- a/src/libANGLE/renderer/d3d/d3d9/Renderer9.h
+++ b/src/libANGLE/renderer/d3d/d3d9/Renderer9.h
@@ -159,7 +159,7 @@
const void *indices,
GLsizei count,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
TranslatedIndexData *indexInfo);
void clear(const ClearParameters &clearParams,
@@ -390,7 +390,7 @@
angle::Result genericDrawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances);
@@ -424,7 +424,7 @@
angle::Result drawElementsImpl(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances);
@@ -450,13 +450,13 @@
angle::Result drawLineLoop(const gl::Context *context,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
int minIndex,
gl::Buffer *elementArrayBuffer);
angle::Result drawIndexedPoints(const gl::Context *context,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
int minIndex,
gl::Buffer *elementArrayBuffer);
diff --git a/src/libANGLE/renderer/gl/BufferGL.cpp b/src/libANGLE/renderer/gl/BufferGL.cpp
index 261c951..22920db 100644
--- a/src/libANGLE/renderer/gl/BufferGL.cpp
+++ b/src/libANGLE/renderer/gl/BufferGL.cpp
@@ -195,7 +195,7 @@
}
angle::Result BufferGL::getIndexRange(const gl::Context *context,
- GLenum type,
+ gl::DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
@@ -212,10 +212,10 @@
{
mStateManager->bindBuffer(DestBufferOperationTarget, mBufferID);
- const gl::Type &typeInfo = gl::GetTypeInfo(type);
+ const GLuint typeBytes = gl::GetDrawElementsTypeSize(type);
const uint8_t *bufferData =
MapBufferRangeWithFallback(mFunctions, gl::ToGLenum(DestBufferOperationTarget), offset,
- count * typeInfo.bytes, GL_MAP_READ_BIT);
+ count * typeBytes, GL_MAP_READ_BIT);
*outRange = gl::ComputeIndexRange(type, bufferData, count, primitiveRestartEnabled);
mFunctions->unmapBuffer(gl::ToGLenum(DestBufferOperationTarget));
}
diff --git a/src/libANGLE/renderer/gl/BufferGL.h b/src/libANGLE/renderer/gl/BufferGL.h
index 285da0c..1d93faa 100644
--- a/src/libANGLE/renderer/gl/BufferGL.h
+++ b/src/libANGLE/renderer/gl/BufferGL.h
@@ -50,7 +50,7 @@
angle::Result unmap(const gl::Context *context, GLboolean *result) override;
angle::Result getIndexRange(const gl::Context *context,
- GLenum type,
+ gl::DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
diff --git a/src/libANGLE/renderer/gl/ContextGL.cpp b/src/libANGLE/renderer/gl/ContextGL.cpp
index e8b9846..65edb91 100644
--- a/src/libANGLE/renderer/gl/ContextGL.cpp
+++ b/src/libANGLE/renderer/gl/ContextGL.cpp
@@ -204,7 +204,7 @@
ANGLE_INLINE angle::Result ContextGL::setDrawElementsState(const gl::Context *context,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instanceCount,
const void **outIndices)
@@ -283,7 +283,7 @@
angle::Result ContextGL::drawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices)
{
const gl::Program *program = context->getGLState().getProgram();
@@ -294,11 +294,11 @@
ANGLE_TRY(setDrawElementsState(context, count, type, indices, instanceCount, &drawIndexPtr));
if (!usesMultiview)
{
- getFunctions()->drawElements(ToGLenum(mode), count, type, drawIndexPtr);
+ getFunctions()->drawElements(ToGLenum(mode), count, ToGLenum(type), drawIndexPtr);
}
else
{
- getFunctions()->drawElementsInstanced(ToGLenum(mode), count, type, drawIndexPtr,
+ getFunctions()->drawElementsInstanced(ToGLenum(mode), count, ToGLenum(type), drawIndexPtr,
instanceCount);
}
return angle::Result::Continue();
@@ -307,7 +307,7 @@
angle::Result ContextGL::drawElementsInstanced(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances)
{
@@ -321,7 +321,7 @@
ANGLE_TRY(setDrawElementsState(context, count, type, indices, adjustedInstanceCount,
&drawIndexPointer));
- getFunctions()->drawElementsInstanced(ToGLenum(mode), count, type, drawIndexPointer,
+ getFunctions()->drawElementsInstanced(ToGLenum(mode), count, ToGLenum(type), drawIndexPointer,
adjustedInstanceCount);
return angle::Result::Continue();
}
@@ -331,7 +331,7 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices)
{
const gl::Program *program = context->getGLState().getProgram();
@@ -343,13 +343,13 @@
setDrawElementsState(context, count, type, indices, instanceCount, &drawIndexPointer));
if (!usesMultiview)
{
- getFunctions()->drawRangeElements(ToGLenum(mode), start, end, count, type,
+ getFunctions()->drawRangeElements(ToGLenum(mode), start, end, count, ToGLenum(type),
drawIndexPointer);
}
else
{
- getFunctions()->drawElementsInstanced(ToGLenum(mode), count, type, drawIndexPointer,
- instanceCount);
+ getFunctions()->drawElementsInstanced(ToGLenum(mode), count, ToGLenum(type),
+ drawIndexPointer, instanceCount);
}
return angle::Result::Continue();
}
@@ -365,11 +365,11 @@
angle::Result ContextGL::drawElementsIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
const void *indirect)
{
ANGLE_TRY(setDrawIndirectState(context));
- getFunctions()->drawElementsIndirect(ToGLenum(mode), type, indirect);
+ getFunctions()->drawElementsIndirect(ToGLenum(mode), ToGLenum(type), indirect);
return angle::Result::Continue();
}
diff --git a/src/libANGLE/renderer/gl/ContextGL.h b/src/libANGLE/renderer/gl/ContextGL.h
index 3ae0161..5077036 100644
--- a/src/libANGLE/renderer/gl/ContextGL.h
+++ b/src/libANGLE/renderer/gl/ContextGL.h
@@ -91,12 +91,12 @@
angle::Result drawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) override;
angle::Result drawElementsInstanced(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances) override;
angle::Result drawRangeElements(const gl::Context *context,
@@ -104,14 +104,14 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) override;
angle::Result drawArraysIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
const void *indirect) override;
angle::Result drawElementsIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
const void *indirect) override;
// CHROMIUM_path_rendering implementation
@@ -219,7 +219,7 @@
angle::Result setDrawElementsState(const gl::Context *context,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instanceCount,
const void **outIndices);
diff --git a/src/libANGLE/renderer/gl/VertexArrayGL.cpp b/src/libANGLE/renderer/gl/VertexArrayGL.cpp
index 9118abb..14e5476 100644
--- a/src/libANGLE/renderer/gl/VertexArrayGL.cpp
+++ b/src/libANGLE/renderer/gl/VertexArrayGL.cpp
@@ -108,14 +108,14 @@
GLsizei count,
GLsizei instanceCount) const
{
- return syncDrawState(context, activeAttributesMask, first, count, GL_NONE, nullptr,
- instanceCount, false, nullptr);
+ return syncDrawState(context, activeAttributesMask, first, count,
+ gl::DrawElementsType::InvalidEnum, nullptr, instanceCount, false, nullptr);
}
angle::Result VertexArrayGL::syncDrawElementsState(const gl::Context *context,
const gl::AttributesMask &activeAttributesMask,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instanceCount,
bool primitiveRestartEnabled,
@@ -140,7 +140,7 @@
const gl::AttributesMask &activeAttributesMask,
GLint first,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instanceCount,
bool primitiveRestartEnabled,
@@ -154,7 +154,7 @@
// Determine if an index buffer needs to be streamed and the range of vertices that need to be
// copied
IndexRange indexRange;
- if (type != GL_NONE)
+ if (type != gl::DrawElementsType::InvalidEnum)
{
ANGLE_TRY(syncIndexData(context, count, type, indices, primitiveRestartEnabled,
needsStreamingAttribs.any(), &indexRange, outIndices));
@@ -176,7 +176,7 @@
angle::Result VertexArrayGL::syncIndexData(const gl::Context *context,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
bool primitiveRestartEnabled,
bool attributesNeedStreaming,
@@ -228,8 +228,8 @@
mAppliedElementArrayBuffer.set(context, nullptr);
// Make sure the element array buffer is large enough
- const Type &indexTypeInfo = GetTypeInfo(type);
- size_t requiredStreamingBufferSize = indexTypeInfo.bytes * count;
+ const GLuint indexTypeBytes = gl::GetDrawElementsTypeSize(type);
+ size_t requiredStreamingBufferSize = indexTypeBytes * count;
if (requiredStreamingBufferSize > mStreamingElementArrayBufferSize)
{
// Copy the indices in while resizing the buffer
diff --git a/src/libANGLE/renderer/gl/VertexArrayGL.h b/src/libANGLE/renderer/gl/VertexArrayGL.h
index c6062fb..2f2c47b 100644
--- a/src/libANGLE/renderer/gl/VertexArrayGL.h
+++ b/src/libANGLE/renderer/gl/VertexArrayGL.h
@@ -35,7 +35,7 @@
angle::Result syncDrawElementsState(const gl::Context *context,
const gl::AttributesMask &activeAttributesMask,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instanceCount,
bool primitiveRestartEnabled,
@@ -57,7 +57,7 @@
const gl::AttributesMask &activeAttributesMask,
GLint first,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instanceCount,
bool primitiveRestartEnabled,
@@ -66,7 +66,7 @@
// Apply index data, only sets outIndexRange if attributesNeedStreaming is true
angle::Result syncIndexData(const gl::Context *context,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
bool primitiveRestartEnabled,
bool attributesNeedStreaming,
diff --git a/src/libANGLE/renderer/null/BufferNULL.cpp b/src/libANGLE/renderer/null/BufferNULL.cpp
index 310bd3e..b4d7133 100644
--- a/src/libANGLE/renderer/null/BufferNULL.cpp
+++ b/src/libANGLE/renderer/null/BufferNULL.cpp
@@ -97,7 +97,7 @@
}
angle::Result BufferNULL::getIndexRange(const gl::Context *context,
- GLenum type,
+ gl::DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
diff --git a/src/libANGLE/renderer/null/BufferNULL.h b/src/libANGLE/renderer/null/BufferNULL.h
index d136b68..e8e1b77 100644
--- a/src/libANGLE/renderer/null/BufferNULL.h
+++ b/src/libANGLE/renderer/null/BufferNULL.h
@@ -47,7 +47,7 @@
angle::Result unmap(const gl::Context *context, GLboolean *result) override;
angle::Result getIndexRange(const gl::Context *context,
- GLenum type,
+ gl::DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
diff --git a/src/libANGLE/renderer/null/ContextNULL.cpp b/src/libANGLE/renderer/null/ContextNULL.cpp
index b9636e2..5c32678 100644
--- a/src/libANGLE/renderer/null/ContextNULL.cpp
+++ b/src/libANGLE/renderer/null/ContextNULL.cpp
@@ -138,7 +138,7 @@
angle::Result ContextNULL::drawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices)
{
return angle::Result::Continue();
@@ -147,7 +147,7 @@
angle::Result ContextNULL::drawElementsInstanced(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances)
{
@@ -159,7 +159,7 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices)
{
return angle::Result::Continue();
@@ -174,7 +174,7 @@
angle::Result ContextNULL::drawElementsIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
const void *indirect)
{
return angle::Result::Continue();
diff --git a/src/libANGLE/renderer/null/ContextNULL.h b/src/libANGLE/renderer/null/ContextNULL.h
index d3b6eea..88dec5b 100644
--- a/src/libANGLE/renderer/null/ContextNULL.h
+++ b/src/libANGLE/renderer/null/ContextNULL.h
@@ -56,12 +56,12 @@
angle::Result drawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) override;
angle::Result drawElementsInstanced(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances) override;
angle::Result drawRangeElements(const gl::Context *context,
@@ -69,14 +69,14 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) override;
angle::Result drawArraysIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
const void *indirect) override;
angle::Result drawElementsIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
const void *indirect) override;
// CHROMIUM_path_rendering path drawing methods.
diff --git a/src/libANGLE/renderer/renderer_utils.cpp b/src/libANGLE/renderer/renderer_utils.cpp
index 7ff150c..14beeed 100644
--- a/src/libANGLE/renderer/renderer_utils.cpp
+++ b/src/libANGLE/renderer/renderer_utils.cpp
@@ -586,17 +586,17 @@
angle::Result GetVertexRangeInfo(const gl::Context *context,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
GLint baseVertex,
GLint *startVertexOut,
size_t *vertexCountOut)
{
- if (indexTypeOrNone != GL_NONE)
+ if (indexTypeOrInvalid != gl::DrawElementsType::InvalidEnum)
{
gl::IndexRange indexRange;
ANGLE_TRY(context->getGLState().getVertexArray()->getIndexRange(
- context, indexTypeOrNone, vertexOrIndexCount, indices, &indexRange));
+ context, indexTypeOrInvalid, vertexOrIndexCount, indices, &indexRange));
ANGLE_TRY(ComputeStartVertex(context->getImplementation(), indexRange, baseVertex,
startVertexOut));
*vertexCountOut = indexRange.vertexCount();
diff --git a/src/libANGLE/renderer/renderer_utils.h b/src/libANGLE/renderer/renderer_utils.h
index eff7040..e7a4b86 100644
--- a/src/libANGLE/renderer/renderer_utils.h
+++ b/src/libANGLE/renderer/renderer_utils.h
@@ -281,7 +281,7 @@
angle::Result GetVertexRangeInfo(const gl::Context *context,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
GLint baseVertex,
GLint *startVertexOut,
diff --git a/src/libANGLE/renderer/vulkan/BufferVk.cpp b/src/libANGLE/renderer/vulkan/BufferVk.cpp
index eb6f293..4fa8a3a 100644
--- a/src/libANGLE/renderer/vulkan/BufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/BufferVk.cpp
@@ -153,7 +153,7 @@
}
angle::Result BufferVk::getIndexRange(const gl::Context *context,
- GLenum type,
+ gl::DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
@@ -177,11 +177,11 @@
// TODO(jmadill): Consider keeping a shadow system memory copy in some cases.
ASSERT(mBuffer.valid());
- const gl::Type &typeInfo = gl::GetTypeInfo(type);
+ const GLuint &typeBytes = gl::GetDrawElementsTypeSize(type);
uint8_t *mapPointer = nullptr;
ANGLE_VK_TRY(contextVk, mBuffer.getDeviceMemory().map(contextVk->getDevice(), offset,
- typeInfo.bytes * count, 0, &mapPointer));
+ typeBytes * count, 0, &mapPointer));
*outRange = gl::ComputeIndexRange(type, mapPointer, count, primitiveRestartEnabled);
diff --git a/src/libANGLE/renderer/vulkan/BufferVk.h b/src/libANGLE/renderer/vulkan/BufferVk.h
index c45bd1e..9911758 100644
--- a/src/libANGLE/renderer/vulkan/BufferVk.h
+++ b/src/libANGLE/renderer/vulkan/BufferVk.h
@@ -49,7 +49,7 @@
angle::Result unmap(const gl::Context *context, GLboolean *result) override;
angle::Result getIndexRange(const gl::Context *context,
- GLenum type,
+ gl::DrawElementsType type,
size_t offset,
size_t count,
bool primitiveRestartEnabled,
diff --git a/src/libANGLE/renderer/vulkan/ContextVk.cpp b/src/libANGLE/renderer/vulkan/ContextVk.cpp
index 20783fe..26ac068 100644
--- a/src/libANGLE/renderer/vulkan/ContextVk.cpp
+++ b/src/libANGLE/renderer/vulkan/ContextVk.cpp
@@ -114,7 +114,7 @@
mDrawFramebuffer(nullptr),
mProgram(nullptr),
mLastIndexBufferOffset(0),
- mCurrentDrawElementsType(GL_NONE),
+ mCurrentDrawElementsType(gl::DrawElementsType::InvalidEnum),
mClearColorMask(kAllColorChannelsMask),
mFlipYForCurrentSurface(false),
mDriverUniformsBuffer(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, sizeof(DriverUniforms) * 16, true),
@@ -264,7 +264,7 @@
gl::PrimitiveMode mode,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrNone,
const void *indices,
DirtyBits dirtyBitMask,
vk::CommandBuffer **commandBufferOut)
@@ -313,7 +313,7 @@
angle::Result ContextVk::setupIndexedDraw(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices,
vk::CommandBuffer **commandBufferOut)
{
@@ -338,7 +338,7 @@
mVertexArray->updateCurrentElementArrayBufferOffset(mLastIndexBufferOffset);
}
- if (indexType == GL_UNSIGNED_BYTE && mDirtyBits[DIRTY_BIT_INDEX_BUFFER])
+ if (indexType == gl::DrawElementsType::UnsignedByte && mDirtyBits[DIRTY_BIT_INDEX_BUFFER])
{
ANGLE_TRY(mVertexArray->updateIndexTranslation(this, indexCount, indexType, indices));
}
@@ -352,15 +352,17 @@
gl::PrimitiveMode mode,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
vk::CommandBuffer **commandBufferOut)
{
- ANGLE_TRY(mVertexArray->handleLineLoop(this, firstVertex, vertexOrIndexCount, indexTypeOrNone,
- indices));
+ ANGLE_TRY(mVertexArray->handleLineLoop(this, firstVertex, vertexOrIndexCount,
+ indexTypeOrInvalid, indices));
mDirtyBits.set(DIRTY_BIT_INDEX_BUFFER);
- mCurrentDrawElementsType = indexTypeOrNone != GL_NONE ? indexTypeOrNone : GL_UNSIGNED_INT;
- return setupDraw(context, mode, firstVertex, vertexOrIndexCount, indexTypeOrNone, indices,
+ mCurrentDrawElementsType = indexTypeOrInvalid != gl::DrawElementsType::InvalidEnum
+ ? indexTypeOrInvalid
+ : gl::DrawElementsType::UnsignedInt;
+ return setupDraw(context, mode, firstVertex, vertexOrIndexCount, indexTypeOrInvalid, indices,
mIndexedDirtyBitsMask, commandBufferOut);
}
@@ -444,7 +446,7 @@
{
commandBuffer->bindIndexBuffer(mVertexArray->getCurrentElementArrayBufferHandle(),
mVertexArray->getCurrentElementArrayBufferOffset(),
- gl_vk::GetIndexType(mCurrentDrawElementsType));
+ gl_vk::kIndexTypeMap[mCurrentDrawElementsType]);
vk::BufferHelper *elementArrayBuffer = mVertexArray->getCurrentElementArrayBuffer();
if (elementArrayBuffer)
@@ -491,13 +493,14 @@
if (mode == gl::PrimitiveMode::LineLoop)
{
- ANGLE_TRY(setupLineLoopDraw(context, mode, first, count, GL_NONE, nullptr, &commandBuffer));
+ ANGLE_TRY(setupLineLoopDraw(context, mode, first, count, gl::DrawElementsType::InvalidEnum,
+ nullptr, &commandBuffer));
vk::LineLoopHelper::Draw(clampedVertexCount, commandBuffer);
}
else
{
- ANGLE_TRY(setupDraw(context, mode, first, count, GL_NONE, nullptr, mNonIndexedDirtyBitsMask,
- &commandBuffer));
+ ANGLE_TRY(setupDraw(context, mode, first, count, gl::DrawElementsType::InvalidEnum, nullptr,
+ mNonIndexedDirtyBitsMask, &commandBuffer));
commandBuffer->draw(clampedVertexCount, 1, first, 0);
}
@@ -517,7 +520,7 @@
angle::Result ContextVk::drawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices)
{
vk::CommandBuffer *commandBuffer = nullptr;
@@ -538,7 +541,7 @@
angle::Result ContextVk::drawElementsInstanced(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances)
{
@@ -551,7 +554,7 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices)
{
ANGLE_VK_UNREACHABLE(this);
@@ -573,7 +576,7 @@
angle::Result ContextVk::drawElementsIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
const void *indirect)
{
ANGLE_VK_UNREACHABLE(this);
@@ -1159,9 +1162,9 @@
static_cast<float>(mDrawFramebuffer->getState().getDimensions().height) * 0.5f;
// Allocate a new region in the dynamic buffer.
- uint8_t *ptr = nullptr;
- VkBuffer buffer = VK_NULL_HANDLE;
- VkDeviceSize offset = 0;
+ uint8_t *ptr = nullptr;
+ VkBuffer buffer = VK_NULL_HANDLE;
+ VkDeviceSize offset = 0;
ANGLE_TRY(mDriverUniformsBuffer.allocate(this, sizeof(DriverUniforms), &ptr, &buffer, &offset,
nullptr));
float scaleY = isViewportFlipEnabledForDrawFBO() ? -1.0f : 1.0f;
diff --git a/src/libANGLE/renderer/vulkan/ContextVk.h b/src/libANGLE/renderer/vulkan/ContextVk.h
index ad26954..9dcd31c 100644
--- a/src/libANGLE/renderer/vulkan/ContextVk.h
+++ b/src/libANGLE/renderer/vulkan/ContextVk.h
@@ -53,12 +53,12 @@
angle::Result drawElements(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) override;
angle::Result drawElementsInstanced(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices,
GLsizei instances) override;
angle::Result drawRangeElements(const gl::Context *context,
@@ -66,14 +66,14 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices) override;
angle::Result drawArraysIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
const void *indirect) override;
angle::Result drawElementsIndirect(const gl::Context *context,
gl::PrimitiveMode mode,
- GLenum type,
+ gl::DrawElementsType type,
const void *indirect) override;
// Device loss
@@ -215,21 +215,21 @@
gl::PrimitiveMode mode,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
DirtyBits dirtyBitMask,
vk::CommandBuffer **commandBufferOut);
angle::Result setupIndexedDraw(const gl::Context *context,
gl::PrimitiveMode mode,
GLsizei indexCount,
- GLenum indexType,
+ gl::DrawElementsType indexType,
const void *indices,
vk::CommandBuffer **commandBufferOut);
angle::Result setupLineLoopDraw(const gl::Context *context,
gl::PrimitiveMode mode,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices,
vk::CommandBuffer **commandBufferOut);
@@ -293,7 +293,7 @@
// The offset we had the last time we bound the index buffer.
const GLvoid *mLastIndexBufferOffset;
- GLenum mCurrentDrawElementsType;
+ gl::DrawElementsType mCurrentDrawElementsType;
// Cached clear value/mask for color and depth/stencil.
VkClearValue mClearColorValue;
diff --git a/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp b/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
index 144761e..3bacd45 100644
--- a/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
+++ b/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
@@ -134,12 +134,12 @@
}
angle::Result VertexArrayVk::streamIndexData(ContextVk *contextVk,
- GLenum indexType,
+ gl::DrawElementsType indexType,
size_t indexCount,
const void *sourcePointer,
vk::DynamicBuffer *dynamicBuffer)
{
- ASSERT(!mState.getElementArrayBuffer() || indexType == GL_UNSIGNED_BYTE);
+ ASSERT(!mState.getElementArrayBuffer() || indexType == gl::DrawElementsType::UnsignedByte);
dynamicBuffer->releaseRetainedBuffers(contextVk->getRenderer());
@@ -148,7 +148,7 @@
ANGLE_TRY(dynamicBuffer->allocate(contextVk, amount, &dst, &mCurrentElementArrayBufferHandle,
&mCurrentElementArrayBufferOffset, nullptr));
- if (indexType == GL_UNSIGNED_BYTE)
+ if (indexType == gl::DrawElementsType::UnsignedByte)
{
// Unsigned bytes don't have direct support in Vulkan so we have to expand the
// memory to a GLushort.
@@ -446,7 +446,7 @@
angle::Result VertexArrayVk::updateClientAttribs(const gl::Context *context,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices)
{
ContextVk *contextVk = vk::GetImpl(context);
@@ -456,8 +456,8 @@
GLint startVertex;
size_t vertexCount;
- ANGLE_TRY(GetVertexRangeInfo(context, firstVertex, vertexOrIndexCount, indexTypeOrNone, indices,
- 0, &startVertex, &vertexCount));
+ ANGLE_TRY(GetVertexRangeInfo(context, firstVertex, vertexOrIndexCount, indexTypeOrInvalid,
+ indices, 0, &startVertex, &vertexCount));
mDynamicVertexData.releaseRetainedBuffers(contextVk->getRenderer());
@@ -498,10 +498,10 @@
angle::Result VertexArrayVk::handleLineLoop(ContextVk *contextVk,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices)
{
- if (indexTypeOrNone != GL_NONE)
+ if (indexTypeOrInvalid != gl::DrawElementsType::InvalidEnum)
{
// Handle GL_LINE_LOOP drawElements.
if (mDirtyLineLoopTranslation)
@@ -511,7 +511,7 @@
if (!elementArrayBuffer)
{
ANGLE_TRY(mLineLoopHelper.streamIndices(
- contextVk, indexTypeOrNone, vertexOrIndexCount,
+ contextVk, indexTypeOrInvalid, vertexOrIndexCount,
reinterpret_cast<const uint8_t *>(indices), &mCurrentElementArrayBufferHandle,
&mCurrentElementArrayBufferOffset));
}
@@ -521,7 +521,7 @@
intptr_t offset = reinterpret_cast<intptr_t>(indices);
BufferVk *elementArrayBufferVk = vk::GetImpl(elementArrayBuffer);
ANGLE_TRY(mLineLoopHelper.getIndexBufferForElementArrayBuffer(
- contextVk, elementArrayBufferVk, indexTypeOrNone, vertexOrIndexCount, offset,
+ contextVk, elementArrayBufferVk, indexTypeOrInvalid, vertexOrIndexCount, offset,
&mCurrentElementArrayBufferHandle, &mCurrentElementArrayBufferOffset));
}
}
@@ -555,10 +555,10 @@
angle::Result VertexArrayVk::updateIndexTranslation(ContextVk *contextVk,
GLsizei indexCount,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices)
{
- ASSERT(type != GL_NONE);
+ ASSERT(type != gl::DrawElementsType::InvalidEnum);
gl::Buffer *glBuffer = mState.getElementArrayBuffer();
@@ -571,7 +571,7 @@
// Needed before reading buffer or we could get stale data.
ANGLE_TRY(contextVk->getRenderer()->finish(contextVk));
- ASSERT(type == GL_UNSIGNED_BYTE);
+ ASSERT(type == gl::DrawElementsType::UnsignedByte);
// Unsigned bytes don't have direct support in Vulkan so we have to expand the
// memory to a GLushort.
BufferVk *bufferVk = vk::GetImpl(glBuffer);
diff --git a/src/libANGLE/renderer/vulkan/VertexArrayVk.h b/src/libANGLE/renderer/vulkan/VertexArrayVk.h
index 8cc606e..9688d51 100644
--- a/src/libANGLE/renderer/vulkan/VertexArrayVk.h
+++ b/src/libANGLE/renderer/vulkan/VertexArrayVk.h
@@ -46,13 +46,13 @@
angle::Result updateClientAttribs(const gl::Context *context,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices);
angle::Result handleLineLoop(ContextVk *contextVk,
GLint firstVertex,
GLsizei vertexOrIndexCount,
- GLenum indexTypeOrNone,
+ gl::DrawElementsType indexTypeOrInvalid,
const void *indices);
const gl::AttribArray<VkBuffer> &getCurrentArrayBufferHandles() const
@@ -86,7 +86,7 @@
angle::Result updateIndexTranslation(ContextVk *contextVk,
GLsizei indexCount,
- GLenum type,
+ gl::DrawElementsType type,
const void *indices);
private:
@@ -101,7 +101,7 @@
const gl::VertexAttribute &attrib);
angle::Result streamIndexData(ContextVk *contextVk,
- GLenum indexType,
+ gl::DrawElementsType indexType,
size_t indexCount,
const void *sourcePointer,
vk::DynamicBuffer *dynamicBuffer);
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc b/src/libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc
index 1637806..b9ac42d 100644
--- a/src/libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc
Binary files differ
diff --git a/src/libANGLE/renderer/vulkan/shaders/gen/PushConstantColor.frag.00000000.inc b/src/libANGLE/renderer/vulkan/shaders/gen/PushConstantColor.frag.00000000.inc
index 1933d7b..1099917 100644
--- a/src/libANGLE/renderer/vulkan/shaders/gen/PushConstantColor.frag.00000000.inc
+++ b/src/libANGLE/renderer/vulkan/shaders/gen/PushConstantColor.frag.00000000.inc
Binary files differ
diff --git a/src/libANGLE/renderer/vulkan/vk_helpers.cpp b/src/libANGLE/renderer/vulkan/vk_helpers.cpp
index 08bc78d..afe17d9 100644
--- a/src/libANGLE/renderer/vulkan/vk_helpers.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_helpers.cpp
@@ -777,13 +777,13 @@
angle::Result LineLoopHelper::getIndexBufferForElementArrayBuffer(ContextVk *contextVk,
BufferVk *elementArrayBufferVk,
- GLenum glIndexType,
+ gl::DrawElementsType glIndexType,
int indexCount,
intptr_t elementArrayOffset,
VkBuffer *bufferHandleOut,
VkDeviceSize *bufferOffsetOut)
{
- if (glIndexType == GL_UNSIGNED_BYTE)
+ if (glIndexType == gl::DrawElementsType::UnsignedByte)
{
// Needed before reading buffer or we could get stale data.
ANGLE_TRY(contextVk->getRenderer()->finish(contextVk));
@@ -797,7 +797,7 @@
return angle::Result::Continue();
}
- VkIndexType indexType = gl_vk::GetIndexType(glIndexType);
+ VkIndexType indexType = gl_vk::kIndexTypeMap[glIndexType];
ASSERT(indexType == VK_INDEX_TYPE_UINT16 || indexType == VK_INDEX_TYPE_UINT32);
uint32_t *indices = nullptr;
@@ -825,13 +825,13 @@
}
angle::Result LineLoopHelper::streamIndices(ContextVk *contextVk,
- GLenum glIndexType,
+ gl::DrawElementsType glIndexType,
GLsizei indexCount,
const uint8_t *srcPtr,
VkBuffer *bufferHandleOut,
VkDeviceSize *bufferOffsetOut)
{
- VkIndexType indexType = gl_vk::GetIndexType(glIndexType);
+ VkIndexType indexType = gl_vk::kIndexTypeMap[glIndexType];
uint8_t *indices = nullptr;
@@ -841,7 +841,7 @@
reinterpret_cast<uint8_t **>(&indices), bufferHandleOut,
bufferOffsetOut, nullptr));
- if (glIndexType == GL_UNSIGNED_BYTE)
+ if (glIndexType == gl::DrawElementsType::UnsignedByte)
{
// Vulkan doesn't support uint8 index types, so we need to emulate it.
ASSERT(indexType == VK_INDEX_TYPE_UINT16);
diff --git a/src/libANGLE/renderer/vulkan/vk_helpers.h b/src/libANGLE/renderer/vulkan/vk_helpers.h
index 869ebac..ce6a9ea 100644
--- a/src/libANGLE/renderer/vulkan/vk_helpers.h
+++ b/src/libANGLE/renderer/vulkan/vk_helpers.h
@@ -351,14 +351,14 @@
angle::Result getIndexBufferForElementArrayBuffer(ContextVk *contextVk,
BufferVk *elementArrayBufferVk,
- GLenum glIndexType,
+ gl::DrawElementsType glIndexType,
int indexCount,
intptr_t elementArrayOffset,
VkBuffer *bufferHandleOut,
VkDeviceSize *bufferOffsetOut);
angle::Result streamIndices(ContextVk *contextVk,
- GLenum glIndexType,
+ gl::DrawElementsType glIndexType,
GLsizei indexCount,
const uint8_t *srcPtr,
VkBuffer *bufferHandleOut,
diff --git a/src/libANGLE/renderer/vulkan/vk_utils.cpp b/src/libANGLE/renderer/vulkan/vk_utils.cpp
index 2f00580..e95a89a 100644
--- a/src/libANGLE/renderer/vulkan/vk_utils.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_utils.cpp
@@ -1462,21 +1462,6 @@
}
}
-VkIndexType GetIndexType(GLenum elementType)
-{
- switch (elementType)
- {
- case GL_UNSIGNED_BYTE:
- case GL_UNSIGNED_SHORT:
- return VK_INDEX_TYPE_UINT16;
- case GL_UNSIGNED_INT:
- return VK_INDEX_TYPE_UINT32;
- default:
- UNREACHABLE();
- return VK_INDEX_TYPE_MAX_ENUM;
- }
-}
-
void GetOffset(const gl::Offset &glOffset, VkOffset3D *vkOffset)
{
vkOffset->x = glOffset.x;
diff --git a/src/libANGLE/renderer/vulkan/vk_utils.h b/src/libANGLE/renderer/vulkan/vk_utils.h
index 90a724e..30b1532 100644
--- a/src/libANGLE/renderer/vulkan/vk_utils.h
+++ b/src/libANGLE/renderer/vulkan/vk_utils.h
@@ -865,7 +865,13 @@
VkFrontFace GetFrontFace(GLenum frontFace, bool invertCullFace);
VkSampleCountFlagBits GetSamples(GLint sampleCount);
VkComponentSwizzle GetSwizzle(const GLenum swizzle);
-VkIndexType GetIndexType(GLenum elementType);
+
+constexpr angle::PackedEnumMap<gl::DrawElementsType, VkIndexType> kIndexTypeMap = {
+ {gl::DrawElementsType::UnsignedByte, VK_INDEX_TYPE_UINT16},
+ {gl::DrawElementsType::UnsignedShort, VK_INDEX_TYPE_UINT16},
+ {gl::DrawElementsType::UnsignedInt, VK_INDEX_TYPE_UINT32},
+};
+
void GetOffset(const gl::Offset &glOffset, VkOffset3D *vkOffset);
void GetExtent(const gl::Extents &glExtent, VkExtent3D *vkExtent);
VkImageType GetImageType(gl::TextureType textureType);
diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp
index 3561600..cddee6c 100644
--- a/src/libANGLE/validationES.cpp
+++ b/src/libANGLE/validationES.cpp
@@ -633,7 +633,7 @@
bool ValidateDrawElementsInstancedBase(Context *context,
PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const GLvoid *indices,
GLsizei primcount)
{
@@ -2959,23 +2959,19 @@
return ValidateDrawInstancedANGLE(context);
}
-bool ValidateDrawElementsBase(Context *context, PrimitiveMode mode, GLenum type)
+bool ValidateDrawElementsBase(Context *context, PrimitiveMode mode, DrawElementsType type)
{
- switch (type)
+ if (!context->getStateCache().isValidDrawElementsType(type))
{
- case GL_UNSIGNED_BYTE:
- case GL_UNSIGNED_SHORT:
- break;
- case GL_UNSIGNED_INT:
- if (context->getClientMajorVersion() < 3 && !context->getExtensions().elementIndexUint)
- {
- context->validationError(GL_INVALID_ENUM, kTypeNotUnsignedShortByte);
- return false;
- }
- break;
- default:
+ if (type == DrawElementsType::UnsignedInt)
+ {
context->validationError(GL_INVALID_ENUM, kTypeNotUnsignedShortByte);
return false;
+ }
+
+ ASSERT(type == DrawElementsType::InvalidEnum);
+ context->validationError(GL_INVALID_ENUM, kEnumNotSupported);
+ return false;
}
const State &state = context->getGLState();
@@ -3012,7 +3008,7 @@
bool ValidateDrawElementsCommon(Context *context,
PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices,
GLsizei primcount)
{
@@ -3029,7 +3025,7 @@
const VertexArray *vao = state.getVertexArray();
Buffer *elementArrayBuffer = vao->getElementArrayBuffer();
- GLuint typeBytes = GetTypeInfo(type).bytes;
+ GLuint typeBytes = GetDrawElementsTypeSize(type);
ASSERT(isPow2(typeBytes) && typeBytes > 0);
if (context->getExtensions().webglCompatibility)
@@ -3165,7 +3161,7 @@
bool ValidateDrawElementsInstancedCommon(Context *context,
PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices,
GLsizei primcount)
{
@@ -3175,7 +3171,7 @@
bool ValidateDrawElementsInstancedANGLE(Context *context,
PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices,
GLsizei primcount)
{
diff --git a/src/libANGLE/validationES.h b/src/libANGLE/validationES.h
index 844b15b..dd6c2c9 100644
--- a/src/libANGLE/validationES.h
+++ b/src/libANGLE/validationES.h
@@ -303,24 +303,24 @@
GLsizei count,
GLsizei primcount);
-bool ValidateDrawElementsBase(Context *context, PrimitiveMode mode, GLenum type);
+bool ValidateDrawElementsBase(Context *context, PrimitiveMode mode, DrawElementsType type);
bool ValidateDrawElementsCommon(Context *context,
PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices,
GLsizei primcount);
bool ValidateDrawElementsInstancedCommon(Context *context,
PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices,
GLsizei primcount);
bool ValidateDrawElementsInstancedANGLE(Context *context,
PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices,
GLsizei primcount);
bool ValidateDrawInstancedANGLE(Context *context);
diff --git a/src/libANGLE/validationES2.cpp b/src/libANGLE/validationES2.cpp
index af3628a..a7ffba6 100644
--- a/src/libANGLE/validationES2.cpp
+++ b/src/libANGLE/validationES2.cpp
@@ -5846,7 +5846,7 @@
bool ValidateDrawElements(Context *context,
PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices)
{
return ValidateDrawElementsCommon(context, mode, count, type, indices, 1);
@@ -6778,7 +6778,7 @@
bool ValidateMultiDrawElementsANGLE(Context *context,
PrimitiveMode mode,
const GLsizei *counts,
- GLenum type,
+ DrawElementsType type,
const GLvoid *const *indices,
GLsizei drawcount)
{
diff --git a/src/libANGLE/validationES2_autogen.h b/src/libANGLE/validationES2_autogen.h
index e15f0d4..879b3ad 100644
--- a/src/libANGLE/validationES2_autogen.h
+++ b/src/libANGLE/validationES2_autogen.h
@@ -110,7 +110,7 @@
bool ValidateDrawElements(Context *context,
PrimitiveMode modePacked,
GLsizei count,
- GLenum type,
+ DrawElementsType typePacked,
const void *indices);
bool ValidateEnable(Context *context, GLenum cap);
bool ValidateEnableVertexAttribArray(Context *context, GLuint index);
diff --git a/src/libANGLE/validationES3.cpp b/src/libANGLE/validationES3.cpp
index e33a2fd..fef519b 100644
--- a/src/libANGLE/validationES3.cpp
+++ b/src/libANGLE/validationES3.cpp
@@ -1413,7 +1413,7 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices)
{
if (context->getClientMajorVersion() < 3)
@@ -3101,7 +3101,7 @@
bool ValidateDrawElementsInstanced(Context *context,
PrimitiveMode mode,
GLsizei count,
- GLenum type,
+ DrawElementsType type,
const void *indices,
GLsizei instanceCount)
{
@@ -3152,7 +3152,7 @@
bool ValidateMultiDrawElementsInstancedANGLE(Context *context,
PrimitiveMode mode,
const GLsizei *counts,
- GLenum type,
+ DrawElementsType type,
const GLvoid *const *indices,
const GLsizei *instanceCounts,
GLsizei drawcount)
diff --git a/src/libANGLE/validationES31.cpp b/src/libANGLE/validationES31.cpp
index 037f24e..5e8faff 100644
--- a/src/libANGLE/validationES31.cpp
+++ b/src/libANGLE/validationES31.cpp
@@ -520,7 +520,7 @@
bool ValidateDrawElementsIndirect(Context *context,
PrimitiveMode mode,
- GLenum type,
+ DrawElementsType type,
const void *indirect)
{
if (!ValidateDrawElementsBase(context, mode, type))
diff --git a/src/libANGLE/validationES31_autogen.h b/src/libANGLE/validationES31_autogen.h
index 21a5ac1..32154f8 100644
--- a/src/libANGLE/validationES31_autogen.h
+++ b/src/libANGLE/validationES31_autogen.h
@@ -45,7 +45,7 @@
bool ValidateDrawArraysIndirect(Context *context, PrimitiveMode modePacked, const void *indirect);
bool ValidateDrawElementsIndirect(Context *context,
PrimitiveMode modePacked,
- GLenum type,
+ DrawElementsType typePacked,
const void *indirect);
bool ValidateFramebufferParameteri(Context *context, GLenum target, GLenum pname, GLint param);
bool ValidateGenProgramPipelines(Context *context, GLsizei n, GLuint *pipelines);
diff --git a/src/libANGLE/validationES3_autogen.h b/src/libANGLE/validationES3_autogen.h
index dbf08c9..8ca33ed 100644
--- a/src/libANGLE/validationES3_autogen.h
+++ b/src/libANGLE/validationES3_autogen.h
@@ -104,7 +104,7 @@
bool ValidateDrawElementsInstanced(Context *context,
PrimitiveMode modePacked,
GLsizei count,
- GLenum type,
+ DrawElementsType typePacked,
const void *indices,
GLsizei instancecount);
bool ValidateDrawRangeElements(Context *context,
@@ -112,7 +112,7 @@
GLuint start,
GLuint end,
GLsizei count,
- GLenum type,
+ DrawElementsType typePacked,
const void *indices);
bool ValidateEndQuery(Context *context, QueryType targetPacked);
bool ValidateEndTransformFeedback(Context *context);
diff --git a/src/libANGLE/validationESEXT_autogen.h b/src/libANGLE/validationESEXT_autogen.h
index f6311d4..f6e92be 100644
--- a/src/libANGLE/validationESEXT_autogen.h
+++ b/src/libANGLE/validationESEXT_autogen.h
@@ -78,7 +78,7 @@
bool ValidateDrawElementsInstancedANGLE(Context *context,
PrimitiveMode modePacked,
GLsizei count,
- GLenum type,
+ DrawElementsType typePacked,
const void *indices,
GLsizei primcount);
bool ValidateVertexAttribDivisorANGLE(Context *context, GLuint index, GLuint divisor);
@@ -98,13 +98,13 @@
bool ValidateMultiDrawElementsANGLE(Context *context,
PrimitiveMode modePacked,
const GLsizei *counts,
- GLenum type,
+ DrawElementsType typePacked,
const GLvoid *const *indices,
GLsizei drawcount);
bool ValidateMultiDrawElementsInstancedANGLE(Context *context,
PrimitiveMode modePacked,
const GLsizei *counts,
- GLenum type,
+ DrawElementsType typePacked,
const GLvoid *const *indices,
const GLsizei *instanceCounts,
GLsizei drawcount);
diff --git a/src/libGLESv2/entry_points_gles_2_0_autogen.cpp b/src/libGLESv2/entry_points_gles_2_0_autogen.cpp
index 7450f09..bc10919 100644
--- a/src/libGLESv2/entry_points_gles_2_0_autogen.cpp
+++ b/src/libGLESv2/entry_points_gles_2_0_autogen.cpp
@@ -736,11 +736,12 @@
Context *context = GetValidGlobalContext();
if (context)
{
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateDrawElements(context, modePacked, count, type, indices))
+ ValidateDrawElements(context, modePacked, count, typePacked, indices))
{
- context->drawElements(modePacked, count, type, indices);
+ context->drawElements(modePacked, count, typePacked, indices);
}
}
}
diff --git a/src/libGLESv2/entry_points_gles_3_0_autogen.cpp b/src/libGLESv2/entry_points_gles_3_0_autogen.cpp
index 820d39a..d3f854f 100644
--- a/src/libGLESv2/entry_points_gles_3_0_autogen.cpp
+++ b/src/libGLESv2/entry_points_gles_3_0_autogen.cpp
@@ -495,11 +495,13 @@
Context *context = GetValidGlobalContext();
if (context)
{
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateDrawElementsInstanced(context, modePacked, count, type, indices, instancecount))
+ ValidateDrawElementsInstanced(context, modePacked, count, typePacked, indices,
+ instancecount))
{
- context->drawElementsInstanced(modePacked, count, type, indices, instancecount);
+ context->drawElementsInstanced(modePacked, count, typePacked, indices, instancecount);
}
}
}
@@ -520,11 +522,12 @@
Context *context = GetValidGlobalContext();
if (context)
{
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateDrawRangeElements(context, modePacked, start, end, count, type, indices))
+ ValidateDrawRangeElements(context, modePacked, start, end, count, typePacked, indices))
{
- context->drawRangeElements(modePacked, start, end, count, type, indices);
+ context->drawRangeElements(modePacked, start, end, count, typePacked, indices);
}
}
}
diff --git a/src/libGLESv2/entry_points_gles_3_1_autogen.cpp b/src/libGLESv2/entry_points_gles_3_1_autogen.cpp
index a3533ef..b4bbcdf 100644
--- a/src/libGLESv2/entry_points_gles_3_1_autogen.cpp
+++ b/src/libGLESv2/entry_points_gles_3_1_autogen.cpp
@@ -188,11 +188,12 @@
Context *context = GetValidGlobalContext();
if (context)
{
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateDrawElementsIndirect(context, modePacked, type, indirect))
+ ValidateDrawElementsIndirect(context, modePacked, typePacked, indirect))
{
- context->drawElementsIndirect(modePacked, type, indirect);
+ context->drawElementsIndirect(modePacked, typePacked, indirect);
}
}
}
diff --git a/src/libGLESv2/entry_points_gles_ext_autogen.cpp b/src/libGLESv2/entry_points_gles_ext_autogen.cpp
index 72b9b43..90d23d4 100644
--- a/src/libGLESv2/entry_points_gles_ext_autogen.cpp
+++ b/src/libGLESv2/entry_points_gles_ext_autogen.cpp
@@ -199,11 +199,13 @@
Context *context = GetValidGlobalContext();
if (context)
{
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
- if (context->skipValidation() || ValidateDrawElementsInstancedANGLE(
- context, modePacked, count, type, indices, primcount))
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
+ if (context->skipValidation() ||
+ ValidateDrawElementsInstancedANGLE(context, modePacked, count, typePacked, indices,
+ primcount))
{
- context->drawElementsInstanced(modePacked, count, type, indices, primcount);
+ context->drawElementsInstanced(modePacked, count, typePacked, indices, primcount);
}
}
}
@@ -287,11 +289,13 @@
Context *context = GetValidGlobalContext();
if (context)
{
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateMultiDrawElementsANGLE(context, modePacked, counts, type, indices, drawcount))
+ ValidateMultiDrawElementsANGLE(context, modePacked, counts, typePacked, indices,
+ drawcount))
{
- context->multiDrawElements(modePacked, counts, type, indices, drawcount);
+ context->multiDrawElements(modePacked, counts, typePacked, indices, drawcount);
}
}
}
@@ -312,13 +316,14 @@
Context *context = GetValidGlobalContext();
if (context)
{
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateMultiDrawElementsInstancedANGLE(context, modePacked, counts, type, indices,
- instanceCounts, drawcount))
+ ValidateMultiDrawElementsInstancedANGLE(context, modePacked, counts, typePacked,
+ indices, instanceCounts, drawcount))
{
- context->multiDrawElementsInstanced(modePacked, counts, type, indices, instanceCounts,
- drawcount);
+ context->multiDrawElementsInstanced(modePacked, counts, typePacked, indices,
+ instanceCounts, drawcount);
}
}
}
@@ -6821,11 +6826,12 @@
if (context)
{
ASSERT(context == GetValidGlobalContext());
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateDrawElements(context, modePacked, count, type, indices))
+ ValidateDrawElements(context, modePacked, count, typePacked, indices))
{
- context->drawElements(modePacked, count, type, indices);
+ context->drawElements(modePacked, count, typePacked, indices);
}
}
}
@@ -6843,11 +6849,12 @@
if (context)
{
ASSERT(context == GetValidGlobalContext());
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateDrawElementsIndirect(context, modePacked, type, indirect))
+ ValidateDrawElementsIndirect(context, modePacked, typePacked, indirect))
{
- context->drawElementsIndirect(modePacked, type, indirect);
+ context->drawElementsIndirect(modePacked, typePacked, indirect);
}
}
}
@@ -6869,11 +6876,13 @@
if (context)
{
ASSERT(context == GetValidGlobalContext());
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateDrawElementsInstanced(context, modePacked, count, type, indices, instancecount))
+ ValidateDrawElementsInstanced(context, modePacked, count, typePacked, indices,
+ instancecount))
{
- context->drawElementsInstanced(modePacked, count, type, indices, instancecount);
+ context->drawElementsInstanced(modePacked, count, typePacked, indices, instancecount);
}
}
}
@@ -6895,11 +6904,13 @@
if (context)
{
ASSERT(context == GetValidGlobalContext());
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
- if (context->skipValidation() || ValidateDrawElementsInstancedANGLE(
- context, modePacked, count, type, indices, primcount))
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
+ if (context->skipValidation() ||
+ ValidateDrawElementsInstancedANGLE(context, modePacked, count, typePacked, indices,
+ primcount))
{
- context->drawElementsInstanced(modePacked, count, type, indices, primcount);
+ context->drawElementsInstanced(modePacked, count, typePacked, indices, primcount);
}
}
}
@@ -6922,11 +6933,12 @@
if (context)
{
ASSERT(context == GetValidGlobalContext());
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateDrawRangeElements(context, modePacked, start, end, count, type, indices))
+ ValidateDrawRangeElements(context, modePacked, start, end, count, typePacked, indices))
{
- context->drawRangeElements(modePacked, start, end, count, type, indices);
+ context->drawRangeElements(modePacked, start, end, count, typePacked, indices);
}
}
}
@@ -17875,11 +17887,13 @@
if (context)
{
ASSERT(context == GetValidGlobalContext());
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateMultiDrawElementsANGLE(context, modePacked, counts, type, indices, drawcount))
+ ValidateMultiDrawElementsANGLE(context, modePacked, counts, typePacked, indices,
+ drawcount))
{
- context->multiDrawElements(modePacked, counts, type, indices, drawcount);
+ context->multiDrawElements(modePacked, counts, typePacked, indices, drawcount);
}
}
}
@@ -17902,13 +17916,14 @@
if (context)
{
ASSERT(context == GetValidGlobalContext());
- PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ PrimitiveMode modePacked = FromGLenum<PrimitiveMode>(mode);
+ DrawElementsType typePacked = FromGLenum<DrawElementsType>(type);
if (context->skipValidation() ||
- ValidateMultiDrawElementsInstancedANGLE(context, modePacked, counts, type, indices,
- instanceCounts, drawcount))
+ ValidateMultiDrawElementsInstancedANGLE(context, modePacked, counts, typePacked,
+ indices, instanceCounts, drawcount))
{
- context->multiDrawElementsInstanced(modePacked, counts, type, indices, instanceCounts,
- drawcount);
+ context->multiDrawElementsInstanced(modePacked, counts, typePacked, indices,
+ instanceCounts, drawcount);
}
}
}
diff --git a/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp b/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp
index 4d6426c..d2b01d4 100644
--- a/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp
+++ b/src/tests/gl_tests/D3D11EmulatedIndexedBufferTest.cpp
@@ -140,7 +140,7 @@
{
rx::SourceIndexData srcData = {nullptr, mubyteIndices.data(),
static_cast<unsigned int>(mubyteIndices.size()),
- GL_UNSIGNED_BYTE, false};
+ gl::DrawElementsType::UnsignedByte, false};
emulateAndCompare(&srcData);
}
@@ -150,7 +150,7 @@
{
rx::SourceIndexData srcData = {nullptr, mushortIndices.data(),
static_cast<unsigned int>(mushortIndices.size()),
- GL_UNSIGNED_SHORT, false};
+ gl::DrawElementsType::UnsignedShort, false};
emulateAndCompare(&srcData);
}
@@ -159,8 +159,8 @@
TEST_P(D3D11EmulatedIndexedBufferTest, TestNativeToExpandedUsingGLuintIndices)
{
rx::SourceIndexData srcData = {nullptr, muintIndices.data(),
- static_cast<unsigned int>(muintIndices.size()), GL_UNSIGNED_INT,
- false};
+ static_cast<unsigned int>(muintIndices.size()),
+ gl::DrawElementsType::UnsignedInt, false};
emulateAndCompare(&srcData);
}
@@ -177,8 +177,8 @@
// Do a basic exanded and compare test.
rx::SourceIndexData srcData = {nullptr, muintIndices.data(),
- static_cast<unsigned int>(muintIndices.size()), GL_UNSIGNED_INT,
- false};
+ static_cast<unsigned int>(muintIndices.size()),
+ gl::DrawElementsType::UnsignedInt, false};
emulateAndCompare(&srcData);
const uint8_t *sourceBufferMem = nullptr;
diff --git a/src/tests/perf_tests/IndexDataManagerTest.cpp b/src/tests/perf_tests/IndexDataManagerTest.cpp
index 4f11e49..c7e72d7 100644
--- a/src/tests/perf_tests/IndexDataManagerTest.cpp
+++ b/src/tests/perf_tests/IndexDataManagerTest.cpp
@@ -25,30 +25,31 @@
class MockIndexBuffer : public rx::IndexBuffer
{
public:
- MockIndexBuffer(unsigned int bufferSize, GLenum indexType)
+ MockIndexBuffer(unsigned int bufferSize, gl::DrawElementsType indexType)
: mBufferSize(bufferSize), mIndexType(indexType)
{}
- MOCK_METHOD4(initialize, angle::Result(const gl::Context *, unsigned int, GLenum, bool));
+ MOCK_METHOD4(initialize,
+ angle::Result(const gl::Context *, unsigned int, gl::DrawElementsType, bool));
MOCK_METHOD4(mapBuffer,
angle::Result(const gl::Context *, unsigned int, unsigned int, void **));
MOCK_METHOD1(unmapBuffer, angle::Result(const gl::Context *));
MOCK_METHOD1(discard, angle::Result(const gl::Context *));
- MOCK_METHOD3(setSize, angle::Result(const gl::Context *, unsigned int, GLenum));
+ MOCK_METHOD3(setSize, angle::Result(const gl::Context *, unsigned int, gl::DrawElementsType));
// inlined for speed
- GLenum getIndexType() const override { return mIndexType; }
+ gl::DrawElementsType getIndexType() const override { return mIndexType; }
unsigned int getBufferSize() const override { return mBufferSize; }
private:
unsigned int mBufferSize;
- GLenum mIndexType;
+ gl::DrawElementsType mIndexType;
};
class MockBufferFactoryD3D : public rx::BufferFactoryD3D
{
public:
- MockBufferFactoryD3D(unsigned int bufferSize, GLenum indexType)
+ MockBufferFactoryD3D(unsigned int bufferSize, gl::DrawElementsType indexType)
: mBufferSize(bufferSize), mIndexType(indexType)
{}
@@ -71,7 +72,7 @@
private:
unsigned int mBufferSize;
- GLenum mIndexType;
+ gl::DrawElementsType mIndexType;
};
class MockBufferD3D : public rx::BufferD3D
@@ -161,7 +162,7 @@
mIndexDataManager(&mMockBufferFactory),
mIndexCount(4000),
mBufferSize(mIndexCount * sizeof(GLushort)),
- mMockBufferFactory(mBufferSize, GL_UNSIGNED_SHORT),
+ mMockBufferFactory(mBufferSize, gl::DrawElementsType::UnsignedShort),
mMockGLFactory(&mMockBufferFactory),
mIndexBuffer(&mMockGLFactory, 1)
{
@@ -182,11 +183,11 @@
gl::IndexRange indexRange;
for (unsigned int iteration = 0; iteration < kIterationsPerStep; ++iteration)
{
- (void)mIndexBuffer.getIndexRange(nullptr, GL_UNSIGNED_SHORT, 0, mIndexCount, false,
- &indexRange);
- (void)mIndexDataManager.prepareIndexData(nullptr, GL_UNSIGNED_SHORT, GL_UNSIGNED_SHORT,
- mIndexCount, &mIndexBuffer, nullptr,
- &translatedIndexData);
+ (void)mIndexBuffer.getIndexRange(nullptr, gl::DrawElementsType::UnsignedShort, 0,
+ mIndexCount, false, &indexRange);
+ (void)mIndexDataManager.prepareIndexData(nullptr, gl::DrawElementsType::UnsignedShort,
+ gl::DrawElementsType::UnsignedShort, mIndexCount,
+ &mIndexBuffer, nullptr, &translatedIndexData);
}
}