Selaa lähdekoodia

Merge pull request #47 from godlikepanos/msvc

Fix MSVC build and add CI for Windows builds. Fixes issue #46
Panagiotis Christopoulos Charitos 6 vuotta sitten
vanhempi
sitoutus
aae223488f

+ 0 - 51
.appveyor.yml

@@ -1,51 +0,0 @@
-version: '{build}'
-
-branches:
-  only: 
-  - master
-
-cache:
-  - x86_64-6.3.0-release-posix-seh-rt_v5-rev1.7z
-
-environment:
-  MINGW_DIR: mingw64
-  
-  matrix:
-    - BUILD_TYPE: Release
-      ASSERTIONS: OFF
-      TOOLS: ON
-      MINGW_URL: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/6.3.0/threads-posix/seh/x86_64-6.3.0-release-posix-seh-rt_v5-rev1.7z/download
-      MINGW_ARCHIVE: x86_64-6.3.0-release-posix-seh-rt_v5-rev1.7z
-    - BUILD_TYPE: Debug
-      ASSERTIONS: ON
-      TOOLS: OFF
-      MINGW_URL: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/6.3.0/threads-posix/seh/x86_64-6.3.0-release-posix-seh-rt_v5-rev1.7z/download
-      MINGW_ARCHIVE: x86_64-6.3.0-release-posix-seh-rt_v5-rev1.7z
-
-install:
-  - git submodule update --init --recursive
-  - if not exist "%MINGW_ARCHIVE%" appveyor DownloadFile "%MINGW_URL%" -FileName "%MINGW_ARCHIVE%"
-  - 7z x -y "%MINGW_ARCHIVE%" > nul
-  - python -m ensurepip
-  - python -m pip install cpp-coveralls==0.3.11
-  # CMake refuses to generate MinGW Makefiles if sh.exe is in the Path
-  - ps: Get-Command sh.exe -All | Remove-Item
-
-before_build:
-  - set Path=%CD%\%MINGW_DIR%\bin;%Path%
-  - g++ --version
-  - mingw32-make --version
-  - cmake --version
-  - mkdir build
-  - cd build
-  - cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DANKI_EXTRA_CHECKS=%ASSERTIONS% -DANKI_BUILD_TESTS=ON -DANKI_BUILD_SAMPLES=ON -DANKI_BUILD_TOOLS=%TOOLS%
-
-build_script:
-  - mingw32-make -j 2
-
-notifications:
-  - provider: Email
-    to:
-      - '{{commitAuthorEmail}}'
-    on_build_failure: true
-

+ 36 - 26
.travis.yml

@@ -1,15 +1,8 @@
-# Linux build configuration for Travis
+language:
+  - cpp
+  - python
 
-language: cpp
-sudo: false
-dist: trusty
-os: linux
-
-env:
-  - BUILD_TYPE=Debug EXTRA_CHECKS=ON TRACE=ON CXX_=g++-6 CC_=gcc-6 GR_BACKEND=VULKAN
-  - BUILD_TYPE=Release EXTRA_CHECKS=OFF TRACE=OFF CXX_=g++-6 CC_=gcc-6 GR_BACKEND=VULKAN
-  - BUILD_TYPE=Debug EXTRA_CHECKS=ON TRACE=ON CXX_=clang++-4.0 CC_=clang-4.0 GR_BACKEND=VULKAN
-  - BUILD_TYPE=Release EXTRA_CHECKS=OFF TRACE=OFF CXX_=clang++-4.0 CC_=clang-4.0 GR_BACKEND=VULKAN
+python: 3.7
 
 cache:
   apt: true
@@ -17,8 +10,6 @@ cache:
 addons:
   apt:
     sources:
-      - llvm-toolchain-trusty-4.0
-      - sourceline: 'ppa:ubuntu-toolchain-r/test'
       - sourceline: 'ppa:graphics-drivers/ppa'
     packages:
       - cmake
@@ -27,19 +18,38 @@ addons:
       - libvulkan-dev
       - libegl1-mesa-dev
 
