Commit 28d5a26e by Nicolas Capens

Work around unsuppressable GCC error.

GCC warns against bitfields not fitting the entire range of an enum with a fixed underlying type of unsigned int, which gets promoted to an error with -Werror and cannot be suppressed. However, GCC already defaults to using unsigned int as the underlying type of an unscoped enum without a fixed underlying type. So we can just omit it. Bug chromium:697528 Change-Id: I8db8fef09e3397d4ec5ebe9f7c3c5e4ae9c0edff Reviewed-on: https://swiftshader-review.googlesource.com/8928Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent 17982c4a
...@@ -15,6 +15,18 @@ ...@@ -15,6 +15,18 @@
#ifndef sw_Types_hpp #ifndef sw_Types_hpp
#define sw_Types_hpp #define sw_Types_hpp
#include <limits>
#include <type_traits>
// GCC warns against bitfields not fitting the entire range of an enum with a fixed underlying type of unsigned int, which gets promoted to an error with -Werror and cannot be suppressed.
// However, GCC already defaults to using unsigned int as the underlying type of an unscoped enum without a fixed underlying type. So we can just omit it.
#if defined(__GNUC__) && !defined(__clang__)
namespace {enum E {}; static_assert(!std::numeric_limits<std::underlying_type<E>::type>::is_signed, "expected unscoped enum whose underlying type is not fixed to be unsigned");}
#define ENUM_UNDERLYING_TYPE_UNSIGNED_INT
#else
#define ENUM_UNDERLYING_TYPE_UNSIGNED_INT : unsigned int
#endif
#if defined(_MSC_VER) #if defined(_MSC_VER)
typedef signed __int8 int8_t; typedef signed __int8 int8_t;
typedef signed __int16 int16_t; typedef signed __int16 int16_t;
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "Stream.hpp" #include "Stream.hpp"
#include "Point.hpp" #include "Point.hpp"
#include "Vertex.hpp" #include "Vertex.hpp"
#include "Common/Types.hpp"
namespace sw namespace sw
{ {
...@@ -52,7 +53,7 @@ namespace sw ...@@ -52,7 +53,7 @@ namespace sw
PositionT = 15 PositionT = 15
}; };
enum DrawType : unsigned int enum DrawType ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
// These types must stay ordered by vertices per primitive. Also, if these basic types // These types must stay ordered by vertices per primitive. Also, if these basic types
// are modified, verify the value assigned to task->verticesPerPrimitive in Renderer.cpp // are modified, verify the value assigned to task->verticesPerPrimitive in Renderer.cpp
...@@ -97,7 +98,7 @@ namespace sw ...@@ -97,7 +98,7 @@ namespace sw
DRAW_LAST = DRAW_INDEXEDTRIANGLEFAN32 DRAW_LAST = DRAW_INDEXEDTRIANGLEFAN32
}; };
enum FillMode : unsigned int enum FillMode ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
FILL_SOLID, FILL_SOLID,
FILL_WIREFRAME, FILL_WIREFRAME,
...@@ -106,7 +107,7 @@ namespace sw ...@@ -106,7 +107,7 @@ namespace sw
FILL_LAST = FILL_VERTEX FILL_LAST = FILL_VERTEX
}; };
enum ShadingMode : unsigned int enum ShadingMode ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
SHADING_FLAT, SHADING_FLAT,
SHADING_GOURAUD, SHADING_GOURAUD,
...@@ -114,7 +115,7 @@ namespace sw ...@@ -114,7 +115,7 @@ namespace sw
SHADING_LAST = SHADING_GOURAUD SHADING_LAST = SHADING_GOURAUD
}; };
enum DepthCompareMode : unsigned int enum DepthCompareMode ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
DEPTH_ALWAYS, DEPTH_ALWAYS,
DEPTH_NEVER, DEPTH_NEVER,
...@@ -128,7 +129,7 @@ namespace sw ...@@ -128,7 +129,7 @@ namespace sw
DEPTH_LAST = DEPTH_GREATEREQUAL DEPTH_LAST = DEPTH_GREATEREQUAL
}; };
enum StencilCompareMode : unsigned int enum StencilCompareMode ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
STENCIL_ALWAYS, STENCIL_ALWAYS,
STENCIL_NEVER, STENCIL_NEVER,
...@@ -142,7 +143,7 @@ namespace sw ...@@ -142,7 +143,7 @@ namespace sw
STENCIL_LAST = STENCIL_GREATEREQUAL STENCIL_LAST = STENCIL_GREATEREQUAL
}; };
enum StencilOperation : unsigned int enum StencilOperation ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
OPERATION_KEEP, OPERATION_KEEP,
OPERATION_ZERO, OPERATION_ZERO,
...@@ -156,7 +157,7 @@ namespace sw ...@@ -156,7 +157,7 @@ namespace sw
OPERATION_LAST = OPERATION_DECR OPERATION_LAST = OPERATION_DECR
}; };
enum AlphaCompareMode : unsigned int enum AlphaCompareMode ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
ALPHA_ALWAYS, ALPHA_ALWAYS,
ALPHA_NEVER, ALPHA_NEVER,
...@@ -170,7 +171,7 @@ namespace sw ...@@ -170,7 +171,7 @@ namespace sw
ALPHA_LAST = ALPHA_GREATEREQUAL ALPHA_LAST = ALPHA_GREATEREQUAL
}; };
enum CullMode : unsigned int enum CullMode ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
CULL_NONE, CULL_NONE,
CULL_CLOCKWISE, CULL_CLOCKWISE,
...@@ -179,7 +180,7 @@ namespace sw ...@@ -179,7 +180,7 @@ namespace sw
CULL_LAST = CULL_COUNTERCLOCKWISE CULL_LAST = CULL_COUNTERCLOCKWISE
}; };
enum BlendFactor : unsigned int enum BlendFactor ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
BLEND_ZERO, BLEND_ZERO,
BLEND_ONE, BLEND_ONE,
...@@ -200,7 +201,7 @@ namespace sw ...@@ -200,7 +201,7 @@ namespace sw
BLEND_LAST = BLEND_INVCONSTANT BLEND_LAST = BLEND_INVCONSTANT
}; };
enum BlendOperation : unsigned int enum BlendOperation ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
BLENDOP_ADD, BLENDOP_ADD,
BLENDOP_SUB, BLENDOP_SUB,
...@@ -215,7 +216,7 @@ namespace sw ...@@ -215,7 +216,7 @@ namespace sw
BLENDOP_LAST = BLENDOP_NULL BLENDOP_LAST = BLENDOP_NULL
}; };
enum LogicalOperation : unsigned int enum LogicalOperation ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
LOGICALOP_CLEAR, LOGICALOP_CLEAR,
LOGICALOP_SET, LOGICALOP_SET,
...@@ -237,7 +238,7 @@ namespace sw ...@@ -237,7 +238,7 @@ namespace sw
LOGICALOP_LAST = LOGICALOP_OR_INVERTED LOGICALOP_LAST = LOGICALOP_OR_INVERTED
}; };
enum MaterialSource : unsigned int enum MaterialSource ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
MATERIAL_MATERIAL, MATERIAL_MATERIAL,
MATERIAL_COLOR1, MATERIAL_COLOR1,
...@@ -246,7 +247,7 @@ namespace sw ...@@ -246,7 +247,7 @@ namespace sw
MATERIAL_LAST = MATERIAL_COLOR2 MATERIAL_LAST = MATERIAL_COLOR2
}; };
enum FogMode : unsigned int enum FogMode ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
FOG_NONE, FOG_NONE,
FOG_LINEAR, FOG_LINEAR,
...@@ -256,7 +257,7 @@ namespace sw ...@@ -256,7 +257,7 @@ namespace sw
FOG_LAST = FOG_EXP2 FOG_LAST = FOG_EXP2
}; };
enum TexGen : unsigned int enum TexGen ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
TEXGEN_PASSTHRU, TEXGEN_PASSTHRU,
TEXGEN_NORMAL, TEXGEN_NORMAL,
...@@ -268,7 +269,7 @@ namespace sw ...@@ -268,7 +269,7 @@ namespace sw
TEXGEN_LAST = TEXGEN_NONE TEXGEN_LAST = TEXGEN_NONE
}; };
enum TransparencyAntialiasing : unsigned int enum TransparencyAntialiasing ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
TRANSPARENCY_NONE, TRANSPARENCY_NONE,
TRANSPARENCY_ALPHA_TO_COVERAGE, TRANSPARENCY_ALPHA_TO_COVERAGE,
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "Main/Config.hpp" #include "Main/Config.hpp"
#include "Renderer/Surface.hpp" #include "Renderer/Surface.hpp"
#include "Common/Types.hpp"
namespace sw namespace sw
{ {
...@@ -63,7 +64,7 @@ namespace sw ...@@ -63,7 +64,7 @@ namespace sw
SAMPLER_VERTEX SAMPLER_VERTEX
}; };
enum TextureType : unsigned int enum TextureType ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
TEXTURE_NULL, TEXTURE_NULL,
TEXTURE_2D, TEXTURE_2D,
...@@ -74,7 +75,7 @@ namespace sw ...@@ -74,7 +75,7 @@ namespace sw
TEXTURE_LAST = TEXTURE_2D_ARRAY TEXTURE_LAST = TEXTURE_2D_ARRAY
}; };
enum FilterType : unsigned int enum FilterType ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
FILTER_POINT, FILTER_POINT,
FILTER_GATHER, FILTER_GATHER,
...@@ -86,7 +87,7 @@ namespace sw ...@@ -86,7 +87,7 @@ namespace sw
FILTER_LAST = FILTER_ANISOTROPIC FILTER_LAST = FILTER_ANISOTROPIC
}; };
enum MipmapType : unsigned int enum MipmapType ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
MIPMAP_NONE, MIPMAP_NONE,
MIPMAP_POINT, MIPMAP_POINT,
...@@ -95,7 +96,7 @@ namespace sw ...@@ -95,7 +96,7 @@ namespace sw
MIPMAP_LAST = MIPMAP_LINEAR MIPMAP_LAST = MIPMAP_LINEAR
}; };
enum AddressingMode : unsigned int enum AddressingMode ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
ADDRESSING_WRAP, ADDRESSING_WRAP,
ADDRESSING_CLAMP, ADDRESSING_CLAMP,
...@@ -108,7 +109,7 @@ namespace sw ...@@ -108,7 +109,7 @@ namespace sw
ADDRESSING_LAST = ADDRESSING_TEXELFETCH ADDRESSING_LAST = ADDRESSING_TEXELFETCH
}; };
enum SwizzleType : unsigned int enum SwizzleType ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
SWIZZLE_RED, SWIZZLE_RED,
SWIZZLE_GREEN, SWIZZLE_GREEN,
......
...@@ -21,7 +21,7 @@ namespace sw ...@@ -21,7 +21,7 @@ namespace sw
{ {
class Resource; class Resource;
enum StreamType : unsigned int enum StreamType ENUM_UNDERLYING_TYPE_UNSIGNED_INT
{ {
STREAMTYPE_COLOR, // 4 normalized unsigned bytes, ZYXW order STREAMTYPE_COLOR, // 4 normalized unsigned bytes, ZYXW order
STREAMTYPE_UDEC3, // 3 unsigned 10-bit fields STREAMTYPE_UDEC3, // 3 unsigned 10-bit fields
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment