From 76052a739491c194e2d4aa3bace501083fb6c2a9 Mon Sep 17 00:00:00 2001
From: Matthew Smith <matt@offtopica.uk>
Date: Sun, 30 Jan 2022 17:19:47 +0000
Subject: [PATCH 1/3] build: Use system glslang

Requires -DGLSLANG_TARGET_DIR option.
---
 CMakeLists.txt                                | 11 +++
 renderdoc/CMakeLists.txt                      |  2 +-
 renderdoc/data/glsl_shaders.cpp               |  2 +-
 renderdoc/driver/shaders/spirv/CMakeLists.txt | 91 +------------------
 .../driver/shaders/spirv/glslang_compile.cpp  |  5 +-
 .../driver/shaders/spirv/spirv_compile.cpp    |  4 +-
 6 files changed, 19 insertions(+), 96 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 127cee3fd..cb0a2c7f6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -419,6 +419,17 @@ elseif(UNIX)
     endif()
 endif()
 
+# glslang package does not export a -config.cmake file.
+option(GLSLANG_TARGET_DIR "Absolute path to glslangTargets.cmake directory")
+include("${GLSLANG_TARGET_DIR}/OSDependentTargets.cmake")
+include("${GLSLANG_TARGET_DIR}/OGLCompilerTargets.cmake")
+include("${GLSLANG_TARGET_DIR}/HLSLTargets.cmake")
+include("${GLSLANG_TARGET_DIR}/glslangTargets.cmake")
+include("${GLSLANG_TARGET_DIR}/SPIRVTargets.cmake")
+if(NOT TARGET glslang OR NOT TARGET SPIRV)
+  message(FATAL_ERROR "glslang or SPIRV target not found")
+endif()
+
 add_subdirectory(renderdoc)
 
 # these variables are handled within the CMakeLists.txt in qrenderdoc,
diff --git a/renderdoc/CMakeLists.txt b/renderdoc/CMakeLists.txt
index 9174afb2a..927e95fb9 100644
--- a/renderdoc/CMakeLists.txt
+++ b/renderdoc/CMakeLists.txt
@@ -580,7 +580,7 @@ endif()
 add_library(renderdoc SHARED ${renderdoc_objects})
 target_compile_definitions(renderdoc ${RDOC_DEFINITIONS})
 target_include_directories(renderdoc ${RDOC_INCLUDES})
-target_link_libraries(renderdoc ${RDOC_LIBRARIES})
+target_link_libraries(renderdoc ${RDOC_LIBRARIES} glslang SPIRV)
 
 add_dependencies(renderdoc renderdoc_libentry)
 
diff --git a/renderdoc/data/glsl_shaders.cpp b/renderdoc/data/glsl_shaders.cpp
index d11cd0b88..d33f18099 100644
--- a/renderdoc/data/glsl_shaders.cpp
+++ b/renderdoc/data/glsl_shaders.cpp
@@ -26,7 +26,7 @@
 #include "common/common.h"
 #include "common/formatting.h"
 #include "driver/shaders/spirv/glslang_compile.h"
-#include "glslang/glslang/Public/ShaderLang.h"
+#include <glslang/Public/ShaderLang.h>
 #include "os/os_specific.h"
 
 #define GLSL_HEADERS(HEADER) \
