Do not use dynamic_cast if RTTI is disabled.
Review URL: https://codereview.appspot.com/7250043

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1808 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/common/debug.h b/src/common/debug.h
index 5f8f60f..23ee26d 100644
--- a/src/common/debug.h
+++ b/src/common/debug.h
@@ -99,6 +99,13 @@
     #define UNREACHABLE() ERR("\t! Unreachable reached: %s(%d)\n", __FUNCTION__, __LINE__)
 #endif
 
+// A macro that determines whether an object has a given runtime type.
+#if !defined(NDEBUG) && (!defined(_MSC_VER) || defined(_CPPRTTI))
+#define HAS_DYNAMIC_TYPE(type, obj) (dynamic_cast<type >(obj) != NULL)
+#else
+#define HAS_DYNAMIC_TYPE(type, obj) true
+#endif
+
 // 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]
 
diff --git a/src/common/version.h b/src/common/version.h
index ab5fec6..182bb34 100644
--- a/src/common/version.h
+++ b/src/common/version.h
@@ -1,7 +1,7 @@
 #define MAJOR_VERSION 1
 #define MINOR_VERSION 1
 #define BUILD_VERSION 0
-#define BUILD_REVISION 1801
+#define BUILD_REVISION 1808
 
 #define STRINGIFY(x) #x
 #define MACRO_STRINGIFY(x) STRINGIFY(x)
diff --git a/src/libGLESv2/renderer/Image11.cpp b/src/libGLESv2/renderer/Image11.cpp
index a8a703b..677b875 100644
--- a/src/libGLESv2/renderer/Image11.cpp
+++ b/src/libGLESv2/renderer/Image11.cpp
@@ -37,7 +37,7 @@
 
 Image11 *Image11::makeImage11(Image *img)
 {
-    ASSERT(dynamic_cast<rx::Image11*>(img) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(rx::Image11*, img));
     return static_cast<rx::Image11*>(img);
 }
 
diff --git a/src/libGLESv2/renderer/Image9.cpp b/src/libGLESv2/renderer/Image9.cpp
index 10ae6f2..453b8fc 100644
--- a/src/libGLESv2/renderer/Image9.cpp
+++ b/src/libGLESv2/renderer/Image9.cpp
@@ -98,7 +98,7 @@
 
 Image9 *Image9::makeImage9(Image *img)
 {
-    ASSERT(dynamic_cast<rx::Image9*>(img) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(rx::Image9*, img));
     return static_cast<rx::Image9*>(img);
 }
 
diff --git a/src/libGLESv2/renderer/IndexBuffer11.cpp b/src/libGLESv2/renderer/IndexBuffer11.cpp
index 48c0c64..5936b13 100644
--- a/src/libGLESv2/renderer/IndexBuffer11.cpp
+++ b/src/libGLESv2/renderer/IndexBuffer11.cpp
@@ -65,7 +65,7 @@
 
 IndexBuffer11 *IndexBuffer11::makeIndexBuffer11(IndexBuffer *indexBuffer)
 {
-    ASSERT(dynamic_cast<IndexBuffer11*>(indexBuffer) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(IndexBuffer11*, indexBuffer));
     return static_cast<IndexBuffer11*>(indexBuffer);
 }
 
diff --git a/src/libGLESv2/renderer/IndexBuffer9.cpp b/src/libGLESv2/renderer/IndexBuffer9.cpp
index a0ab216..0472a13 100644
--- a/src/libGLESv2/renderer/IndexBuffer9.cpp
+++ b/src/libGLESv2/renderer/IndexBuffer9.cpp
@@ -86,7 +86,7 @@
 
 IndexBuffer9 *IndexBuffer9::makeIndexBuffer9(IndexBuffer *indexBuffer)
 {
-    ASSERT(dynamic_cast<IndexBuffer9*>(indexBuffer) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(IndexBuffer9*, indexBuffer));
     return static_cast<IndexBuffer9*>(indexBuffer);
 }
 
diff --git a/src/libGLESv2/renderer/RenderTarget11.cpp b/src/libGLESv2/renderer/RenderTarget11.cpp
index 98cc78d..5f16b79 100644
--- a/src/libGLESv2/renderer/RenderTarget11.cpp
+++ b/src/libGLESv2/renderer/RenderTarget11.cpp
@@ -349,7 +349,7 @@
 
 RenderTarget11 *RenderTarget11::makeRenderTarget11(RenderTarget *target)
 {
-    ASSERT(dynamic_cast<rx::RenderTarget11*>(target) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(rx::RenderTarget11*, target));
     return static_cast<rx::RenderTarget11*>(target);
 }
 