+matrix:
+  include:
+    - os: windows
+      before_install:
+        - choco install python3
+        - export PATH="/c/Python37:/c/Python37/Scripts:$PATH"
+        - wget http://anki3d.org/VulkanSDKLib.zip
+        - unzip VulkanSDKLib.zip -d vulkansdk
+        - export VULKAN_SDK=$TRAVIS_BUILD_DIR/vulkansdk
+      env:
+        - GENERATOR="Visual Studio 15 2017 Win64" BUILD_TYPE=Debug EXTRA_CHECKS=ON TRACE=ON TOOLS=OFF TESTS=OFF
+        - GENERATOR="Visual Studio 15 2017 Win64" BUILD_TYPE=Release EXTRA_CHECKS=OFF TRACE=OFF TOOLS=OFF TESTS=OFF
+    - os: linux
+      dist: xenial
+      compiler: gcc
+      env:
+        - GENERATOR="Unix Makefiles" BUILD_TYPE=Debug EXTRA_CHECKS=ON TRACE=ON TOOLS=ON TESTS=ON
+        - GENERATOR="Unix Makefiles" BUILD_TYPE=Release EXTRA_CHECKS=OFF TRACE=OFF TOOLS=ON TESTS=ON
+    - os: linux
+      dist: xenial
+      compiler: clang
+      env:
+        - GENERATOR="Unix Makefiles" BUILD_TYPE=Debug EXTRA_CHECKS=ON TRACE=ON TOOLS=ON TESTS=ON
+        - GENERATOR="Unix Makefiles" BUILD_TYPE=Release EXTRA_CHECKS=OFF TRACE=OFF TOOLS=ON TESTS=ON
+
 script:
-  - mkdir build 
-  - cd build
-  - export CC=${CC_}
-  - export CXX=${CXX_}
+  - if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then PYTHON3=$(which python); fi
+  - if [[ "$TRAVIS_OS_NAME" != "windows" ]]; then PYTHON3=$(which python3); fi
   - $CC --version
   - $CXX --version
-  - cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DANKI_EXTRA_CHECKS=${EXTRA_CHECKS} -DANKI_BUILD_TOOLS=ON -DANKI_BUILD_TESTS=ON -DANKI_TRACE=${TRACE} -DANKI_GR_BACKEND=${GR_BACKEND}
-  - make -j 2
-
-branches:
-  only:
-    - master
-
-notifications:
-  email: false
+  - echo "VULKAN_SDK ENV" $VULKAN_SDK
+  - mkdir build
+  - cd build
+  - cmake .. -G "${GENERATOR}" -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DANKI_EXTRA_CHECKS=${EXTRA_CHECKS} -DANKI_BUILD_TOOLS=${TOOLS} -DANKI_BUILD_TESTS=${TESTS} -DANKI_TRACE=${TRACE} -DPYTHON_EXECUTABLE:FILEPATH="${PYTHON3}"
+  - cmake --build .

+ 15 - 35
CMakeLists.txt

@@ -1,4 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.0)
 
 PROJECT(anki)
 
@@ -135,10 +135,6 @@ endif()
 # Compiler & linker flags                                                      #
 ################################################################################
 
-set(CXX_FLAGS "")
-set(COMPILER_FLAGS "")
-set(LINKER_FLAGS "")
-
 if(NOT MSVC)
 	if(ARCH_64)
 		add_definitions(-D_POSIX_VER_64)
@@ -160,61 +156,45 @@ add_definitions(-DIMGUI_USER_CONFIG=<anki/ui/ImGuiConfig.h>)
 
 if(NOT MSVC)
 	# When building AnKi define this special flag
-	set(COMPILER_FLAGS "${COMPILER_FLAGS} -fPIC ")
-
-	if(NOT ANKI_CPU_ADDR_SPACE STREQUAL "0")
-		set(LINKER_FLAGS "${LINKER_FLAGS} -m${ANKI_CPU_ADDR_SPACE} ")
-		set(COMPILER_FLAGS "${COMPILER_FLAGS} -m${ANKI_CPU_ADDR_SPACE} ")
-	endif()
+	add_definitions("-fPIC")
 
-	set(COMPILER_FLAGS "${COMPILER_FLAGS} -fno-exceptions ")
+	add_definitions("-fno-exceptions")
 
 	if(GCC AND NOT CLANG)
