diff --git a/deps/glslang/glslang/CMakeLists.txt b/deps/glslang/glslang/CMakeLists.txt index 7370adb7ae..7192de5f2c 100644 --- a/deps/glslang/glslang/CMakeLists.txt +++ b/deps/glslang/glslang/CMakeLists.txt @@ -87,6 +87,9 @@ function(glslang_set_link_args TARGET) endif() endfunction(glslang_set_link_args) +# We depend on these for later projects, so they should come first. +add_subdirectory(External) + if(NOT TARGET SPIRV-Tools-opt) set(ENABLE_OPT OFF) endif() diff --git a/deps/glslang/glslang/External/CMakeLists.txt b/deps/glslang/glslang/External/CMakeLists.txt new file mode 100644 index 0000000000..4d9690134a --- /dev/null +++ b/deps/glslang/glslang/External/CMakeLists.txt @@ -0,0 +1,43 @@ +# Suppress all warnings from external projects. +set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -w) + +if(BUILD_TESTING) + if(TARGET gmock) + message(STATUS "Google Mock already configured - use it") + elseif(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/googletest) + # We need to make sure Google Test does not mess up with the + # global CRT settings on Windows. + if(WIN32) + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + endif(WIN32) + add_subdirectory(googletest) + set(GTEST_TARGETS + gtest + gtest_main + gmock + gmock_main) + foreach(target ${GTEST_TARGETS}) + set_property(TARGET ${target} PROPERTY FOLDER gtest) + endforeach() + mark_as_advanced(gmock_build_tests + BUILD_GMOCK + BUILD_GTEST + BUILD_SHARED_LIBS + gtest_build_samples + gtest_build_tests + gtest_disable_pthreads + gtest_force_shared_crt + gtest_hide_internal_symbols) + else() + message(STATUS + "Google Mock was not found - tests based on that will not build") + endif() +endif() + +if(ENABLE_OPT AND NOT TARGET SPIRV-Tools-opt) + if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools) + set(SPIRV_SKIP_TESTS ON CACHE BOOL "Skip building SPIRV-Tools tests") + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools spirv-tools) + endif() +endif() + diff --git a/deps/glslang/glslang/SPIRV/GlslangToSpv.cpp b/deps/glslang/glslang/SPIRV/GlslangToSpv.cpp index ea21f67439..0b058c3010 100755 --- a/deps/glslang/glslang/SPIRV/GlslangToSpv.cpp +++ b/deps/glslang/glslang/SPIRV/GlslangToSpv.cpp @@ -449,8 +449,8 @@ spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glsl builder.addExtension("SPV_EXT_descriptor_indexing"); builder.addCapability(spv::CapabilityShaderNonUniformEXT); return spv::DecorationNonUniformEXT; - } - return spv::DecorationMax; + } else + return spv::DecorationMax; } // Translate a glslang built-in variable to a SPIR-V built in decoration. Also generate @@ -997,20 +997,6 @@ static bool HasNonLayoutQualifiers(const glslang::TType& type, const glslang::TQ return qualifier.invariant || (qualifier.hasLocation() && type.getBasicType() == glslang::EbtBlock); } -// For low-order part of the generator's magic number. Bump up -// when there is a change in the style (e.g., if SSA form changes, -// or a different instruction sequence to do something gets used). -// -// return 1; // start -// return 2; // EOpAtomicCounterDecrement gets a post decrement, to map between GLSL -> SPIR-V -// return 3; // change/correct barrier-instruction operands, to match memory model group decisions -// return 4; // some deeper access chains: for dynamic vector component, and local Boolean component -// return 5; // make OpArrayLength result type be an int with signedness of 0 -// return 6; // revert version 5 change, which makes a different (new) kind of incorrect code, -// versions 4 and 6 each generate OpArrayLength as it has long been done -// return 7; // GLSL volatile keyword maps to both SPIR-V decorations Volatile and Coherent -#define GetSpirvGeneratorVersion() (7) - // // Implement the TGlslangToSpvTraverser class. // @@ -1021,7 +1007,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, const gl options(options), shaderEntry(nullptr), currentFunction(nullptr), sequenceDepth(0), logger(buildLogger), - builder(spvVersion, (glslang::GetKhronosToolId() << 16) | GetSpirvGeneratorVersion(), logger), + builder(spvVersion, (glslang::GetKhronosToolId() << 16) | glslang::GetSpirvGeneratorVersion(), logger), inEntryPoint(false), entryPointTerminated(false), linkageOnly(false), glslangIntermediate(glslangIntermediate) { @@ -6778,6 +6764,21 @@ spv::Id TGlslangToSpvTraverser::getExtBuiltins(const char* name) namespace glslang { +// For low-order part of the generator's magic number. Bump up +// when there is a change in the style (e.g., if SSA form changes, +// or a different instruction sequence to do something gets used). +int GetSpirvGeneratorVersion() +{ + // return 1; // start + // return 2; // EOpAtomicCounterDecrement gets a post decrement, to map between GLSL -> SPIR-V + // return 3; // change/correct barrier-instruction operands, to match memory model group decisions + // return 4; // some deeper access chains: for dynamic vector component, and local Boolean component + // return 5; // make OpArrayLength result type be an int with signedness of 0 + // return 6; // revert version 5 change, which makes a different (new) kind of incorrect code, + // versions 4 and 6 each generate OpArrayLength as it has long been done + return 7; // GLSL volatile keyword maps to both SPIR-V decorations Volatile and Coherent +} + // // Set up the glslang traversal // diff --git a/deps/glslang/glslang/SPIRV/GlslangToSpv.h b/deps/glslang/glslang/SPIRV/GlslangToSpv.h index ab1175ce3f..c8eac558ac 100644 --- a/deps/glslang/glslang/SPIRV/GlslangToSpv.h +++ b/deps/glslang/glslang/SPIRV/GlslangToSpv.h @@ -54,6 +54,7 @@ struct SpvOptions { bool optimizeSize; }; +int GetSpirvGeneratorVersion(); void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv, SpvOptions* options = nullptr); void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector& spirv, diff --git a/deps/glslang/glslang/glslang/MachineIndependent/ShaderLang.cpp b/deps/glslang/glslang/glslang/MachineIndependent/ShaderLang.cpp index 127cb4b265..49327020de 100644 --- a/deps/glslang/glslang/glslang/MachineIndependent/ShaderLang.cpp +++ b/deps/glslang/glslang/glslang/MachineIndependent/ShaderLang.cpp @@ -1226,7 +1226,7 @@ void ShDestruct(ShHandle handle) TShHandleBase* base = static_cast(handle); if (base->getAsCompiler()) - delete base->getAsCompiler(); + DeleteCompiler(base->getAsCompiler()); else if (base->getAsLinker()) DeleteLinker(base->getAsLinker()); else if (base->getAsUniformMap()) diff --git a/deps/glslang/glslang/glslang/OSDependent/Windows/ossource.cpp b/deps/glslang/glslang/glslang/OSDependent/Windows/ossource.cpp index a6f6514053..6c30865fa0 100644 --- a/deps/glslang/glslang/glslang/OSDependent/Windows/ossource.cpp +++ b/deps/glslang/glslang/glslang/OSDependent/Windows/ossource.cpp @@ -114,4 +114,9 @@ void ReleaseGlobalLock() ReleaseMutex(GlobalLock); } +unsigned int __stdcall EnterGenericThread (void* entry) +{ + return ((TThreadEntrypoint)entry)(0); +} + } // namespace glslang