Add vertex formats and lookup function.
Add an angle::Format for each ES2 vertex data format. Add function
GetVertexFormatID() to get the angle::Format for a vertex attribute.
These will be used later to support vertex formats in Vulkan (by mapping
angle::Format to Vulkan format) and to eliminate the redundant enum
gl::VertexFormatType.
No functional change.
BUG=angleproject:2405
BUG=angleproject:2531
Change-Id: I871ae23ce9fba57d90c554376e84b03f8514f7fc
Reviewed-on: https://chromium-review.googlesource.com/1044874
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
diff --git a/src/libANGLE/formatutils.cpp b/src/libANGLE/formatutils.cpp
index f104b70..8c67dbe 100644
--- a/src/libANGLE/formatutils.cpp
+++ b/src/libANGLE/formatutils.cpp
@@ -17,9 +17,9 @@
namespace gl
{
-// ES2 requires that format is equal to internal format at all glTex*Image2D entry points and the implementation
-// can decide the true, sized, internal format. The ES2FormatMap determines the internal format for all valid
-// format and type combinations.
+// ES2 requires that format is equal to internal format at all glTex*Image2D entry points and the
+// implementation can decide the true, sized, internal format. The ES2FormatMap determines the
+// internal format for all valid format and type combinations.
GLenum GetSizedFormatInternal(GLenum format, GLenum type);
namespace
@@ -44,10 +44,7 @@
return type < other.type;
}
-Type::Type()
- : bytes(0),
- bytesShift(0),
- specialInterpretation(false)
+Type::Type() : bytes(0), bytesShift(0), specialInterpretation(false)
{
}
@@ -55,7 +52,7 @@
{
Type info;
info.bytes = bytes;
- GLuint i = 0;
+ GLuint i = 0;
while ((1u << i) < bytes)
{
++i;
@@ -66,7 +63,7 @@
return info;
}
-bool operator<(const Type& a, const Type& b)
+bool operator<(const Type &a, const Type &b)
{
return memcmp(&a, &b, sizeof(Type)) < 0;
}
@@ -541,21 +538,21 @@
formatInfo.sized = sized;
formatInfo.sizedInternalFormat =
sized ? internalFormat : GetSizedFormatInternal(internalFormat, type);
- formatInfo.redBits = red;
- formatInfo.greenBits = green;
- formatInfo.blueBits = blue;
- formatInfo.alphaBits = alpha;
+ formatInfo.redBits = red;
+ formatInfo.greenBits = green;
+ formatInfo.blueBits = blue;
+ formatInfo.alphaBits = alpha;
formatInfo.sharedBits = shared;
formatInfo.pixelBytes = (red + green + blue + alpha + shared) / 8;
formatInfo.componentCount =
((red > 0) ? 1 : 0) + ((green > 0) ? 1 : 0) + ((blue > 0) ? 1 : 0) + ((alpha > 0) ? 1 : 0);
- formatInfo.format = format;
- formatInfo.type = type;
- formatInfo.componentType = componentType;
- formatInfo.colorEncoding = (srgb ? GL_SRGB : GL_LINEAR);
+ formatInfo.format = format;
+ formatInfo.type = type;
+ formatInfo.componentType = componentType;
+ formatInfo.colorEncoding = (srgb ? GL_SRGB : GL_LINEAR);
formatInfo.textureSupport = textureSupport;
- formatInfo.renderSupport = renderSupport;
- formatInfo.filterSupport = filterSupport;
+ formatInfo.renderSupport = renderSupport;
+ formatInfo.filterSupport = filterSupport;
InsertFormatInfo(map, formatInfo);
}
@@ -577,17 +574,17 @@
formatInfo.sized = sized;
formatInfo.sizedInternalFormat =
sized ? internalFormat : GetSizedFormatInternal(internalFormat, type);
- formatInfo.luminanceBits = luminance;
- formatInfo.alphaBits = alpha;
- formatInfo.pixelBytes = (luminance + alpha) / 8;
+ formatInfo.luminanceBits = luminance;
+ formatInfo.alphaBits = alpha;
+ formatInfo.pixelBytes = (luminance + alpha) / 8;
formatInfo.componentCount = ((luminance > 0) ? 1 : 0) + ((alpha > 0) ? 1 : 0);
- formatInfo.format = format;
- formatInfo.type = type;
- formatInfo.componentType = componentType;
- formatInfo.colorEncoding = GL_LINEAR;
+ formatInfo.format = format;
+ formatInfo.type = type;
+ formatInfo.componentType = componentType;
+ formatInfo.colorEncoding = GL_LINEAR;
formatInfo.textureSupport = textureSupport;
- formatInfo.renderSupport = renderSupport;
- formatInfo.filterSupport = filterSupport;
+ formatInfo.renderSupport = renderSupport;
+ formatInfo.filterSupport = filterSupport;
InsertFormatInfo(map, formatInfo);
}
@@ -610,17 +607,17 @@
formatInfo.sized = sized;
formatInfo.sizedInternalFormat =
sized ? internalFormat : GetSizedFormatInternal(internalFormat, type);
- formatInfo.depthBits = depthBits;
- formatInfo.stencilBits = stencilBits;
- formatInfo.pixelBytes = (depthBits + stencilBits + unusedBits) / 8;
+ formatInfo.depthBits = depthBits;
+ formatInfo.stencilBits = stencilBits;
+ formatInfo.pixelBytes = (depthBits + stencilBits + unusedBits) / 8;
formatInfo.componentCount = ((depthBits > 0) ? 1 : 0) + ((stencilBits > 0) ? 1 : 0);
- formatInfo.format = format;
- formatInfo.type = type;
- formatInfo.componentType = componentType;
- formatInfo.colorEncoding = GL_LINEAR;
+ formatInfo.format = format;
+ formatInfo.type = type;
+ formatInfo.componentType = componentType;
+ formatInfo.colorEncoding = GL_LINEAR;
formatInfo.textureSupport = textureSupport;
- formatInfo.renderSupport = renderSupport;
- formatInfo.filterSupport = filterSupport;
+ formatInfo.renderSupport = renderSupport;
+ formatInfo.filterSupport = filterSupport;
InsertFormatInfo(map, formatInfo);
}
@@ -642,18 +639,18 @@
formatInfo.internalFormat = internalFormat;
formatInfo.sized = true;
formatInfo.sizedInternalFormat = internalFormat;
- formatInfo.compressedBlockWidth = compressedBlockWidth;
+ formatInfo.compressedBlockWidth = compressedBlockWidth;
formatInfo.compressedBlockHeight = compressedBlockHeight;
- formatInfo.pixelBytes = compressedBlockSize / 8;
- formatInfo.componentCount = componentCount;
- formatInfo.format = format;
- formatInfo.type = type;
- formatInfo.componentType = GL_UNSIGNED_NORMALIZED;
- formatInfo.colorEncoding = (srgb ? GL_SRGB : GL_LINEAR);
- formatInfo.compressed = true;
- formatInfo.textureSupport = textureSupport;
- formatInfo.renderSupport = renderSupport;
- formatInfo.filterSupport = filterSupport;
+ formatInfo.pixelBytes = compressedBlockSize / 8;
+ formatInfo.componentCount = componentCount;
+ formatInfo.format = format;
+ formatInfo.type = type;
+ formatInfo.componentType = GL_UNSIGNED_NORMALIZED;
+ formatInfo.colorEncoding = (srgb ? GL_SRGB : GL_LINEAR);
+ formatInfo.compressed = true;
+ formatInfo.textureSupport = textureSupport;
+ formatInfo.renderSupport = renderSupport;
+ formatInfo.filterSupport = filterSupport;
InsertFormatInfo(map, formatInfo);
}
@@ -970,51 +967,51 @@
{
switch (type)
{
- case GL_UNSIGNED_BYTE:
- case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ case GL_BYTE:
{
static const Type info = GenTypeInfo(1, false);
return info;
}
- case GL_UNSIGNED_SHORT:
- case GL_SHORT:
- case GL_HALF_FLOAT:
- case GL_HALF_FLOAT_OES:
+ case GL_UNSIGNED_SHORT:
+ case GL_SHORT:
+ case GL_HALF_FLOAT:
+ case GL_HALF_FLOAT_OES:
{
static const Type info = GenTypeInfo(2, false);
return info;
}
- case GL_UNSIGNED_INT:
- case GL_INT:
- case GL_FLOAT:
+ case GL_UNSIGNED_INT:
+ case GL_INT:
+ case GL_FLOAT:
{
static const Type info = GenTypeInfo(4, false);
return info;
}
- case GL_UNSIGNED_SHORT_5_6_5:
- case GL_UNSIGNED_SHORT_4_4_4_4:
- case GL_UNSIGNED_SHORT_5_5_5_1:
- case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
- case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
+ case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
{
static const Type info = GenTypeInfo(2, true);
return info;
}
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- case GL_UNSIGNED_INT_24_8:
- case GL_UNSIGNED_INT_10F_11F_11F_REV:
- case GL_UNSIGNED_INT_5_9_9_9_REV:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ case GL_UNSIGNED_INT_24_8:
+ case GL_UNSIGNED_INT_10F_11F_11F_REV:
+ case GL_UNSIGNED_INT_5_9_9_9_REV:
{
ASSERT(GL_UNSIGNED_INT_24_8_OES == GL_UNSIGNED_INT_24_8);
static const Type info = GenTypeInfo(4, true);
return info;
}
- case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
+ case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
{
static const Type info = GenTypeInfo(8, true);
return info;
}
- default:
+ default:
{
static const Type defaultInfo;
return defaultInfo;
@@ -1077,9 +1074,9 @@
}
ErrorOrResult<GLuint> InternalFormat::computeRowPitch(GLenum formatType,
- GLsizei width,
- GLint alignment,
- GLint rowLength) const
+ GLsizei width,
+ GLint alignment,
+ GLint rowLength) const
{
// Compressed images do not use pack/unpack parameters.
if (compressed)
@@ -1112,11 +1109,11 @@
}
ErrorOrResult<GLuint> InternalFormat::computeDepthPitch(GLenum formatType,
- GLsizei width,
- GLsizei height,
- GLint alignment,
- GLint rowLength,
- GLint imageHeight) const
+ GLsizei width,
+ GLsizei height,
+ GLint alignment,
+ GLint rowLength,
+ GLint imageHeight) const
{
GLuint rowPitch = 0;
ANGLE_TRY_RESULT(computeRowPitch(formatType, width, alignment, rowLength), rowPitch);
@@ -1162,11 +1159,10 @@
return skipBytes.ValueOrDie();
}
-ErrorOrResult<GLuint> InternalFormat::computePackUnpackEndByte(
- GLenum formatType,
- const Extents &size,
- const PixelStoreStateBase &state,
- bool is3D) const
+ErrorOrResult<GLuint> InternalFormat::computePackUnpackEndByte(GLenum formatType,
+ const Extents &size,
+ const PixelStoreStateBase &state,
+ bool is3D) const
{
GLuint rowPitch = 0;
ANGLE_TRY_RESULT(computeRowPitch(formatType, size.width, state.alignment, state.rowLength),
@@ -1279,7 +1275,10 @@
}
}
-VertexFormatType GetVertexFormatType(GLenum type, GLboolean normalized, GLuint components, bool pureInteger)
+angle::Format::ID GetVertexFormatID(GLenum type,
+ GLboolean normalized,
+ GLuint components,
+ bool pureInteger)
{
switch (type)
{
@@ -1288,32 +1287,32 @@
{
case 1:
if (pureInteger)
- return VERTEX_FORMAT_SBYTE1_INT;
+ return angle::Format::ID::R8_SINT;
if (normalized)
- return VERTEX_FORMAT_SBYTE1_NORM;
- return VERTEX_FORMAT_SBYTE1;
+ return angle::Format::ID::R8_SNORM;
+ return angle::Format::ID::R8_SSCALED;
case 2:
if (pureInteger)
- return VERTEX_FORMAT_SBYTE2_INT;
+ return angle::Format::ID::R8G8_SINT;
if (normalized)
- return VERTEX_FORMAT_SBYTE2_NORM;
- return VERTEX_FORMAT_SBYTE2;
+ return angle::Format::ID::R8G8_SNORM;
+ return angle::Format::ID::R8G8_SSCALED;
case 3:
if (pureInteger)
- return VERTEX_FORMAT_SBYTE3_INT;
+ return angle::Format::ID::R8G8B8_SINT;
if (normalized)
- return VERTEX_FORMAT_SBYTE3_NORM;
- return VERTEX_FORMAT_SBYTE3;
+ return angle::Format::ID::R8G8B8_SNORM;
+ return angle::Format::ID::R8G8B8_SSCALED;
case 4:
if (pureInteger)
- return VERTEX_FORMAT_SBYTE4_INT;
+ return angle::Format::ID::R8G8B8A8_SINT;
if (normalized)
- return VERTEX_FORMAT_SBYTE4_NORM;
- return VERTEX_FORMAT_SBYTE4;
+ return angle::Format::ID::R8G8B8A8_SNORM;
+ return angle::Format::ID::R8G8B8A8_SSCALED;
default:
UNREACHABLE();
#if !UNREACHABLE_IS_NORETURN
- return VERTEX_FORMAT_INVALID;
+ return angle::Format::ID::NONE;
#endif
}
case GL_UNSIGNED_BYTE:
@@ -1321,32 +1320,32 @@
{
case 1:
if (pureInteger)
- return VERTEX_FORMAT_UBYTE1_INT;
+ return angle::Format::ID::R8_UINT;
if (normalized)
- return VERTEX_FORMAT_UBYTE1_NORM;
- return VERTEX_FORMAT_UBYTE1;
+ return angle::Format::ID::R8_UNORM;
+ return angle::Format::ID::R8_USCALED;
case 2:
if (pureInteger)
- return VERTEX_FORMAT_UBYTE2_INT;
+ return angle::Format::ID::R8G8_UINT;
if (normalized)
- return VERTEX_FORMAT_UBYTE2_NORM;
- return VERTEX_FORMAT_UBYTE2;
+ return angle::Format::ID::R8G8_UNORM;
+ return angle::Format::ID::R8G8_USCALED;
case 3:
if (pureInteger)
- return VERTEX_FORMAT_UBYTE3_INT;
+ return angle::Format::ID::R8G8B8_UINT;
if (normalized)
- return VERTEX_FORMAT_UBYTE3_NORM;
- return VERTEX_FORMAT_UBYTE3;
+ return angle::Format::ID::R8G8B8_UNORM;
+ return angle::Format::ID::R8G8B8_USCALED;
case 4:
if (pureInteger)
- return VERTEX_FORMAT_UBYTE4_INT;
+ return angle::Format::ID::R8G8B8A8_UINT;
if (normalized)
- return VERTEX_FORMAT_UBYTE4_NORM;
- return VERTEX_FORMAT_UBYTE4;
+ return angle::Format::ID::R8G8B8A8_UNORM;
+ return angle::Format::ID::R8G8B8A8_USCALED;
default:
UNREACHABLE();
#if !UNREACHABLE_IS_NORETURN
- return VERTEX_FORMAT_INVALID;
+ return angle::Format::ID::NONE;
#endif
}
case GL_SHORT:
@@ -1354,32 +1353,32 @@
{
case 1:
if (pureInteger)
- return VERTEX_FORMAT_SSHORT1_INT;
+ return angle::Format::ID::R16_SINT;
if (normalized)
- return VERTEX_FORMAT_SSHORT1_NORM;
- return VERTEX_FORMAT_SSHORT1;
+ return angle::Format::ID::R16_SNORM;
+ return angle::Format::ID::R16_SSCALED;
case 2:
if (pureInteger)
- return VERTEX_FORMAT_SSHORT2_INT;
+ return angle::Format::ID::R16G16_SINT;
if (normalized)
- return VERTEX_FORMAT_SSHORT2_NORM;
- return VERTEX_FORMAT_SSHORT2;
+ return angle::Format::ID::R16G16_SNORM;
+ return angle::Format::ID::R16G16_SSCALED;
case 3:
if (pureInteger)
- return VERTEX_FORMAT_SSHORT3_INT;
+ return angle::Format::ID::R16G16B16_SINT;
if (normalized)
- return VERTEX_FORMAT_SSHORT3_NORM;
- return VERTEX_FORMAT_SSHORT3;
+ return angle::Format::ID::R16G16B16_SNORM;
+ return angle::Format::ID::R16G16B16_SSCALED;
case 4:
if (pureInteger)
- return VERTEX_FORMAT_SSHORT4_INT;
+ return angle::Format::ID::R16G16B16A16_SINT;
if (normalized)
- return VERTEX_FORMAT_SSHORT4_NORM;
- return VERTEX_FORMAT_SSHORT4;
+ return angle::Format::ID::R16G16B16A16_SNORM;
+ return angle::Format::ID::R16G16B16A16_SSCALED;
default:
UNREACHABLE();
#if !UNREACHABLE_IS_NORETURN
- return VERTEX_FORMAT_INVALID;
+ return angle::Format::ID::NONE;
#endif
}
case GL_UNSIGNED_SHORT:
@@ -1387,32 +1386,32 @@
{
case 1:
if (pureInteger)
- return VERTEX_FORMAT_USHORT1_INT;
+ return angle::Format::ID::R16_UINT;
if (normalized)
- return VERTEX_FORMAT_USHORT1_NORM;
- return VERTEX_FORMAT_USHORT1;
+ return angle::Format::ID::R16_UNORM;
+ return angle::Format::ID::R16_USCALED;
case 2:
if (pureInteger)
- return VERTEX_FORMAT_USHORT2_INT;
+ return angle::Format::ID::R16G16_UINT;
if (normalized)
- return VERTEX_FORMAT_USHORT2_NORM;
- return VERTEX_FORMAT_USHORT2;
+ return angle::Format::ID::R16G16_UNORM;
+ return angle::Format::ID::R16G16_USCALED;
case 3:
if (pureInteger)
- return VERTEX_FORMAT_USHORT3_INT;
+ return angle::Format::ID::R16G16B16_UINT;
if (normalized)
- return VERTEX_FORMAT_USHORT3_NORM;
- return VERTEX_FORMAT_USHORT3;
+ return angle::Format::ID::R16G16B16_UNORM;
+ return angle::Format::ID::R16G16B16_USCALED;
case 4:
if (pureInteger)
- return VERTEX_FORMAT_USHORT4_INT;
+ return angle::Format::ID::R16G16B16A16_UINT;
if (normalized)
- return VERTEX_FORMAT_USHORT4_NORM;
- return VERTEX_FORMAT_USHORT4;
+ return angle::Format::ID::R16G16B16A16_UNORM;
+ return angle::Format::ID::R16G16B16A16_USCALED;
default:
UNREACHABLE();
#if !UNREACHABLE_IS_NORETURN
- return VERTEX_FORMAT_INVALID;
+ return angle::Format::ID::NONE;
#endif
}
case GL_INT:
@@ -1420,32 +1419,32 @@
{
case 1:
if (pureInteger)
- return VERTEX_FORMAT_SINT1_INT;
+ return angle::Format::ID::R32_SINT;
if (normalized)
- return VERTEX_FORMAT_SINT1_NORM;
- return VERTEX_FORMAT_SINT1;
+ return angle::Format::ID::R32_SNORM;
+ return angle::Format::ID::R32_SSCALED;
case 2:
if (pureInteger)
- return VERTEX_FORMAT_SINT2_INT;
+ return angle::Format::ID::R32G32_SINT;
if (normalized)
- return VERTEX_FORMAT_SINT2_NORM;
- return VERTEX_FORMAT_SINT2;
+ return angle::Format::ID::R32G32_SNORM;
+ return angle::Format::ID::R32G32_SSCALED;
case 3:
if (pureInteger)
- return VERTEX_FORMAT_SINT3_INT;
+ return angle::Format::ID::R32G32B32_SINT;
if (normalized)
- return VERTEX_FORMAT_SINT3_NORM;
- return VERTEX_FORMAT_SINT3;
+ return angle::Format::ID::R32G32B32_SNORM;
+ return angle::Format::ID::R32G32B32_SSCALED;
case 4:
if (pureInteger)
- return VERTEX_FORMAT_SINT4_INT;
+ return angle::Format::ID::R32G32B32A32_SINT;
if (normalized)
- return VERTEX_FORMAT_SINT4_NORM;
- return VERTEX_FORMAT_SINT4;
+ return angle::Format::ID::R32G32B32A32_SNORM;
+ return angle::Format::ID::R32G32B32A32_SSCALED;
default:
UNREACHABLE();
#if !UNREACHABLE_IS_NORETURN
- return VERTEX_FORMAT_INVALID;
+ return angle::Format::ID::NONE;
#endif
}
case GL_UNSIGNED_INT:
@@ -1453,105 +1452,303 @@
{
case 1:
if (pureInteger)
- return VERTEX_FORMAT_UINT1_INT;
+ return angle::Format::ID::R32_UINT;
if (normalized)
- return VERTEX_FORMAT_UINT1_NORM;
- return VERTEX_FORMAT_UINT1;
+ return angle::Format::ID::R32_UNORM;
+ return angle::Format::ID::R32_USCALED;
case 2:
if (pureInteger)
- return VERTEX_FORMAT_UINT2_INT;
+ return angle::Format::ID::R32G32_UINT;
if (normalized)
- return VERTEX_FORMAT_UINT2_NORM;
- return VERTEX_FORMAT_UINT2;
+ return angle::Format::ID::R32G32_UNORM;
+ return angle::Format::ID::R32G32_USCALED;
case 3:
if (pureInteger)
- return VERTEX_FORMAT_UINT3_INT;
+ return angle::Format::ID::R32G32B32_UINT;
if (normalized)
- return VERTEX_FORMAT_UINT3_NORM;
- return VERTEX_FORMAT_UINT3;
+ return angle::Format::ID::R32G32B32_UNORM;
+ return angle::Format::ID::R32G32B32_USCALED;
case 4:
if (pureInteger)
- return VERTEX_FORMAT_UINT4_INT;
+ return angle::Format::ID::R32G32B32A32_UINT;
if (normalized)
- return VERTEX_FORMAT_UINT4_NORM;
- return VERTEX_FORMAT_UINT4;
+ return angle::Format::ID::R32G32B32A32_UNORM;
+ return angle::Format::ID::R32G32B32A32_USCALED;
default:
UNREACHABLE();
#if !UNREACHABLE_IS_NORETURN
- return VERTEX_FORMAT_INVALID;
+ return angle::Format::ID::NONE;
#endif
}
case GL_FLOAT:
switch (components)
{
case 1:
- return VERTEX_FORMAT_FLOAT1;
+ return angle::Format::ID::R32_FLOAT;
case 2:
- return VERTEX_FORMAT_FLOAT2;
+ return angle::Format::ID::R32G32_FLOAT;
case 3:
- return VERTEX_FORMAT_FLOAT3;
+ return angle::Format::ID::R32G32B32_FLOAT;
case 4:
- return VERTEX_FORMAT_FLOAT4;
+ return angle::Format::ID::R32G32B32A32_FLOAT;
default:
UNREACHABLE();
#if !UNREACHABLE_IS_NORETURN
- return VERTEX_FORMAT_INVALID;
+ return angle::Format::ID::NONE;
#endif
}
case GL_HALF_FLOAT:
switch (components)
{
case 1:
- return VERTEX_FORMAT_HALF1;
+ return angle::Format::ID::R16_FLOAT;
case 2:
- return VERTEX_FORMAT_HALF2;
+ return angle::Format::ID::R16G16_FLOAT;
case 3:
- return VERTEX_FORMAT_HALF3;
+ return angle::Format::ID::R16G16B16_FLOAT;
case 4:
- return VERTEX_FORMAT_HALF4;
+ return angle::Format::ID::R16G16B16A16_FLOAT;
default:
UNREACHABLE();
#if !UNREACHABLE_IS_NORETURN
- return VERTEX_FORMAT_INVALID;
+ return angle::Format::ID::NONE;
#endif
}
case GL_FIXED:
switch (components)
{
case 1:
- return VERTEX_FORMAT_FIXED1;
+ return angle::Format::ID::R32_FIXED;
case 2:
- return VERTEX_FORMAT_FIXED2;
+ return angle::Format::ID::R32G32_FIXED;
case 3:
- return VERTEX_FORMAT_FIXED3;
+ return angle::Format::ID::R32G32B32_FIXED;
case 4:
- return VERTEX_FORMAT_FIXED4;
+ return angle::Format::ID::R32G32B32A32_FIXED;
default:
UNREACHABLE();
#if !UNREACHABLE_IS_NORETURN
- return VERTEX_FORMAT_INVALID;
+ return angle::Format::ID::NONE;
#endif
}
case GL_INT_2_10_10_10_REV:
if (pureInteger)
- return VERTEX_FORMAT_SINT210_INT;
+ return angle::Format::ID::R10G10B10A2_SINT;
if (normalized)
- return VERTEX_FORMAT_SINT210_NORM;
- return VERTEX_FORMAT_SINT210;
+ return angle::Format::ID::R10G10B10A2_SNORM;
+ return angle::Format::ID::R10G10B10A2_SSCALED;
case GL_UNSIGNED_INT_2_10_10_10_REV:
if (pureInteger)
- return VERTEX_FORMAT_UINT210_INT;
+ return angle::Format::ID::R10G10B10A2_UINT;
if (normalized)
- return VERTEX_FORMAT_UINT210_NORM;
- return VERTEX_FORMAT_UINT210;
+ return angle::Format::ID::R10G10B10A2_UNORM;
+ return angle::Format::ID::R10G10B10A2_USCALED;
default:
UNREACHABLE();
#if !UNREACHABLE_IS_NORETURN
- return VERTEX_FORMAT_INVALID;
+ return angle::Format::ID::NONE;
#endif
}
}
+angle::Format::ID GetVertexFormatID(const VertexAttribute &attrib)
+{
+ return GetVertexFormatID(attrib.type, attrib.normalized, attrib.size, attrib.pureInteger);
+}
+
+// TODO(fjhenigman): Do away with VertexFormatType; use angle::Format::ID instead. anglebug.com/2531
+VertexFormatType GetVertexFormatType(GLenum type,
+ GLboolean normalized,
+ GLuint components,
+ bool pureInteger)
+{
+ switch (GetVertexFormatID(type, normalized, components, pureInteger))
+ {
+ case angle::Format::ID::R8_SINT:
+ return VERTEX_FORMAT_SBYTE1_INT;
+ case angle::Format::ID::R8_SNORM:
+ return VERTEX_FORMAT_SBYTE1_NORM;
+ case angle::Format::ID::R8_SSCALED:
+ return VERTEX_FORMAT_SBYTE1;
+ case angle::Format::ID::R8G8_SINT:
+ return VERTEX_FORMAT_SBYTE2_INT;
+ case angle::Format::ID::R8G8_SNORM:
+ return VERTEX_FORMAT_SBYTE2_NORM;
+ case angle::Format::ID::R8G8_SSCALED:
+ return VERTEX_FORMAT_SBYTE2;
+ case angle::Format::ID::R8G8B8_SINT:
+ return VERTEX_FORMAT_SBYTE3_INT;
+ case angle::Format::ID::R8G8B8_SNORM:
+ return VERTEX_FORMAT_SBYTE3_NORM;
+ case angle::Format::ID::R8G8B8_SSCALED:
+ return VERTEX_FORMAT_SBYTE3;
+ case angle::Format::ID::R8G8B8A8_SINT:
+ return VERTEX_FORMAT_SBYTE4_INT;
+ case angle::Format::ID::R8G8B8A8_SNORM:
+ return VERTEX_FORMAT_SBYTE4_NORM;
+ case angle::Format::ID::R8G8B8A8_SSCALED:
+ return VERTEX_FORMAT_SBYTE4;
+ case angle::Format::ID::R8_UINT:
+ return VERTEX_FORMAT_UBYTE1_INT;
+ case angle::Format::ID::R8_UNORM:
+ return VERTEX_FORMAT_UBYTE1_NORM;
+ case angle::Format::ID::R8_USCALED:
+ return VERTEX_FORMAT_UBYTE1;
+ case angle::Format::ID::R8G8_UINT:
+ return VERTEX_FORMAT_UBYTE2_INT;
+ case angle::Format::ID::R8G8_UNORM:
+ return VERTEX_FORMAT_UBYTE2_NORM;
+ case angle::Format::ID::R8G8_USCALED:
+ return VERTEX_FORMAT_UBYTE2;
+ case angle::Format::ID::R8G8B8_UINT:
+ return VERTEX_FORMAT_UBYTE3_INT;
+ case angle::Format::ID::R8G8B8_UNORM:
+ return VERTEX_FORMAT_UBYTE3_NORM;
+ case angle::Format::ID::R8G8B8_USCALED:
+ return VERTEX_FORMAT_UBYTE3;
+ case angle::Format::ID::R8G8B8A8_UINT:
+ return VERTEX_FORMAT_UBYTE4_INT;
+ case angle::Format::ID::R8G8B8A8_UNORM:
+ return VERTEX_FORMAT_UBYTE4_NORM;
+ case angle::Format::ID::R8G8B8A8_USCALED:
+ return VERTEX_FORMAT_UBYTE4;
+ case angle::Format::ID::R16_SINT:
+ return VERTEX_FORMAT_SSHORT1_INT;
+ case angle::Format::ID::R16_SNORM:
+ return VERTEX_FORMAT_SSHORT1_NORM;
+ case angle::Format::ID::R16_SSCALED:
+ return VERTEX_FORMAT_SSHORT1;
+ case angle::Format::ID::R16G16_SINT:
+ return VERTEX_FORMAT_SSHORT2_INT;
+ case angle::Format::ID::R16G16_SNORM:
+ return VERTEX_FORMAT_SSHORT2_NORM;
+ case angle::Format::ID::R16G16_SSCALED:
+ return VERTEX_FORMAT_SSHORT2;
+ case angle::Format::ID::R16G16B16_SINT:
+ return VERTEX_FORMAT_SSHORT3_INT;
+ case angle::Format::ID::R16G16B16_SNORM:
+ return VERTEX_FORMAT_SSHORT3_NORM;
+ case angle::Format::ID::R16G16B16_SSCALED:
+ return VERTEX_FORMAT_SSHORT3;
+ case angle::Format::ID::R16G16B16A16_SINT:
+ return VERTEX_FORMAT_SSHORT4_INT;
+ case angle::Format::ID::R16G16B16A16_SNORM:
+ return VERTEX_FORMAT_SSHORT4_NORM;
+ case angle::Format::ID::R16G16B16A16_SSCALED:
+ return VERTEX_FORMAT_SSHORT4;
+ case angle::Format::ID::R16_UINT:
+ return VERTEX_FORMAT_USHORT1_INT;
+ case angle::Format::ID::R16_UNORM:
+ return VERTEX_FORMAT_USHORT1_NORM;
+ case angle::Format::ID::R16_USCALED:
+ return VERTEX_FORMAT_USHORT1;
+ case angle::Format::ID::R16G16_UINT:
+ return VERTEX_FORMAT_USHORT2_INT;
+ case angle::Format::ID::R16G16_UNORM:
+ return VERTEX_FORMAT_USHORT2_NORM;
+ case angle::Format::ID::R16G16_USCALED:
+ return VERTEX_FORMAT_USHORT2;
+ case angle::Format::ID::R16G16B16_UINT:
+ return VERTEX_FORMAT_USHORT3_INT;
+ case angle::Format::ID::R16G16B16_UNORM:
+ return VERTEX_FORMAT_USHORT3_NORM;
+ case angle::Format::ID::R16G16B16_USCALED:
+ return VERTEX_FORMAT_USHORT3;
+ case angle::Format::ID::R16G16B16A16_UINT:
+ return VERTEX_FORMAT_USHORT4_INT;
+ case angle::Format::ID::R16G16B16A16_UNORM:
+ return VERTEX_FORMAT_USHORT4_NORM;
+ case angle::Format::ID::R16G16B16A16_USCALED:
+ return VERTEX_FORMAT_USHORT4;
+ case angle::Format::ID::R32_SINT:
+ return VERTEX_FORMAT_SINT1_INT;
+ case angle::Format::ID::R32_SNORM:
+ return VERTEX_FORMAT_SINT1_NORM;
+ case angle::Format::ID::R32_SSCALED:
+ return VERTEX_FORMAT_SINT1;
+ case angle::Format::ID::R32G32_SINT:
+ return VERTEX_FORMAT_SINT2_INT;
+ case angle::Format::ID::R32G32_SNORM:
+ return VERTEX_FORMAT_SINT2_NORM;
+ case angle::Format::ID::R32G32_SSCALED:
+ return VERTEX_FORMAT_SINT2;
+ case angle::Format::ID::R32G32B32_SINT:
+ return VERTEX_FORMAT_SINT3_INT;
+ case angle::Format::ID::R32G32B32_SNORM:
+ return VERTEX_FORMAT_SINT3_NORM;
+ case angle::Format::ID::R32G32B32_SSCALED:
+ return VERTEX_FORMAT_SINT3;
+ case angle::Format::ID::R32G32B32A32_SINT:
+ return VERTEX_FORMAT_SINT4_INT;
+ case angle::Format::ID::R32G32B32A32_SNORM:
+ return VERTEX_FORMAT_SINT4_NORM;
+ case angle::Format::ID::R32G32B32A32_SSCALED:
+ return VERTEX_FORMAT_SINT4;
+ case angle::Format::ID::R32_UINT:
+ return VERTEX_FORMAT_UINT1_INT;
+ case angle::Format::ID::R32_UNORM:
+ return VERTEX_FORMAT_UINT1_NORM;
+ case angle::Format::ID::R32_USCALED:
+ return VERTEX_FORMAT_UINT1;
+ case angle::Format::ID::R32G32_UINT:
+ return VERTEX_FORMAT_UINT2_INT;
+ case angle::Format::ID::R32G32_UNORM:
+ return VERTEX_FORMAT_UINT2_NORM;
+ case angle::Format::ID::R32G32_USCALED:
+ return VERTEX_FORMAT_UINT2;
+ case angle::Format::ID::R32G32B32_UINT:
+ return VERTEX_FORMAT_UINT3_INT;
+ case angle::Format::ID::R32G32B32_UNORM:
+ return VERTEX_FORMAT_UINT3_NORM;
+ case angle::Format::ID::R32G32B32_USCALED:
+ return VERTEX_FORMAT_UINT3;
+ case angle::Format::ID::R32G32B32A32_UINT:
+ return VERTEX_FORMAT_UINT4_INT;
+ case angle::Format::ID::R32G32B32A32_UNORM:
+ return VERTEX_FORMAT_UINT4_NORM;
+ case angle::Format::ID::R32G32B32A32_USCALED:
+ return VERTEX_FORMAT_UINT4;
+ case angle::Format::ID::R32_FLOAT:
+ return VERTEX_FORMAT_FLOAT1;
+ case angle::Format::ID::R32G32_FLOAT:
+ return VERTEX_FORMAT_FLOAT2;
+ case angle::Format::ID::R32G32B32_FLOAT:
+ return VERTEX_FORMAT_FLOAT3;
+ case angle::Format::ID::R32G32B32A32_FLOAT:
+ return VERTEX_FORMAT_FLOAT4;
+ case angle::Format::ID::R16_FLOAT:
+ return VERTEX_FORMAT_HALF1;
+ case angle::Format::ID::R16G16_FLOAT:
+ return VERTEX_FORMAT_HALF2;
+ case angle::Format::ID::R16G16B16_FLOAT:
+ return VERTEX_FORMAT_HALF3;
+ case angle::Format::ID::R16G16B16A16_FLOAT:
+ return VERTEX_FORMAT_HALF4;
+ case angle::Format::ID::R32_FIXED:
+ return VERTEX_FORMAT_FIXED1;
+ case angle::Format::ID::R32G32_FIXED:
+ return VERTEX_FORMAT_FIXED2;
+ case angle::Format::ID::R32G32B32_FIXED:
+ return VERTEX_FORMAT_FIXED3;
+ case angle::Format::ID::R32G32B32A32_FIXED:
+ return VERTEX_FORMAT_FIXED4;
+ case angle::Format::ID::R10G10B10A2_SINT:
+ return VERTEX_FORMAT_SINT210_INT;
+ case angle::Format::ID::R10G10B10A2_SNORM:
+ return VERTEX_FORMAT_SINT210_NORM;
+ case angle::Format::ID::R10G10B10A2_SSCALED:
+ return VERTEX_FORMAT_SINT210;
+ case angle::Format::ID::R10G10B10A2_UINT:
+ return VERTEX_FORMAT_UINT210_INT;
+ case angle::Format::ID::R10G10B10A2_UNORM:
+ return VERTEX_FORMAT_UINT210_NORM;
+ case angle::Format::ID::R10G10B10A2_USCALED:
+ return VERTEX_FORMAT_UINT210;
+ default:
+ return VERTEX_FORMAT_INVALID;
+ }
+}
+
VertexFormatType GetVertexFormatType(const VertexAttribute &attrib)
{
return GetVertexFormatType(attrib.type, attrib.normalized, attrib.size, attrib.pureInteger);
@@ -2153,14 +2350,14 @@
return internalFormat != GL_NONE && formatMap.find(internalFormat) != formatMap.end();
}
-VertexFormat::VertexFormat(GLenum typeIn, GLboolean normalizedIn, GLuint componentsIn, bool pureIntegerIn)
- : type(typeIn),
- normalized(normalizedIn),
- components(componentsIn),
- pureInteger(pureIntegerIn)
+VertexFormat::VertexFormat(GLenum typeIn,
+ GLboolean normalizedIn,
+ GLuint componentsIn,
+ bool pureIntegerIn)
+ : type(typeIn), normalized(normalizedIn), components(componentsIn), pureInteger(pureIntegerIn)
{
// float -> !normalized
- ASSERT(!(type == GL_FLOAT || type == GL_HALF_FLOAT || type == GL_FIXED) || normalized == GL_FALSE);
+ ASSERT(!(type == GL_FLOAT || type == GL_HALF_FLOAT || type == GL_FIXED) ||
+ normalized == GL_FALSE);
}
-
}