Use static_assert instead of meta macros.
Change-Id: Id1e3a50d56475c495a3cfb82553c5bd4c48a0fc3
Reviewed-on: https://swiftshader-review.googlesource.com/5425
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/Common/MetaMacro.hpp b/src/Common/MetaMacro.hpp
deleted file mode 100644
index f717d75..0000000
--- a/src/Common/MetaMacro.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef sw_MetaMacro_hpp
-#define sw_MetaMacro_hpp
-
-// Disables the "identifier was truncated to '255' characters in the browser information" warning
-#ifdef _MSC_VER
-#pragma warning(disable: 4786)
-#endif
-
-namespace Meta
-{
-#define META_ASSERT(condition) typedef int COMPILE_TIME_ASSERT_##__LINE__[static_cast<bool>(condition) ? 1 : -1]
-
- template<class T>
- struct IsVoid
- {
- enum {res = false};
- };
-
- template<>
- struct IsVoid<void>
- {
- enum {res = true};
- };
-
-#define META_IS_VOID(T) Meta::IsVoid<T>::res
-
- template<bool>
- struct Select
- {
- template<class T0, class T1>
- struct Type
- {
- typedef T1 Res;
- };
- };
-
- template<>
- struct Select<true>
- {
- template<class T0, class T1>
- struct Type
- {
- typedef T0 Res;
- };
- };
-
-#define META_SELECT(i, T0, T1) Meta::Select<i>::template Type<T0, T1>::Res
-
- template<class B0, class B1>
- struct Inherit : B0, B1
- {
- };
-
-#define META_INHERIT(B0, B1) Meta::Inherit<B0, B1>
-
- template<class B0, class B1>
- class Catenate
- {
- typedef typename META_SELECT(META_IS_VOID(B0), B1, B0) T0;
- typedef typename META_SELECT(META_IS_VOID(B0), void, B1) T1;
-
- public:
- typedef typename META_INHERIT(T0, T1) T01;
- typedef typename META_SELECT(META_IS_VOID(T1), T0, T01) Res;
-
- private:
- typedef typename META_SELECT(META_IS_VOID(T1), int, T1) CheckedT1;
-
- META_ASSERT(META_IS_VOID(T1) || sizeof(Res) == sizeof(T0) + sizeof(CheckedT1));
- };
-
-#define META_CATENATE(B0, B1) Meta::Catenate<B0, B1>::Res
-
- template<bool condition, class B0, class B1>
- class ConditionalInherit
- {
- typedef typename META_CATENATE(B0, B1) MetaInherit;
-
- public:
- typedef typename META_SELECT(condition, MetaInherit, B0) Res;
- };
-
-#define META_CONDITIONAL_INHERIT(condition, B0, B1) Meta::ConditionalInherit<condition, B0, B1>::Res
-}
-
-#endif // sw_MetaMacro_hpp
diff --git a/src/D3D9/Capabilities.hpp b/src/D3D9/Capabilities.hpp
index 768ad1d..27bf193 100644
--- a/src/D3D9/Capabilities.hpp
+++ b/src/D3D9/Capabilities.hpp
@@ -16,7 +16,6 @@
#define D3D9_Capabilities_hpp
#include "Config.hpp"
-#include "MetaMacro.hpp"
#include <d3d9.h>
@@ -479,18 +478,18 @@
};
// Shader Model 3.0 requirements
- META_ASSERT(MAX_VERTEX_SHADER_CONST >= 256);
- META_ASSERT(MAX_PIXEL_SHADER_CONST == 224);
- META_ASSERT(MAX_VERTEX_INPUTS == 16);
- META_ASSERT(MAX_VERTEX_OUTPUTS == 12);
- META_ASSERT(MAX_PIXEL_INPUTS == 10);
+ static_assert(MAX_VERTEX_SHADER_CONST >= 256, "");
+ static_assert(MAX_PIXEL_SHADER_CONST == 224, "");
+ static_assert(MAX_VERTEX_INPUTS == 16, "");
+ static_assert(MAX_VERTEX_OUTPUTS == 12, "");
+ static_assert(MAX_PIXEL_INPUTS == 10, "");
// Back-end minimum requirements
- META_ASSERT(sw::VERTEX_UNIFORM_VECTORS >= MAX_VERTEX_SHADER_CONST);
- META_ASSERT(sw::FRAGMENT_UNIFORM_VECTORS >= MAX_PIXEL_SHADER_CONST);
- META_ASSERT(sw::MAX_VERTEX_INPUTS >= MAX_VERTEX_INPUTS);
- META_ASSERT(sw::MAX_VERTEX_OUTPUTS >= MAX_VERTEX_OUTPUTS);
- META_ASSERT(sw::MAX_FRAGMENT_INPUTS >= MAX_PIXEL_INPUTS);
+ static_assert(sw::VERTEX_UNIFORM_VECTORS >= MAX_VERTEX_SHADER_CONST, "");
+ static_assert(sw::FRAGMENT_UNIFORM_VECTORS >= MAX_PIXEL_SHADER_CONST, "");
+ static_assert(sw::MAX_VERTEX_INPUTS >= MAX_VERTEX_INPUTS, "");
+ static_assert(sw::MAX_VERTEX_OUTPUTS >= MAX_VERTEX_OUTPUTS, "");
+ static_assert(sw::MAX_FRAGMENT_INPUTS >= MAX_PIXEL_INPUTS, "");
}
#endif // D3D9_Capabilities_hpp
diff --git a/src/OpenGL/common/debug.h b/src/OpenGL/common/debug.h
index dc8ea98..bbf7521 100644
--- a/src/OpenGL/common/debug.h
+++ b/src/OpenGL/common/debug.h
@@ -90,7 +90,4 @@
#endif // __ANDROID__
-// A macro functioning as a compile-time assert to validate constant conditions
-#define META_ASSERT(condition) typedef int COMPILE_TIME_ASSERT_##__LINE__[static_cast<bool>(condition) ? 1 : -1]
-
#endif // COMMON_DEBUG_H_
diff --git a/src/OpenGL/libEGL/Config.cpp b/src/OpenGL/libEGL/Config.cpp
index 9a5839e..835b198 100644
--- a/src/OpenGL/libEGL/Config.cpp
+++ b/src/OpenGL/libEGL/Config.cpp
@@ -211,10 +211,10 @@
return x.attribute < y.attribute; \
}
- META_ASSERT(EGL_NONE < EGL_SLOW_CONFIG && EGL_SLOW_CONFIG < EGL_NON_CONFORMANT_CONFIG);
+ static_assert(EGL_NONE < EGL_SLOW_CONFIG && EGL_SLOW_CONFIG < EGL_NON_CONFORMANT_CONFIG, "");
SORT_SMALLER(mConfigCaveat);
- META_ASSERT(EGL_RGB_BUFFER < EGL_LUMINANCE_BUFFER);
+ static_assert(EGL_RGB_BUFFER < EGL_LUMINANCE_BUFFER, "");
SORT_SMALLER(mColorBufferType);
SORT_SMALLER(mRedSize);
@@ -300,10 +300,10 @@
return x->attribute < y->attribute; \
}
- META_ASSERT(EGL_NONE < EGL_SLOW_CONFIG && EGL_SLOW_CONFIG < EGL_NON_CONFORMANT_CONFIG);
+ static_assert(EGL_NONE < EGL_SLOW_CONFIG && EGL_SLOW_CONFIG < EGL_NON_CONFORMANT_CONFIG, "");
SORT_SMALLER(mConfigCaveat);
- META_ASSERT(EGL_RGB_BUFFER < EGL_LUMINANCE_BUFFER);
+ static_assert(EGL_RGB_BUFFER < EGL_LUMINANCE_BUFFER, "");
SORT_SMALLER(mColorBufferType);
// By larger total number of color bits, only considering those that are requested to be > 0.
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.cbp b/src/OpenGL/libGLES_CM/libGLES_CM.cbp
index 770fe95..a35b6f8 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.cbp
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.cbp
@@ -152,7 +152,6 @@
<Unit filename="../../Common/Math.hpp" />
<Unit filename="../../Common/Memory.cpp" />
<Unit filename="../../Common/Memory.hpp" />
- <Unit filename="../../Common/MetaMacro.hpp" />
<Unit filename="../../Common/MutexLock.hpp" />
<Unit filename="../../Common/Resource.cpp" />
<Unit filename="../../Common/Resource.hpp" />
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cbp b/src/OpenGL/libGLESv2/libGLESv2.cbp
index 980889b..e4ea4a4 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cbp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cbp
@@ -151,7 +151,6 @@
<Unit filename="../../Common/Math.hpp" />
<Unit filename="../../Common/Memory.cpp" />
<Unit filename="../../Common/Memory.hpp" />
- <Unit filename="../../Common/MetaMacro.hpp" />
<Unit filename="../../Common/MutexLock.hpp" />
<Unit filename="../../Common/Resource.cpp" />
<Unit filename="../../Common/Resource.hpp" />
diff --git a/src/Renderer/PixelProcessor.cpp b/src/Renderer/PixelProcessor.cpp
index d8f1be2..e3154b6 100644
--- a/src/Renderer/PixelProcessor.cpp
+++ b/src/Renderer/PixelProcessor.cpp
@@ -17,7 +17,6 @@
#include "PixelPipeline.hpp"
#include "PixelProgram.hpp"
#include "PixelShader.hpp"
-#include "MetaMacro.hpp"
#include "Surface.hpp"
#include "Primitive.hpp"
#include "Constants.hpp"
diff --git a/src/Renderer/Sampler.cpp b/src/Renderer/Sampler.cpp
index 7518715..1aa4ccc 100644
--- a/src/Renderer/Sampler.cpp
+++ b/src/Renderer/Sampler.cpp
@@ -14,7 +14,6 @@
#include "Sampler.hpp"
-#include "MetaMacro.hpp"
#include "Context.hpp"
#include "Surface.hpp"
#include "CPUID.hpp"
diff --git a/src/Renderer/Vertex.hpp b/src/Renderer/Vertex.hpp
index 78bcf14..9ae8d14 100644
--- a/src/Renderer/Vertex.hpp
+++ b/src/Renderer/Vertex.hpp
@@ -16,7 +16,6 @@
#define Vertex_hpp
#include "Color.hpp"
-#include "Common/MetaMacro.hpp"
#include "Common/Types.hpp"
#include "Main/Config.hpp"
@@ -93,7 +92,7 @@
int padding[3];
});
- META_ASSERT((sizeof(Vertex) & 0x0000000F) == 0);
+ static_assert((sizeof(Vertex) & 0x0000000F) == 0, "Vertex size not a multiple of 16 bytes (alignment requirement)");
}
#endif // Vertex_hpp
diff --git a/src/SwiftShader/SwiftShader.vcxproj b/src/SwiftShader/SwiftShader.vcxproj
index 3285351..c2d7c14 100644
--- a/src/SwiftShader/SwiftShader.vcxproj
+++ b/src/SwiftShader/SwiftShader.vcxproj
@@ -432,7 +432,6 @@
<ClInclude Include="..\Common\Half.hpp" />
<ClInclude Include="..\Common\Math.hpp" />
<ClInclude Include="..\Common\Memory.hpp" />
- <ClInclude Include="..\Common\MetaMacro.hpp" />
<ClInclude Include="..\Common\MutexLock.hpp" />
<ClInclude Include="..\Common\Resource.hpp" />
<ClInclude Include="..\Common\Timer.hpp" />
diff --git a/src/SwiftShader/SwiftShader.vcxproj.filters b/src/SwiftShader/SwiftShader.vcxproj.filters
index e4976e0..b7618d0 100644
--- a/src/SwiftShader/SwiftShader.vcxproj.filters
+++ b/src/SwiftShader/SwiftShader.vcxproj.filters
@@ -304,9 +304,6 @@
<ClInclude Include="..\Common\Memory.hpp">
<Filter>Header Files\Common</Filter>
</ClInclude>
- <ClInclude Include="..\Common\MetaMacro.hpp">
- <Filter>Header Files\Common</Filter>
- </ClInclude>
<ClInclude Include="..\Common\MutexLock.hpp">
<Filter>Header Files\Common</Filter>
</ClInclude>