diff --git a/src/libGLESv2/renderer/RenderTarget9.cpp b/src/libGLESv2/renderer/RenderTarget9.cpp
index f112f63..ff83c45 100644
--- a/src/libGLESv2/renderer/RenderTarget9.cpp
+++ b/src/libGLESv2/renderer/RenderTarget9.cpp
@@ -94,7 +94,7 @@
 
 RenderTarget9 *RenderTarget9::makeRenderTarget9(RenderTarget *target)
 {
-    ASSERT(dynamic_cast<rx::RenderTarget9*>(target) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(rx::RenderTarget9*, target));
     return static_cast<rx::RenderTarget9*>(target);
 }
 
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index 7779a76..bc2dab8 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -142,7 +142,7 @@
 
 Renderer11 *Renderer11::makeRenderer11(Renderer *renderer)
 {
-    ASSERT(dynamic_cast<rx::Renderer11*>(renderer) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(rx::Renderer11*, renderer));
     return static_cast<rx::Renderer11*>(renderer);
 }
 
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index e05d875..be10afd 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -164,7 +164,7 @@
 
 Renderer9 *Renderer9::makeRenderer9(Renderer *renderer)
 {
-    ASSERT(dynamic_cast<rx::Renderer9*>(renderer) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(rx::Renderer9*, renderer));
     return static_cast<rx::Renderer9*>(renderer);
 }
 
diff --git a/src/libGLESv2/renderer/ShaderExecutable11.cpp b/src/libGLESv2/renderer/ShaderExecutable11.cpp
index 4a944fe..971843e 100644
--- a/src/libGLESv2/renderer/ShaderExecutable11.cpp
+++ b/src/libGLESv2/renderer/ShaderExecutable11.cpp
@@ -67,7 +67,7 @@
 
 ShaderExecutable11 *ShaderExecutable11::makeShaderExecutable11(ShaderExecutable *executable)
 {
-    ASSERT(dynamic_cast<ShaderExecutable11*>(executable) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(ShaderExecutable11*, executable));
     return static_cast<ShaderExecutable11*>(executable);
 }
 
diff --git a/src/libGLESv2/renderer/ShaderExecutable9.cpp b/src/libGLESv2/renderer/ShaderExecutable9.cpp
index a9a079f..5efac3f 100644
--- a/src/libGLESv2/renderer/ShaderExecutable9.cpp
+++ b/src/libGLESv2/renderer/ShaderExecutable9.cpp
@@ -42,7 +42,7 @@
 
 ShaderExecutable9 *ShaderExecutable9::makeShaderExecutable9(ShaderExecutable *executable)
 {
-    ASSERT(dynamic_cast<ShaderExecutable9*>(executable) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(ShaderExecutable9*, executable));
     return static_cast<ShaderExecutable9*>(executable);
 }
 
diff --git a/src/libGLESv2/renderer/SwapChain11.cpp b/src/libGLESv2/renderer/SwapChain11.cpp
index 98e251d..61832c3 100644
--- a/src/libGLESv2/renderer/SwapChain11.cpp
+++ b/src/libGLESv2/renderer/SwapChain11.cpp
@@ -592,7 +592,7 @@
 
 SwapChain11 *SwapChain11::makeSwapChain11(SwapChain *swapChain)
 {
-    ASSERT(dynamic_cast<rx::SwapChain11*>(swapChain) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(rx::SwapChain11*, swapChain));
     return static_cast<rx::SwapChain11*>(swapChain);
 }
 
diff --git a/src/libGLESv2/renderer/SwapChain9.cpp b/src/libGLESv2/renderer/SwapChain9.cpp
index d2ac019..dc458c7 100644
--- a/src/libGLESv2/renderer/SwapChain9.cpp
+++ b/src/libGLESv2/renderer/SwapChain9.cpp
@@ -392,7 +392,7 @@
 
 SwapChain9 *SwapChain9::makeSwapChain9(SwapChain *swapChain)
 {
-    ASSERT(dynamic_cast<rx::SwapChain9*>(swapChain) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(rx::SwapChain9*, swapChain));
     return static_cast<rx::SwapChain9*>(swapChain);
 }
 