-		set(CXX_FLAGS "${CXX_FLAGS} -static-libstdc++ ")
+		add_definitions("-static-libstdc++")
 	endif()
 
 	if(LINUX OR MACOS OR WINDOWS)
-		set(COMPILER_FLAGS "${COMPILER_FLAGS} -msse4 ")
+		add_definitions("-msse4")
 	else()
-		set(COMPILER_FLAGS "${COMPILER_FLAGS} -mfpu=neon ")
+		add_definitions("-mfpu=neon")
 	endif()
 
 	if(ANKI_LTO)
-		set(COMPILER_FLAGS "${COMPILER_FLAGS} -flto ")
+		add_definitions("-flto ")
 		set(LINKER_FLAGS "${LINKER_FLAGS} -flto ")
 	endif()
 
 	if(ANKI_STRIP)
 		set(LINKER_FLAGS "${LINKER_FLAGS} -s ")
-		set(COMPILER_FLAGS "${COMPILER_FLAGS} -s ")
+		add_definitions("-s")
 	endif()
 
 	if(ANKI_ADDRESS_SANITIZER)
-		set(COMPILER_FLAGS "${COMPILER_FLAGS} -fsanitize=address ")
+		add_definitions("-fsanitize=address ")
 	endif()
 
 	if(${CMAKE_BUILD_TYPE} STREQUAL "Release")