diff --git a/renderdoc/driver/shaders/spirv/CMakeLists.txt b/renderdoc/driver/shaders/spirv/CMakeLists.txt
index 68229cd36..088645fbe 100644
--- a/renderdoc/driver/shaders/spirv/CMakeLists.txt
+++ b/renderdoc/driver/shaders/spirv/CMakeLists.txt
@@ -1,91 +1,3 @@
-set(glslang_dir ${RDOC_SOURCE_DIR}/3rdparty/glslang)
-set(glslang_sources
-    ${glslang_dir}/OGLCompilersDLL/InitializeDll.cpp
-    ${glslang_dir}/OGLCompilersDLL/InitializeDll.h
-    ${glslang_dir}/SPIRV/GlslangToSpv.cpp
-    ${glslang_dir}/SPIRV/GlslangToSpv.h
-    ${glslang_dir}/SPIRV/GLSL.std.450.h
-    ${glslang_dir}/SPIRV/GLSL.ext.AMD.h
-    ${glslang_dir}/SPIRV/GLSL.ext.EXT.h
-    ${glslang_dir}/SPIRV/GLSL.ext.KHR.h
-    ${glslang_dir}/SPIRV/GLSL.ext.NV.h
-    ${glslang_dir}/SPIRV/hex_float.h
-    ${glslang_dir}/SPIRV/InReadableOrder.cpp
-    ${glslang_dir}/SPIRV/Logger.cpp
-    ${glslang_dir}/SPIRV/Logger.h
-    ${glslang_dir}/SPIRV/SpvBuilder.cpp
-    ${glslang_dir}/SPIRV/SpvBuilder.h
-    ${glslang_dir}/SPIRV/SpvTools.cpp
-    ${glslang_dir}/SPIRV/SpvTools.h
-    ${glslang_dir}/SPIRV/SpvPostProcess.cpp
-    ${glslang_dir}/SPIRV/spvIR.h
-    ${glslang_dir}/glslang/GenericCodeGen/CodeGen.cpp
-    ${glslang_dir}/glslang/GenericCodeGen/Link.cpp
-    ${glslang_dir}/glslang/Include/arrays.h
-    ${glslang_dir}/glslang/Include/BaseTypes.h
-    ${glslang_dir}/glslang/Include/Common.h
-    ${glslang_dir}/glslang/Include/ConstantUnion.h
-    ${glslang_dir}/glslang/Include/InfoSink.h
-    ${glslang_dir}/glslang/Include/InitializeGlobals.h
-    ${glslang_dir}/glslang/Include/intermediate.h
-    ${glslang_dir}/glslang/Include/PoolAlloc.h
-    ${glslang_dir}/glslang/Include/ResourceLimits.h
-    ${glslang_dir}/glslang/Include/revision.h
-    ${glslang_dir}/glslang/Include/ShHandle.h
-    ${glslang_dir}/glslang/Include/Types.h
-    ${glslang_dir}/glslang/MachineIndependent/Constant.cpp
-    ${glslang_dir}/glslang/MachineIndependent/glslang_tab.cpp
-    ${glslang_dir}/glslang/MachineIndependent/glslang_tab.cpp.h
-    ${glslang_dir}/glslang/MachineIndependent/gl_types.h
-    ${glslang_dir}/glslang/MachineIndependent/iomapper.cpp
-    ${glslang_dir}/glslang/MachineIndependent/iomapper.h
-    ${glslang_dir}/glslang/MachineIndependent/gl_types.h
-    ${glslang_dir}/glslang/MachineIndependent/InfoSink.cpp
-    ${glslang_dir}/glslang/MachineIndependent/Initialize.cpp
-    ${glslang_dir}/glslang/MachineIndependent/Initialize.h
-    ${glslang_dir}/glslang/MachineIndependent/Intermediate.cpp
-    ${glslang_dir}/glslang/MachineIndependent/intermOut.cpp
-    ${glslang_dir}/glslang/MachineIndependent/IntermTraverse.cpp
-    ${glslang_dir}/glslang/MachineIndependent/limits.cpp
-    ${glslang_dir}/glslang/MachineIndependent/linkValidate.cpp
-    ${glslang_dir}/glslang/MachineIndependent/LiveTraverser.h
-    ${glslang_dir}/glslang/MachineIndependent/localintermediate.h
-    ${glslang_dir}/glslang/MachineIndependent/parseConst.cpp
-    ${glslang_dir}/glslang/MachineIndependent/ParseContextBase.cpp
-    ${glslang_dir}/glslang/MachineIndependent/ParseHelper.cpp
-    ${glslang_dir}/glslang/MachineIndependent/ParseHelper.h
-    ${glslang_dir}/glslang/MachineIndependent/PoolAlloc.cpp
-    ${glslang_dir}/glslang/MachineIndependent/propagateNoContraction.cpp
-    ${glslang_dir}/glslang/MachineIndependent/propagateNoContraction.h
-    ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpAtom.cpp
-    ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpContext.cpp
-    ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpContext.h
-    ${glslang_dir}/glslang/MachineIndependent/preprocessor/Pp.cpp
-    ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpScanner.cpp
-    ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpTokens.cpp
-    ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpTokens.h
-    ${glslang_dir}/glslang/MachineIndependent/reflection.cpp
-    ${glslang_dir}/glslang/MachineIndependent/reflection.h
-    ${glslang_dir}/glslang/MachineIndependent/RemoveTree.cpp
-    ${glslang_dir}/glslang/MachineIndependent/RemoveTree.h
-    ${glslang_dir}/glslang/MachineIndependent/ScanContext.h
-    ${glslang_dir}/glslang/MachineIndependent/Scan.cpp
-    ${glslang_dir}/glslang/MachineIndependent/Scan.h
-    ${glslang_dir}/glslang/MachineIndependent/ShaderLang.cpp
-    ${glslang_dir}/glslang/MachineIndependent/SymbolTable.cpp
-    ${glslang_dir}/glslang/MachineIndependent/SymbolTable.h
-    ${glslang_dir}/glslang/MachineIndependent/Versions.cpp
-    ${glslang_dir}/glslang/MachineIndependent/Versions.h
-    ${glslang_dir}/glslang/MachineIndependent/attribute.cpp
-    ${glslang_dir}/glslang/MachineIndependent/attribute.h
-    ${glslang_dir}/glslang/OSDependent/osinclude.h
-    ${glslang_dir}/glslang/Public/ShaderLang.h)
-
-if(UNIX)
-    list(APPEND glslang_sources
-        ${glslang_dir}/glslang/OSDependent/Unix/ossource.cpp)
-endif()
-
 set(sources
     glslang_compile.cpp
     glslang_compile.h
@@ -108,8 +20,7 @@ set(sources
     spirv_processor.h
     spirv_disassemble.cpp
     spirv_stringise.cpp
-    var_dispatch_helpers.h
-    ${glslang_sources})
+    var_dispatch_helpers.h)
 
 add_definitions(-DAMD_EXTENSIONS)
 add_definitions(-DNV_EXTENSIONS)