diff --git a/src/libGLESv2/renderer/TextureStorage11.cpp b/src/libGLESv2/renderer/TextureStorage11.cpp
index 3ca5d63..a3a3ebf 100644
--- a/src/libGLESv2/renderer/TextureStorage11.cpp
+++ b/src/libGLESv2/renderer/TextureStorage11.cpp
@@ -33,7 +33,7 @@
 
 TextureStorage11 *TextureStorage11::makeTextureStorage11(TextureStorage *storage)
 {
-    ASSERT(dynamic_cast<TextureStorage11*>(storage) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(TextureStorage11*, storage));
     return static_cast<TextureStorage11*>(storage);
 }
 
@@ -275,7 +275,7 @@
 
 TextureStorage11_2D *TextureStorage11_2D::makeTextureStorage11_2D(TextureStorage *storage)
 {
-    ASSERT(dynamic_cast<TextureStorage11_2D*>(storage) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(TextureStorage11_2D*, storage));
     return static_cast<TextureStorage11_2D*>(storage);
 }
 
@@ -453,7 +453,7 @@
 
 TextureStorage11_Cube *TextureStorage11_Cube::makeTextureStorage11_Cube(TextureStorage *storage)
 {
-    ASSERT(dynamic_cast<TextureStorage11_Cube*>(storage) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(TextureStorage11_Cube*, storage));
     return static_cast<TextureStorage11_Cube*>(storage);
 }
 
diff --git a/src/libGLESv2/renderer/TextureStorage9.cpp b/src/libGLESv2/renderer/TextureStorage9.cpp
index 1ba83a1..6b9bd07 100644
--- a/src/libGLESv2/renderer/TextureStorage9.cpp
+++ b/src/libGLESv2/renderer/TextureStorage9.cpp
@@ -33,7 +33,7 @@
 
 TextureStorage9 *TextureStorage9::makeTextureStorage9(TextureStorage *storage)
 {
-    ASSERT(dynamic_cast<TextureStorage9*>(storage) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(TextureStorage9*, storage));
     return static_cast<TextureStorage9*>(storage);
 }
 
@@ -153,7 +153,7 @@
 
 TextureStorage9_2D *TextureStorage9_2D::makeTextureStorage9_2D(TextureStorage *storage)
 {
-    ASSERT(dynamic_cast<TextureStorage9_2D*>(storage) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(TextureStorage9_2D*, storage));
     return static_cast<TextureStorage9_2D*>(storage);
 }
 
@@ -258,7 +258,7 @@
 
 TextureStorage9_Cube *TextureStorage9_Cube::makeTextureStorage9_Cube(TextureStorage *storage)
 {
-    ASSERT(dynamic_cast<TextureStorage9_Cube*>(storage) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(TextureStorage9_Cube*, storage));
     return static_cast<TextureStorage9_Cube*>(storage);
 }
 
diff --git a/src/libGLESv2/renderer/VertexBuffer11.cpp b/src/libGLESv2/renderer/VertexBuffer11.cpp
index 6f118bb..169f295 100644
--- a/src/libGLESv2/renderer/VertexBuffer11.cpp
+++ b/src/libGLESv2/renderer/VertexBuffer11.cpp
@@ -65,7 +65,7 @@
 
 VertexBuffer11 *VertexBuffer11::makeVertexBuffer11(VertexBuffer *vetexBuffer)
 {
-    ASSERT(dynamic_cast<VertexBuffer11*>(vetexBuffer) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(VertexBuffer11*, vetexBuffer));
     return static_cast<VertexBuffer11*>(vetexBuffer);
 }
 
diff --git a/src/libGLESv2/renderer/VertexBuffer9.cpp b/src/libGLESv2/renderer/VertexBuffer9.cpp
index 6aae461..00caeee 100644
--- a/src/libGLESv2/renderer/VertexBuffer9.cpp
+++ b/src/libGLESv2/renderer/VertexBuffer9.cpp
@@ -75,7 +75,7 @@
 
 VertexBuffer9 *VertexBuffer9::makeVertexBuffer9(VertexBuffer *vertexBuffer)
 {
-    ASSERT(dynamic_cast<VertexBuffer9*>(vertexBuffer) != NULL);
+    ASSERT(HAS_DYNAMIC_TYPE(VertexBuffer9*, vertexBuffer));
     return static_cast<VertexBuffer9*>(vertexBuffer);
 }