-		set(COMPILER_FLAGS "${COMPILER_FLAGS} -O3 -DNDEBUG ")
-
-		set(CMAKE_CXX_FLAGS_RELEASE "")
-		set(CMAKE_C_FLAGS_RELEASE "")
+		add_definitions("-O3 -DNDEBUG")
 	elseif(${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
-		set(COMPILER_FLAGS "${COMPILER_FLAGS} -O3 -g3 ")
-
-		set(CMAKE_CXX_FLAGS_RELWITHDBGINFO "")
-		set(CMAKE_C_FLAGS_RELWITHDBGINFO "")
+		add_definitions("-O3 -g3")
 	elseif(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
-		set(COMPILER_FLAGS "${COMPILER_FLAGS} -O0 -g3 ")
-
-		set(CMAKE_CXX_FLAGS_DEBUG "")
-		set(CMAKE_C_FLAGS_DEBUG "")
+		add_definitions("-O0 -g3")
 	else()
 		message(FATAL_ERROR "Wrong CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
 	endif()
 
 	# Set the flags to cmake now
-	set(CMAKE_CXX_FLAGS "${CXX_FLAGS} ${COMPILER_FLAGS}")
-	set(CMAKE_C_FLAGS "${COMPILER_FLAGS}")
 	set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}")
 endif()
 
@@ -379,9 +359,9 @@ endif()
 
 # AnKi compiler flags (Mainly warnings)
 if(NOT MSVC)
-	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -W -Wextra -Wstrict-aliasing -Wwrite-strings -Wunused -Wunused-variable -Wno-unused-parameter -Wundef -Wno-ignored-attributes -Wno-implicit-fallthrough -Wunused-result -std=c++14")
+	add_definitions("-pedantic -Wall -W -Wextra -Wstrict-aliasing -Wwrite-strings -Wunused -Wunused-variable -Wno-unused-parameter -Wundef -Wno-ignored-attributes -Wno-implicit-fallthrough -Wunused-result -std=c++14")
 else()
-	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4996 /wd4244 /wd4262 /wd4267")
+	add_definitions("/wd4996 /wd4244 /wd4262 /wd4267")
 endif()
 
 # Set platform specific
@@ -413,7 +393,7 @@ elseif(WINDOWS)
 			message(FATAL_ERROR "You need to have VULKAN SDK installed and the VULKAN_SDK env variable set")
 		endif()
 
-		link_directories($ENV{VULKAN_SDK}/Bin)
+		link_directories($ENV{VULKAN_SDK}/Lib)
 		set(THIRD_PARTY_LIBS vulkan-1)
 	endif()
 

+ 19 - 15
README.md

@@ -15,10 +15,8 @@ See `LICENSE` file for more info.
 2 Building AnKi
 ===============
 
-| OS      | Master Branch Build Status                                                                                                                                    |
-| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Linux   | [![Build Status Linux](https://travis-ci.org/godlikepanos/anki-3d-engine.svg?branch=master)](https://travis-ci.org/godlikepanos/anki-3d-engine)               |
-| Windows | [![Build status Windows](https://ci.appveyor.com/api/projects/status/waij29m7o8ajjoqh?svg=true)](https://ci.appveyor.com/project/godlikepanos/anki-3d-engine) |
+Build Status, Linux and Windows
+[![Build Status](https://travis-ci.org/godlikepanos/anki-3d-engine.svg?branch=master)](https://travis-ci.org/godlikepanos/anki-3d-engine)
 
 To checkout the source including the submodules type:
 
@@ -32,8 +30,8 @@ external dependencies are almost none.
 
 Prerequisites:
 
-- Cmake 2.8 and up
-- GCC 5.0 and up or Clang 3.7 and up
+- Cmake 3.0 and up
+- GCC 5.0 and up or Clang 6.0 and up
 - libx11-dev installed
 - libxrandr-dev installed
 - libx11-xcb-dev installed
@@ -59,22 +57,28 @@ This will open an interface with all the available options.
 
 Prerequisites:
 
-- CMake 2.8 and up
-	- Make sure you add cmake.exe to your PATH environment variable (The installer asks, press yes)
-- MinGW-w64 5.0 and up
-	- MinGW has many variants. You need the POSIX version plus SEH (eg x86_64-posix-seh)
-	- Install to a path without spaces (eg C:/mingw-w64)
-	- Append the path where mingw's binaries are located (eg C:/mingw-w64/bin) to the PATH environment variable
+- Cmake 3.0 and up
+- VulkanSDK version 1.1.x and up
+	- Add an environment variable named `VULKAN_SDK` that points to the installation path of VulkanSDK
+- Python 3.0 and up
+	- Make sure that the python executable's location is in `PATH` environment variable
+- Microsoft Visual Studio 2017 and up
 
 To build the release version open `PowerShell` and type:
 
 	$cd path/to/anki
 	$mkdir build
 	$cd build
-	$cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
-	$mingw32-make
+	$cmake .. -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release
+	$cmake --build .
+
+Alternatively, recent Visual Studio versions support building CMake projects from inside the IDE:
+
+- Open Visual Studio
+- Choose the "open folder" option and navigate to AnKi's checkout
+- Visual Studio will automatically understand that AnKi is a CMake project and it will populate the CMake cache
+- Press "build all"
 
-> NOTE: If you have a better way to build on Windows please let us know.
 
 3 Next steps
 ============

+ 3 - 3
shaders/glsl_cpp_common/ClusteredShading.h

@@ -13,10 +13,10 @@ ANKI_BEGIN_NAMESPACE
 
 // Consts
 const U32 TYPED_OBJECT_COUNT = 5u;
-const F32 INVALID_TEXTURE_INDEX = -1.0;
-const F32 LIGHT_FRUSTUM_NEAR_PLANE = 0.1 / 4.0; // The near plane on the shadow map frustums.
+const F32 INVALID_TEXTURE_INDEX = -1.0f;
+const F32 LIGHT_FRUSTUM_NEAR_PLANE = 0.1f / 4.0f; // The near plane on the shadow map frustums.
 const U32 MAX_SHADOW_CASCADES = 4u;
-const F32 SUBSURFACE_MIN = 0.05;
+const F32 SUBSURFACE_MIN = 0.05f;
 
 // See the documentation in the ClustererBin class.
 struct ClustererMagicValues

+ 1 - 0
src/anki/Config.h.cmake

@@ -181,6 +181,7 @@
 #ifdef _MSC_VER
 #	include <intrin.h>
 #	define __builtin_popcount __popcnt
+#	define __builtin_clzll(x) ((int)__lzcnt64(x))
 #endif
 
 #ifdef ANKI_BUILD

+ 4 - 4
src/anki/math/Mat.h

@@ -43,7 +43,7 @@ public:
 	}
 
 	/// Copy.
-	TMat(ANKI_ENABLE_TYPE(const TMat&, !HAS_SIMD) b)
+	TMat(ANKI_ENABLE_ARG(const TMat&, !HAS_SIMD) b)
 	{
 		for(U i = 0; i < N; i++)
 		{
@@ -52,7 +52,7 @@ public:
 	}
 
 	/// Copy.
-	TMat(ANKI_ENABLE_TYPE(const TMat&, HAS_SIMD) b)
+	TMat(ANKI_ENABLE_ARG(const TMat&, HAS_SIMD) b)
 	{
 		for(U i = 0; i < J; i++)
 		{
@@ -379,7 +379,7 @@ public:
 	/// @{
 
 	/// Copy.
-	TMat& operator=(ANKI_ENABLE_TYPE(const TMat&, !HAS_SIMD) b)
+	TMat& operator=(ANKI_ENABLE_ARG(const TMat&, !HAS_SIMD) b)
 	{
 		for(U n = 0; n < N; n++)
 		{
@@ -389,7 +389,7 @@ public:
 	}
 
 	/// Copy.
-	TMat& operator=(ANKI_ENABLE_TYPE(const TMat&, HAS_SIMD) b)
+	TMat& operator=(ANKI_ENABLE_ARG(const TMat&, HAS_SIMD) b)
 	{
 		for(U i = 0; i < J; i++)
 		{

+ 4 - 4
src/anki/math/Vec.h

@@ -33,7 +33,7 @@ public:
 	}
 
 	// Copy
-	TVec(ANKI_ENABLE_TYPE(const TVec&, !HAS_VEC4_SIMD) b)
+	TVec(ANKI_ENABLE_ARG(const TVec&, !HAS_VEC4_SIMD) b)
 	{
 		for(U i = 0; i < N; i++)
 		{
@@ -42,7 +42,7 @@ public:
 	}
 
 	// Copy
-	TVec(ANKI_ENABLE_TYPE(const TVec&, HAS_VEC4_SIMD) b)
+	TVec(ANKI_ENABLE_ARG(const TVec&, HAS_VEC4_SIMD) b)
 	{
 		m_simd = b.m_simd;
 	}
@@ -2297,7 +2297,7 @@ public:
 	/// @{
 
 	// Copy
-	TVec& operator=(ANKI_ENABLE_TYPE(const TVec&, !HAS_VEC4_SIMD) b)
+	TVec& operator=(ANKI_ENABLE_ARG(const TVec&, !HAS_VEC4_SIMD) b)
 	{
 		for(U i = 0; i < N; i++)
 		{
@@ -2307,7 +2307,7 @@ public:
 	}
 
 	// Copy
-	TVec& operator=(ANKI_ENABLE_TYPE(const TVec&, HAS_VEC4_SIMD) b)
+	TVec& operator=(ANKI_ENABLE_ARG(const TVec&, HAS_VEC4_SIMD) b)
 	{
 		m_simd = b.m_simd;
 		return *this;

+ 1 - 1
src/anki/renderer/TileAllocator.cpp

@@ -16,7 +16,7 @@ public:
 	U64 m_lightUuid = 0;
 	U32 m_lightDrawcallCount = 0;
 	Array<U16, 4> m_viewport = {};
-	Array<U16, 4> m_subTiles = {MAX_U16, MAX_U16, MAX_U16, MAX_U16};
+	Array<U16, 4> m_subTiles = {{MAX_U16, MAX_U16, MAX_U16, MAX_U16}};
 	U16 m_superTile = MAX_U16;
 	U8 m_lightLod = 0;
 	U8 m_lightFace = 0;

+ 2 - 1
src/anki/scene/Visibility.cpp

@@ -185,7 +185,8 @@ void GatherVisiblesFromOctreeTask::gather(ThreadHive& hive)
 	flush(hive);
 
 	// Fire an additional dummy task to decrease the semaphore to zero
-	ThreadHiveTask task = ANKI_THREAD_HIVE_TASK({}, this, nullptr, m_frcCtx->m_visTestsSignalSem);
+	GatherVisiblesFromOctreeTask* pself = this; // MSVC workaround
+	ThreadHiveTask task = ANKI_THREAD_HIVE_TASK({}, pself, nullptr, m_frcCtx->m_visTestsSignalSem);
 	hive.submitTasks(&task, 1);
 }
 

+ 6 - 2
src/anki/scene/components/LightComponent.h

@@ -5,9 +5,9 @@
 
 #pragma once
 
-#include <anki/scene/components/SceneComponent.h>
-#include <anki/renderer/RenderQueue.h>
 #include <anki/Math.h>
+#include <anki/renderer/RenderQueue.h>
+#include <anki/scene/components/SceneComponent.h>
 
 namespace anki
 {
@@ -31,6 +31,10 @@ public:
 
 	LightComponent(LightComponentType type, U64 uuid);
 
+	~LightComponent()
+	{
+	}
+
 	LightComponentType getLightComponentType() const
 	{
 		return m_type;

+ 46 - 13
src/anki/util/Functions.h

@@ -248,6 +248,48 @@ inline void splitThreadedProblem(
 /// Make a preprocessor token a string.
 #define ANKI_STRINGIZE(a) _ANKI_STRINGIZE(a)
 
+// ANKI_ENABLE_METHOD & ANKI_ENABLE_ARG trickery copied from Tick library
+template<bool B>
+struct RequiresBool
+{
+	static constexpr bool VALUE = B;
+};
+
+template<typename T, int N>
+struct RequiresUnwrap : T
+{
+};
+
+template<int N>
+struct PrivateEnum
+{
+	enum class Type
+	{
+		NA
+	};
+};
+
+template<typename T, int N>
+struct DummyType
+{
+};
+
+#if defined(_MSC_VER)
+#	define ANKI_REQUIRES_BOOL(line, ...) RequiresUnwrap<decltype(RequiresBool<(__VA_ARGS__)>{}), line>::VALUE
+
+#	define ANKI_ENABLE_METHOD_INTERNAL(line, ...) \
+		typename PrivateEnum<line>::Type ANKI_CONCATENATE( \
+			TickPrivateEnum, line) = PrivateEnum<line>::Type::NA, \
+							 bool ANKI_CONCATENATE(privateBool, line) = true, \
+							 typename = typename std::enable_if_t<( \
+								 ANKI_CONCATENATE(privateBool, line) && ANKI_REQUIRES_BOOL(line, __VA_ARGS__))>
+#else
+
+#	define ANKI_ENABLE_METHOD_INTERNAL(line, ...) \
+		bool privateBool##line = true, typename std::enable_if_t<(privateBool##line && __VA_ARGS__), int> = 0
+
+#endif
+
 /// Use it to enable a method based on a constant expression.
 /// @code
 /// template<int N> class Foo {
@@ -255,24 +297,15 @@ inline void splitThreadedProblem(
 /// 	void foo() {}
 ///	};
 /// @endcode
-#define ANKI_ENABLE_METHOD(expression) \
-	template<bool dependOn = true, \
-		typename std::enable_if< \
-			(std::is_same<typename std::conditional<(expression) && dependOn, int, double>::type, int>::value), \
-			int>::type = 0>
-
-template<typename T, int LINE>
-struct DummyType
-{
-};
+#define ANKI_ENABLE_METHOD(...) template<ANKI_ENABLE_METHOD_INTERNAL(__LINE__, __VA_ARGS__)>
 
 /// Use it to enable a method based on a constant expression.
 /// @code
-/// template<int N> class Foo {
-/// 	void foo(ANKI_ENABLE_TYPE(Boo) b) {}
+/// class Foo {
+/// 	void foo(ANKI_ENABLE_ARG(Boo, expr) b) {}
 ///	};
 /// @endcode
-#define ANKI_ENABLE_TYPE(type_, expression) \
+#define ANKI_ENABLE_ARG(type_, expression) \
 	typename std::conditional<(expression), type_, DummyType<type_, __LINE__>>::type
 /// @}
 

+ 1 - 1
thirdparty

@@ -1 +1 @@
-Subproject commit f4948663bdd9d14809db7d746184cf5ebd74caca
+Subproject commit 903a4e96a27bb0ba522d8e81634701f898d62736