Linux build fix

On linux, clang is unable to find the Cast() function used in the
templated destroy() function unless it has already been defined
before the template function. This forces us to make sure all
Cast() functions are available, but simply adding the vulkan objects'
header files in VkMemory.h would cause a circular dependency, which,
while it would be properly guarded by the preprocessor directives,
wouldn't guarantee any include order, due to the nature of circular
dependencies. So, to fix the issue, a new header file, called
VkDestroy.h was added, which can depend on all vulkan objects' header
files without creating a circular dependency.

Also fixed some warnings.

Change-Id: I1f343a8c476d6308d4555009848a234b0695661e
Reviewed-on: https://swiftshader-review.googlesource.com/c/21668
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 38b43a0..d6f53af 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1874,6 +1874,9 @@
 file(GLOB_RECURSE VULKAN_LIST
     ${VULKAN_DIR}/*.cpp
     ${VULKAN_DIR}/*.h
+    ${VULKAN_DIR}/*.hpp
+    ${SOURCE_DIR}/System/Memory.cpp
+    ${SOURCE_DIR}/System/Memory.hpp
     ${CMAKE_SOURCE_DIR}/include/vulkan/*.h}
 )
 
diff --git a/src/D3D8/D3D8.vcxproj b/src/D3D8/D3D8.vcxproj
index b8325db..0f493a0 100644
--- a/src/D3D8/D3D8.vcxproj
+++ b/src/D3D8/D3D8.vcxproj
@@ -95,6 +95,7 @@
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>

       <ForcedIncludeFiles>%(ForcedIncludeFiles)</ForcedIncludeFiles>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;comctl32.lib;user32.lib;gdi32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -142,6 +143,7 @@
       <StringPooling>true</StringPooling>

       <FloatingPointExceptions>false</FloatingPointExceptions>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;comctl32.lib;user32.lib;gdi32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -188,6 +190,7 @@
       <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>

       <StringPooling>true</StringPooling>

       <FloatingPointExceptions>false</FloatingPointExceptions>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;comctl32.lib;user32.lib;gdi32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -281,4 +284,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

   <ImportGroup Label="ExtensionTargets">

   </ImportGroup>

-</Project>

+</Project>
\ No newline at end of file
diff --git a/src/D3D9/D3D9.vcxproj b/src/D3D9/D3D9.vcxproj
index 5968fa2..665caa0 100644
--- a/src/D3D9/D3D9.vcxproj
+++ b/src/D3D9/D3D9.vcxproj
@@ -149,6 +149,7 @@
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>

       <ForcedIncludeFiles>%(ForcedIncludeFiles)</ForcedIncludeFiles>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

+      <AdditionalOptions>/MP /permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;comctl32.lib;user32.lib;gdi32.lib;Psapi.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -188,6 +189,7 @@
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>

       <ForcedIncludeFiles>%(ForcedIncludeFiles)</ForcedIncludeFiles>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

+      <AdditionalOptions>/MP /permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;comctl32.lib;user32.lib;gdi32.lib;Psapi.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -231,6 +233,7 @@
       <StringPooling>true</StringPooling>

       <FloatingPointExceptions>false</FloatingPointExceptions>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

+      <AdditionalOptions>/MP /permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;comctl32.lib;user32.lib;gdi32.lib;Psapi.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -275,6 +278,7 @@
       <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>

       <StringPooling>true</StringPooling>

       <FloatingPointExceptions>false</FloatingPointExceptions>

+      <AdditionalOptions>/MP /permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;comctl32.lib;user32.lib;gdi32.lib;Psapi.lib;Psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -300,7 +304,7 @@
       <TargetEnvironment>X64</TargetEnvironment>

     </Midl>

     <ClCompile>

-      <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>

+      <AdditionalOptions>/MP /permissive- %(AdditionalOptions)</AdditionalOptions>

       <Optimization>Full</Optimization>

       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>

       <IntrinsicFunctions>false</IntrinsicFunctions>

@@ -350,7 +354,7 @@
       <TargetEnvironment>X64</TargetEnvironment>

     </Midl>

     <ClCompile>

-      <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>

+      <AdditionalOptions>/MP /permissive- %(AdditionalOptions)</AdditionalOptions>

       <Optimization>Full</Optimization>

       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>

       <IntrinsicFunctions>false</IntrinsicFunctions>

diff --git a/src/OpenGL/compiler/Compiler.vcxproj b/src/OpenGL/compiler/Compiler.vcxproj
index 9036043..e797db1 100644
--- a/src/OpenGL/compiler/Compiler.vcxproj
+++ b/src/OpenGL/compiler/Compiler.vcxproj
@@ -129,6 +129,7 @@
       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

       <ErrorReporting>Queue</ErrorReporting>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

   </ItemDefinitionGroup>

   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

@@ -148,6 +149,7 @@
       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

       <ErrorReporting>Queue</ErrorReporting>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

   </ItemDefinitionGroup>

   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

@@ -166,6 +168,7 @@
       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

       <ErrorReporting>Queue</ErrorReporting>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

   </ItemDefinitionGroup>

   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

@@ -184,6 +187,7 @@
       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

       <ErrorReporting>Queue</ErrorReporting>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

   </ItemDefinitionGroup>

   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">

@@ -202,6 +206,7 @@
       <DisableSpecificWarnings>5030;4005;</DisableSpecificWarnings>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

       <ErrorReporting>Queue</ErrorReporting>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

   </ItemDefinitionGroup>

   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Profile|x64'">

@@ -220,6 +225,7 @@
       <DisableSpecificWarnings>5030;4005;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

       <ErrorReporting>Queue</ErrorReporting>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

   </ItemDefinitionGroup>

   <ItemGroup>

diff --git a/src/OpenGL/compiler/preprocessor/preprocessor.vcxproj b/src/OpenGL/compiler/preprocessor/preprocessor.vcxproj
index 0a7f488..f01592a 100644
--- a/src/OpenGL/compiler/preprocessor/preprocessor.vcxproj
+++ b/src/OpenGL/compiler/preprocessor/preprocessor.vcxproj
@@ -91,6 +91,7 @@
       <DisableSpecificWarnings>4005;</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -105,6 +106,7 @@
       <DisableSpecificWarnings>4005;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -121,6 +123,7 @@
       <DisableSpecificWarnings>4005;</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -139,6 +142,7 @@
       <DisableSpecificWarnings>4005;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

diff --git a/src/OpenGL/libEGL/libEGL.vcxproj b/src/OpenGL/libEGL/libEGL.vcxproj
index 64d7408..2115019 100644
--- a/src/OpenGL/libEGL/libEGL.vcxproj
+++ b/src/OpenGL/libEGL/libEGL.vcxproj
@@ -133,6 +133,7 @@
       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <DisableSpecificWarnings>5030</DisableSpecificWarnings>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

@@ -165,6 +166,7 @@
       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <DisableSpecificWarnings>5030</DisableSpecificWarnings>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

@@ -198,6 +200,7 @@
       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <DisableSpecificWarnings>5030</DisableSpecificWarnings>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

@@ -231,6 +234,7 @@
       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <DisableSpecificWarnings>5030</DisableSpecificWarnings>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

@@ -266,6 +270,7 @@
       <TreatWarningAsError>true</TreatWarningAsError>

       <DisableSpecificWarnings>5030</DisableSpecificWarnings>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

@@ -299,6 +304,7 @@
       <TreatWarningAsError>true</TreatWarningAsError>

       <DisableSpecificWarnings>5030</DisableSpecificWarnings>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj b/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj
index aaa648c..cf1ac82 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.vcxproj
@@ -137,6 +137,7 @@
       <BrowseInformation>true</BrowseInformation>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -166,6 +167,7 @@
       <BrowseInformation>true</BrowseInformation>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -202,6 +204,7 @@
       <IntrinsicFunctions>false</IntrinsicFunctions>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -239,6 +242,7 @@
       <IntrinsicFunctions>false</IntrinsicFunctions>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -276,6 +280,7 @@
       <WholeProgramOptimization>true</WholeProgramOptimization>

       <IntrinsicFunctions>false</IntrinsicFunctions>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -311,6 +316,7 @@
       <WholeProgramOptimization>true</WholeProgramOptimization>

       <IntrinsicFunctions>false</IntrinsicFunctions>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

diff --git a/src/OpenGL/libGLESv2/libGLESv2.vcxproj b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
index 9c9bb32..7bb3c72 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.vcxproj
+++ b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
@@ -139,6 +139,7 @@
       <DisableSpecificWarnings>5030;%(DisableSpecificWarnings)</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -170,6 +171,7 @@
       <DisableSpecificWarnings>5030;%(DisableSpecificWarnings)</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -208,6 +210,7 @@
       <DisableSpecificWarnings>5030;%(DisableSpecificWarnings)</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -247,6 +250,7 @@
       <DisableSpecificWarnings>5030;%(DisableSpecificWarnings)</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -286,6 +290,7 @@
       <TreatWarningAsError>true</TreatWarningAsError>

       <DisableSpecificWarnings>5030;%(DisableSpecificWarnings)</DisableSpecificWarnings>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -323,6 +328,7 @@
       <TreatWarningAsError>true</TreatWarningAsError>

       <DisableSpecificWarnings>5030;%(DisableSpecificWarnings)</DisableSpecificWarnings>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>dxguid.lib;WS2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

diff --git a/src/Reactor/Reactor.vcxproj b/src/Reactor/Reactor.vcxproj
index 8b54ce5..b26b32f 100644
--- a/src/Reactor/Reactor.vcxproj
+++ b/src/Reactor/Reactor.vcxproj
@@ -124,6 +124,7 @@
       <ExceptionHandling>false</ExceptionHandling>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <ProjectReference>

       <LinkLibraryDependencies>false</LinkLibraryDependencies>

@@ -150,6 +151,7 @@
       <TreatWarningAsError>true</TreatWarningAsError>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <ProjectReference>

       <LinkLibraryDependencies>false</LinkLibraryDependencies>

@@ -180,6 +182,7 @@
       <TreatWarningAsError>true</TreatWarningAsError>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <ProjectReference>

       <LinkLibraryDependencies>false</LinkLibraryDependencies>

@@ -208,6 +211,7 @@
       <FloatingPointExceptions>false</FloatingPointExceptions>

       <TreatWarningAsError>true</TreatWarningAsError>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <ProjectReference>

       <LinkLibraryDependencies>false</LinkLibraryDependencies>

@@ -240,6 +244,7 @@
       <TreatWarningAsError>true</TreatWarningAsError>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <ProjectReference>

       <LinkLibraryDependencies>false</LinkLibraryDependencies>

@@ -271,6 +276,7 @@
       <FloatingPointExceptions>false</FloatingPointExceptions>

       <TreatWarningAsError>true</TreatWarningAsError>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <ProjectReference>

       <LinkLibraryDependencies>false</LinkLibraryDependencies>

diff --git a/src/Reactor/ReactorUnitTests.vcxproj b/src/Reactor/ReactorUnitTests.vcxproj
index 0471ba6..3a89929 100644
--- a/src/Reactor/ReactorUnitTests.vcxproj
+++ b/src/Reactor/ReactorUnitTests.vcxproj
@@ -104,6 +104,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)third_party\googletest\googletest\include\;$(SolutionDir)third_party\googletest\googletest\;$(SolutionDir)third_party\subzero\src\;$(SolutionDir)third_party\subzero\unittest\;$(SolutionDir)third_party\llvm-subzero\include\;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;SubmoduleCheck;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <ForcedIncludeFiles>gtest/gtest.h</ForcedIncludeFiles>

       <TreatSpecificWarningsAsErrors>5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <SubSystem>Console</SubSystem>

@@ -121,6 +122,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)third_party\googletest\googletest\include\;$(SolutionDir)third_party\googletest\googletest\;$(SolutionDir)third_party\subzero\src\;$(SolutionDir)third_party\subzero\unittest\;$(SolutionDir)third_party\llvm-subzero\include\;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;SubmoduleCheck;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <ForcedIncludeFiles>gtest/gtest.h</ForcedIncludeFiles>

       <TreatSpecificWarningsAsErrors>5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <SubSystem>Console</SubSystem>

@@ -140,6 +142,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)third_party\googletest\googletest\include\;$(SolutionDir)third_party\googletest\googletest\;$(SolutionDir)third_party\subzero\src\;$(SolutionDir)third_party\subzero\unittest\;$(SolutionDir)third_party\llvm-subzero\include\;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;SubmoduleCheck;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <ForcedIncludeFiles>gtest/gtest.h</ForcedIncludeFiles>

       <TreatSpecificWarningsAsErrors>5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <SubSystem>Console</SubSystem>

@@ -161,6 +164,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)third_party\googletest\googletest\include\;$(SolutionDir)third_party\googletest\googletest\;$(SolutionDir)third_party\subzero\src\;$(SolutionDir)third_party\subzero\unittest\;$(SolutionDir)third_party\llvm-subzero\include\;$(SolutionDir)third_party\llvm-subzero\build\Windows\include;SubmoduleCheck;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <ForcedIncludeFiles>gtest/gtest.h</ForcedIncludeFiles>

       <TreatSpecificWarningsAsErrors>5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <SubSystem>Console</SubSystem>

diff --git a/src/Reactor/Subzero.vcxproj b/src/Reactor/Subzero.vcxproj
index 1ea0eab..29233b2 100644
--- a/src/Reactor/Subzero.vcxproj
+++ b/src/Reactor/Subzero.vcxproj
@@ -100,6 +100,7 @@
       <ForcedIncludeFiles>src/IceTypes.h</ForcedIncludeFiles>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <SubSystem>Console</SubSystem>

@@ -119,6 +120,7 @@
       <ForcedIncludeFiles>src/IceTypes.h</ForcedIncludeFiles>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <SubSystem>Console</SubSystem>

@@ -140,6 +142,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <SubSystem>Console</SubSystem>

@@ -167,6 +170,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <SubSystem>Console</SubSystem>

diff --git a/src/Reactor/SubzeroLLVMDependencies.vcxproj b/src/Reactor/SubzeroLLVMDependencies.vcxproj
index 96f16ec..8b951e3 100644
--- a/src/Reactor/SubzeroLLVMDependencies.vcxproj
+++ b/src/Reactor/SubzeroLLVMDependencies.vcxproj
@@ -94,6 +94,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

   </ItemDefinitionGroup>

   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

@@ -106,6 +107,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

   </ItemDefinitionGroup>

   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

@@ -120,6 +122,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <EnableCOMDATFolding>true</EnableCOMDATFolding>

@@ -138,6 +141,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <EnableCOMDATFolding>true</EnableCOMDATFolding>

diff --git a/src/SwiftShader/SwiftShader.vcxproj b/src/SwiftShader/SwiftShader.vcxproj
index 7097609..9cd839d 100644
--- a/src/SwiftShader/SwiftShader.vcxproj
+++ b/src/SwiftShader/SwiftShader.vcxproj
@@ -136,6 +136,7 @@
       <TreatWarningAsError>true</TreatWarningAsError>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Lib>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

@@ -172,6 +173,7 @@
       <TreatWarningAsError>true</TreatWarningAsError>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Lib>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

@@ -208,6 +210,7 @@
       <TreatWarningAsError>true</TreatWarningAsError>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Lib>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

@@ -242,6 +245,7 @@
       <RuntimeTypeInfo>false</RuntimeTypeInfo>

       <TreatWarningAsError>true</TreatWarningAsError>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Lib>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

@@ -281,6 +285,7 @@
       <TreatWarningAsError>true</TreatWarningAsError>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Lib>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

@@ -318,6 +323,7 @@
       <RuntimeTypeInfo>false</RuntimeTypeInfo>

       <TreatWarningAsError>true</TreatWarningAsError>

       <TreatSpecificWarningsAsErrors>4018;5038;4838</TreatSpecificWarningsAsErrors>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Lib>

       <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>

diff --git a/src/Vulkan/VkDestroy.h b/src/Vulkan/VkDestroy.h
new file mode 100644
index 0000000..f45ebcd
--- /dev/null
+++ b/src/Vulkan/VkDestroy.h
@@ -0,0 +1,45 @@
+// Copyright 2018 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.
+
+#include "VkCommandBuffer.hpp"
+#include "VkDevice.hpp"
+#include "VkInstance.hpp"
+#include "VkPhysicalDevice.hpp"
+#include "VkQueue.hpp"
+
+namespace vk
+{
+
+// Because Vulkan uses optional allocation callbacks, we use them in a custom
+// placement new operator in the VkObjectBase class for simplicity.
+// Unfortunately, since we use a placement new to allocate VkObjectBase derived
+// classes objects, the corresponding deletion operator is a placement delete,
+// which does nothing. In order to properly dispose of these objects' memory,
+// we use this function, which calls the proper T:destroy() function
+// prior to releasing the object (by default, VkObjectBase::destroy does nothing).
+template<typename VkT>
+inline void destroy(VkT vkObject, const VkAllocationCallbacks* pAllocator)
+{
+	auto object = Cast(vkObject);
+	if(object)
+	{
+		object->destroy(pAllocator);
+		// object may not point to the same pointer as vkObject, for dispatchable objects,
+		// for example, so make sure to deallocate based on the vkObject pointer, which
+		// should always point to the beginning of the allocated memory
+		vk::deallocate(vkObject, pAllocator);
+	}
+}
+
+}
diff --git a/src/Vulkan/VkDevice.cpp b/src/Vulkan/VkDevice.cpp
index 62040db..2389fda 100644
--- a/src/Vulkan/VkDevice.cpp
+++ b/src/Vulkan/VkDevice.cpp
@@ -27,7 +27,7 @@
 	for(uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; i++)
 	{
 		const VkDeviceQueueCreateInfo& queueCreateInfo = pCreateInfo->pQueueCreateInfos[i];
-		queueCount += info->pCreateInfo->pQueueCreateInfos[i].queueCount;
+		queueCount += queueCreateInfo.queueCount;
 	}
 
 	uint32_t queueID = 0;
diff --git a/src/Vulkan/VkInstance.cpp b/src/Vulkan/VkInstance.cpp
index 1848064..c0b9bba 100644
--- a/src/Vulkan/VkInstance.cpp
+++ b/src/Vulkan/VkInstance.cpp
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 #include "VkInstance.hpp"
+#include "VkDestroy.h"
 
 namespace vk
 {
diff --git a/src/Vulkan/VkInstance.hpp b/src/Vulkan/VkInstance.hpp
index d5385ae..30c48b9 100644
--- a/src/Vulkan/VkInstance.hpp
+++ b/src/Vulkan/VkInstance.hpp
@@ -15,7 +15,7 @@
 #ifndef VK_INSTANCE_HPP_
 #define VK_INSTANCE_HPP_
 
-#include "VkPhysicalDevice.hpp"
+#include "VkObject.hpp"
 
 namespace vk
 {
diff --git a/src/Vulkan/VkMemory.cpp b/src/Vulkan/VkMemory.cpp
index f24be3c..769b0db 100644
--- a/src/Vulkan/VkMemory.cpp
+++ b/src/Vulkan/VkMemory.cpp
@@ -17,6 +17,7 @@
 
 #include "VkConfig.h"
 #include "VkMemory.h"
+#include "System/Memory.hpp"
 
 namespace vk
 {
diff --git a/src/Vulkan/VkMemory.h b/src/Vulkan/VkMemory.h
index 4178209..29309b7 100644
--- a/src/Vulkan/VkMemory.h
+++ b/src/Vulkan/VkMemory.h
@@ -15,14 +15,13 @@
 #ifndef VK_MEMORY_HPP_
 #define VK_MEMORY_HPP_
 
-#include "System/Memory.hpp"
 #include <vulkan/vulkan.h>
 
 namespace vk
 {
 
 void* allocate(size_t count, size_t alignment, const VkAllocationCallbacks* pAllocator,
-	           VkSystemAllocationScope allocationScope = VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+               VkSystemAllocationScope allocationScope = VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
 void deallocate(void* ptr, const VkAllocationCallbacks* pAllocator);
 
 template <typename T>
@@ -31,27 +30,6 @@
 	return reinterpret_cast<T*>(allocate(count, alignof(T), pAllocator, T::GetAllocationScope()));
 }
 
-// Because Vulkan uses optional allocation callbacks, we use them in a custom
-// placement new operator in the VkObjectBase class for simplicity.
-// Unfortunately, since we use a placement new to allocate VkObjectBase derived
-// classes objects, the corresponding deletion operator is a placement delete,
-// which does nothing. In order to properly dispose of these objects' memory,
-// we use this function, which calls the proper T:destroy() function
-// prior to releasing the object (by default, VkObjectBase::destroy does nothing).
-template<typename VkT>
-inline void destroy(VkT vkObject, const VkAllocationCallbacks* pAllocator)
-{
-	auto object = Cast(vkObject);
-	if(object)
-	{
-		object->destroy(pAllocator);
-		// object may not point to the same pointer as vkObject, for dispatchable objects,
-		// for example, so make sure to deallocate based on the vkObject pointer, which
-		// should always point to the beginning of the allocated memory
-		vk::deallocate(vkObject, pAllocator);
-	}
-}
-
 } // namespace vk
 
-#endif // VK_MEMORY_HPP_
\ No newline at end of file
+#endif // VK_MEMORY_HPP_
diff --git a/src/Vulkan/VkObject.hpp b/src/Vulkan/VkObject.hpp
index 84349da..5a9a414 100644
--- a/src/Vulkan/VkObject.hpp
+++ b/src/Vulkan/VkObject.hpp
@@ -15,6 +15,7 @@
 #ifndef VK_OBJECT_HPP_
 #define VK_OBJECT_HPP_
 
+#include "VkConfig.h"
 #include "VkDebug.hpp"
 #include "VkMemory.h"
 #include <vulkan/vulkan.h>
diff --git a/src/Vulkan/VkPhysicalDevice.cpp b/src/Vulkan/VkPhysicalDevice.cpp
index 88b0570..90ba1dc 100644
--- a/src/Vulkan/VkPhysicalDevice.cpp
+++ b/src/Vulkan/VkPhysicalDevice.cpp
@@ -215,6 +215,7 @@
 	uint32_t apiVersion;
 	VkResult result = vkEnumerateInstanceVersion(&apiVersion);
 	ASSERT(result == VK_SUCCESS);
+	(void)result; // Slence unused variable warning
 
 	static const VkPhysicalDeviceProperties properties
 	{
@@ -382,4 +383,4 @@
 	return properties;
 }
 
-} // namespace vk
\ No newline at end of file
+} // namespace vk
diff --git a/src/Vulkan/VkQueue.hpp b/src/Vulkan/VkQueue.hpp
index cb6517f..49e2604 100644
--- a/src/Vulkan/VkQueue.hpp
+++ b/src/Vulkan/VkQueue.hpp
@@ -16,6 +16,7 @@
 #define VK_QUEUE_HPP_
 
 #include "VkObject.hpp"
+#include <vulkan/vk_icd.h>
 
 namespace vk
 {
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 5fe4559..b5bd7f6 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -15,6 +15,7 @@
 #include "VkConfig.h"
 #include "VkCommandBuffer.hpp"
 #include "VkDebug.hpp"
+#include "VkDestroy.h"
 #include "VkDevice.hpp"
 #include "VkGetProcAddress.h"
 #include "VkInstance.hpp"
@@ -222,6 +223,7 @@
 		}
 
 		ASSERT(queueCreateInfo.queueFamilyIndex < queueFamilyPropertyCount);
+		(void)queueFamilyPropertyCount; // Slence unused variable warning
 	}
 
 	vk::Device::CreateInfo deviceCreateInfo =
diff --git a/src/Vulkan/vulkan.vcxproj b/src/Vulkan/vulkan.vcxproj
index 92b83df..ce9f4a4 100644
--- a/src/Vulkan/vulkan.vcxproj
+++ b/src/Vulkan/vulkan.vcxproj
@@ -100,6 +100,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NOMINMAX;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <EnableCOMDATFolding>true</EnableCOMDATFolding>

@@ -120,6 +121,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NOMINMAX;DEBUGGER_WAIT_DIALOG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <ModuleDefinitionFile>swiftshader_icd.def</ModuleDefinitionFile>

@@ -138,6 +140,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NOMINMAX;DEBUGGER_WAIT_DIALOG;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <ModuleDefinitionFile>swiftshader_icd.def</ModuleDefinitionFile>

@@ -158,6 +161,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;NOMINMAX;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <EnableCOMDATFolding>true</EnableCOMDATFolding>

@@ -270,6 +274,7 @@
     <ClInclude Include="VkCommandBuffer.hpp" />

     <ClInclude Include="VkConfig.h" />

     <ClInclude Include="VkDebug.hpp" />

+    <ClInclude Include="VkDestroy.h" />

     <ClInclude Include="VkDevice.hpp" />

     <ClInclude Include="VkGetProcAddress.h" />

     <ClInclude Include="VkInstance.hpp" />

diff --git a/src/Vulkan/vulkan.vcxproj.filters b/src/Vulkan/vulkan.vcxproj.filters
index 2d6ed035..1317185 100644
--- a/src/Vulkan/vulkan.vcxproj.filters
+++ b/src/Vulkan/vulkan.vcxproj.filters
@@ -461,6 +461,9 @@
     <ClInclude Include="VkDebug.hpp">

       <Filter>Header Files\Vulkan</Filter>

     </ClInclude>

+    <ClInclude Include="VkDestroy.h">

+      <Filter>Header Files\Vulkan</Filter>

+    </ClInclude>

   </ItemGroup>

   <ItemGroup>

     <None Include="swiftshader_icd.def" />

diff --git a/tests/fuzzers/VertexRoutineFuzzer.vcxproj b/tests/fuzzers/VertexRoutineFuzzer.vcxproj
index eae09d2..8363d9a 100644
--- a/tests/fuzzers/VertexRoutineFuzzer.vcxproj
+++ b/tests/fuzzers/VertexRoutineFuzzer.vcxproj
@@ -94,6 +94,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)src;$(SolutionDir)src\OpenGL;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>FUZZER_STANDALONE_REPRODUCE;_CRT_SECURE_NO_WARNINGS;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>WS2_32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -108,6 +109,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)src;$(SolutionDir)src\OpenGL;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>FUZZER_STANDALONE_REPRODUCE;_CRT_SECURE_NO_WARNINGS;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <AdditionalDependencies>WS2_32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>

@@ -124,6 +126,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)src;$(SolutionDir)src\OpenGL;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>FUZZER_STANDALONE_REPRODUCE;_CRT_SECURE_NO_WARNINGS;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <EnableCOMDATFolding>true</EnableCOMDATFolding>

@@ -142,6 +145,7 @@
       <AdditionalIncludeDirectories>$(SolutionDir)src;$(SolutionDir)src\OpenGL;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>FUZZER_STANDALONE_REPRODUCE;_CRT_SECURE_NO_WARNINGS;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <EnableCOMDATFolding>true</EnableCOMDATFolding>

diff --git a/third_party/PowerVR_SDK/Examples/Advanced/ChameleonMan/OGLES2/Build/WindowsVC2010/OGLES2ChameleonMan.vcxproj b/third_party/PowerVR_SDK/Examples/Advanced/ChameleonMan/OGLES2/Build/WindowsVC2010/OGLES2ChameleonMan.vcxproj
index 9d6dadc..5a2172f 100644
--- a/third_party/PowerVR_SDK/Examples/Advanced/ChameleonMan/OGLES2/Build/WindowsVC2010/OGLES2ChameleonMan.vcxproj
+++ b/third_party/PowerVR_SDK/Examples/Advanced/ChameleonMan/OGLES2/Build/WindowsVC2010/OGLES2ChameleonMan.vcxproj
@@ -91,6 +91,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -107,6 +108,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -125,6 +127,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -145,6 +148,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

diff --git a/third_party/PowerVR_SDK/Examples/Beginner/01_HelloAPI/OGLES2/Build/WindowsVC2010/OGLES2HelloAPI.vcxproj b/third_party/PowerVR_SDK/Examples/Beginner/01_HelloAPI/OGLES2/Build/WindowsVC2010/OGLES2HelloAPI.vcxproj
index e4d373b..5642f5a 100644
--- a/third_party/PowerVR_SDK/Examples/Beginner/01_HelloAPI/OGLES2/Build/WindowsVC2010/OGLES2HelloAPI.vcxproj
+++ b/third_party/PowerVR_SDK/Examples/Beginner/01_HelloAPI/OGLES2/Build/WindowsVC2010/OGLES2HelloAPI.vcxproj
@@ -91,6 +91,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -107,6 +108,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -125,6 +127,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -145,6 +148,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

diff --git a/third_party/PowerVR_SDK/Examples/Beginner/04_BasicTnL/OGLES/Build/WindowsVC2010/OGLESBasicTnL.vcxproj b/third_party/PowerVR_SDK/Examples/Beginner/04_BasicTnL/OGLES/Build/WindowsVC2010/OGLESBasicTnL.vcxproj
index 1a977d2..9545fb0 100644
--- a/third_party/PowerVR_SDK/Examples/Beginner/04_BasicTnL/OGLES/Build/WindowsVC2010/OGLESBasicTnL.vcxproj
+++ b/third_party/PowerVR_SDK/Examples/Beginner/04_BasicTnL/OGLES/Build/WindowsVC2010/OGLESBasicTnL.vcxproj
@@ -91,6 +91,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -107,6 +108,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -125,6 +127,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -145,6 +148,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

diff --git a/third_party/PowerVR_SDK/Examples/Intermediate/ColourGrading/OGLES3/Build/WindowsVC2010/OGLES3ColourGrading.vcxproj b/third_party/PowerVR_SDK/Examples/Intermediate/ColourGrading/OGLES3/Build/WindowsVC2010/OGLES3ColourGrading.vcxproj
index 363a529..6792196 100644
--- a/third_party/PowerVR_SDK/Examples/Intermediate/ColourGrading/OGLES3/Build/WindowsVC2010/OGLES3ColourGrading.vcxproj
+++ b/third_party/PowerVR_SDK/Examples/Intermediate/ColourGrading/OGLES3/Build/WindowsVC2010/OGLES3ColourGrading.vcxproj
@@ -91,6 +91,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -107,6 +108,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -125,6 +127,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -145,6 +148,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

diff --git a/third_party/PowerVR_SDK/Examples/Intermediate/DisplacementMap/OGLES2/Build/WindowsVC2010/OGLES2DisplacementMap.vcxproj b/third_party/PowerVR_SDK/Examples/Intermediate/DisplacementMap/OGLES2/Build/WindowsVC2010/OGLES2DisplacementMap.vcxproj
index 908b4dc..36b95f6 100644
--- a/third_party/PowerVR_SDK/Examples/Intermediate/DisplacementMap/OGLES2/Build/WindowsVC2010/OGLES2DisplacementMap.vcxproj
+++ b/third_party/PowerVR_SDK/Examples/Intermediate/DisplacementMap/OGLES2/Build/WindowsVC2010/OGLES2DisplacementMap.vcxproj
@@ -91,6 +91,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -107,6 +108,7 @@
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -125,6 +127,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>

@@ -145,6 +148,7 @@
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

       <MinimalRebuild>false</MinimalRebuild>

+      <AdditionalOptions>/permissive- %(AdditionalOptions)</AdditionalOptions>

     </ClCompile>

     <Link>

       <GenerateDebugInformation>true</GenerateDebugInformation>