diff --git a/renderdoc/driver/shaders/spirv/glslang_compile.cpp b/renderdoc/driver/shaders/spirv/glslang_compile.cpp
index ee1b02c73..ec0db8345 100644
--- a/renderdoc/driver/shaders/spirv/glslang_compile.cpp
+++ b/renderdoc/driver/shaders/spirv/glslang_compile.cpp
@@ -29,8 +29,8 @@
 #undef min
 #undef max
 
-#include "glslang/glslang/Include/Types.h"
-#include "glslang/glslang/Public/ShaderLang.h"
+#include <glslang/Include/Types.h>
+#include <glslang/Public/ShaderLang.h>
 
 static bool glslang_inited = false;
 rdcarray<glslang::TShader *> *allocatedShaders = NULL;
@@ -129,6 +129,7 @@ static TBuiltInResource DefaultResources = {
     /*.maxTaskWorkGroupSizeY_NV =*/1,
     /*.maxTaskWorkGroupSizeZ_NV =*/1,
     /*.maxMeshViewCountNV =*/4,
+    /*.maxDualSourceDrawBuffersEXT =*/1,
 
     /*.limits*/
     {
diff --git a/renderdoc/driver/shaders/spirv/spirv_compile.cpp b/renderdoc/driver/shaders/spirv/spirv_compile.cpp
index a2cc2bec4..a494cc69d 100644
--- a/renderdoc/driver/shaders/spirv/spirv_compile.cpp
+++ b/renderdoc/driver/shaders/spirv/spirv_compile.cpp
@@ -31,8 +31,8 @@
 #undef min
 #undef max
 
-#include "glslang/SPIRV/GlslangToSpv.h"
-#include "glslang/glslang/Public/ShaderLang.h"
+#include <glslang/SPIRV/GlslangToSpv.h>
+#include <glslang/Public/ShaderLang.h>
 
 rdcstr rdcspv::Compile(const rdcspv::CompilationSettings &settings, const rdcarray<rdcstr> &sources,
                        rdcarray<uint32_t> &spirv)
-- 
2.35.1

