mirror of https://github.com/stenzek/duckstation
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			578 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Diff
		
	
			
		
		
	
	
			578 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Diff
		
	
diff --git a/CHANGES b/CHANGES
 | 
						|
index 5d3dd16..587b612 100644
 | 
						|
--- a/CHANGES
 | 
						|
+++ b/CHANGES
 | 
						|
@@ -4,7 +4,7 @@ v2024.1
 | 
						|
  - Update dependencies
 | 
						|
  - Propagate test/install options to Glslang
 | 
						|
 
 | 
						|
-v2024.0
 | 
						|
+v2024.0 2024-03-09
 | 
						|
  - Update dependencies
 | 
						|
  - Utilities:
 | 
						|
     - Use Python3 explicitly in utility scripts
 | 
						|
diff --git a/CMakeLists.txt b/CMakeLists.txt
 | 
						|
index ffcb54b..7c1a6d8 100644
 | 
						|
--- a/CMakeLists.txt
 | 
						|
+++ b/CMakeLists.txt
 | 
						|
@@ -117,6 +117,9 @@ if(MSVC)
 | 
						|
   endif()
 | 
						|
 endif(MSVC)
 | 
						|
 
 | 
						|
+if(NOT WIN32)
 | 
						|
+  add_definitions("-fvisibility=hidden")
 | 
						|
+endif()
 | 
						|
 
 | 
						|
 # Configure subdirectories.
 | 
						|
 # We depend on these for later projects, so they should come first.
 | 
						|
@@ -124,7 +127,6 @@ add_subdirectory(third_party)
 | 
						|
 
 | 
						|
 add_subdirectory(libshaderc_util)
 | 
						|
 add_subdirectory(libshaderc)
 | 
						|
-add_subdirectory(glslc)
 | 
						|
 if(${SHADERC_ENABLE_EXAMPLES})
 | 
						|
     add_subdirectory(examples)
 | 
						|
 endif()
 | 
						|
@@ -158,5 +160,3 @@ function(define_pkg_config_file NAME LIBS)
 | 
						|
 endfunction()
 | 
						|
 
 | 
						|
 define_pkg_config_file(shaderc -lshaderc_shared)
 | 
						|
-define_pkg_config_file(shaderc_static "-lshaderc ${EXTRA_STATIC_PKGCONFIG_LIBS} -lshaderc_util")
 | 
						|
-define_pkg_config_file(shaderc_combined -lshaderc_combined)
 | 
						|
diff --git a/libshaderc/CMakeLists.txt b/libshaderc/CMakeLists.txt
 | 
						|
index df9a88d..b15e5d7 100644
 | 
						|
--- a/libshaderc/CMakeLists.txt
 | 
						|
+++ b/libshaderc/CMakeLists.txt
 | 
						|
@@ -24,13 +24,6 @@ set(SHADERC_SOURCES
 | 
						|
   src/shaderc_private.h
 | 
						|
 )
 | 
						|
 
 | 
						|
-add_library(shaderc STATIC ${SHADERC_SOURCES})
 | 
						|
-shaderc_default_compile_options(shaderc)
 | 
						|
-target_include_directories(shaderc
 | 
						|
-    PUBLIC include
 | 
						|
-    PRIVATE ${glslang_SOURCE_DIR}
 | 
						|
-            ${SPIRV-Headers_SOURCE_DIR}/include)
 | 
						|
-
 | 
						|
 add_library(shaderc_shared SHARED ${SHADERC_SOURCES})
 | 
						|
 shaderc_default_compile_options(shaderc_shared)
 | 
						|
 target_include_directories(shaderc_shared
 | 
						|
@@ -54,7 +47,7 @@ if(SHADERC_ENABLE_INSTALL)
 | 
						|
     DESTINATION
 | 
						|
       ${CMAKE_INSTALL_INCLUDEDIR}/shaderc)
 | 
						|
 
 | 
						|
-  install(TARGETS shaderc shaderc_shared
 | 
						|
+  install(TARGETS shaderc_shared
 | 
						|
     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
 | 
						|
     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
 | 
						|
     BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}
 | 
						|
@@ -69,20 +62,8 @@ set(SHADERC_LIBS
 | 
						|
   SPIRV-Tools
 | 
						|
 )
 | 
						|
 
 | 
						|
-target_link_libraries(shaderc PRIVATE ${SHADERC_LIBS})
 | 
						|
 target_link_libraries(shaderc_shared PRIVATE ${SHADERC_LIBS})
 | 
						|
 
 | 
						|
-shaderc_add_tests(
 | 
						|
-  TEST_PREFIX shaderc
 | 
						|
-  LINK_LIBS shaderc
 | 
						|
-  INCLUDE_DIRS include ${shaderc_SOURCE_DIR}/libshaderc_util/include ${glslang_SOURCE_DIR}
 | 
						|
-               ${spirv-tools_SOURCE_DIR}/include
 | 
						|
-               ${SPIRV-Headers_SOURCE_DIR}/include
 | 
						|
-  TEST_NAMES
 | 
						|
-    shaderc
 | 
						|
-    shaderc_cpp
 | 
						|
-    shaderc_private)
 | 
						|
-
 | 
						|
 shaderc_add_tests(
 | 
						|
   TEST_PREFIX shaderc_shared
 | 
						|
   LINK_LIBS shaderc_shared SPIRV-Tools
 | 
						|
@@ -94,22 +75,6 @@ shaderc_add_tests(
 | 
						|
     shaderc_cpp
 | 
						|
     shaderc_private)
 | 
						|
 
 | 
						|
-shaderc_combine_static_lib(shaderc_combined shaderc)
 | 
						|
-
 | 
						|
-if(SHADERC_ENABLE_INSTALL)
 | 
						|
-  install(TARGETS shaderc_combined DESTINATION ${CMAKE_INSTALL_LIBDIR})
 | 
						|
-endif(SHADERC_ENABLE_INSTALL)
 | 
						|
-
 | 
						|
-shaderc_add_tests(
 | 
						|
-  TEST_PREFIX shaderc_combined
 | 
						|
-  LINK_LIBS shaderc_combined ${CMAKE_THREAD_LIBS_INIT}
 | 
						|
-  INCLUDE_DIRS include ${shaderc_SOURCE_DIR}/libshaderc_util/include ${glslang_SOURCE_DIR}
 | 
						|
-               ${spirv-tools_SOURCE_DIR}/include
 | 
						|
-               ${SPIRV-Headers_SOURCE_DIR}/include
 | 
						|
-  TEST_NAMES
 | 
						|
-    shaderc
 | 
						|
-    shaderc_cpp)
 | 
						|
-
 | 
						|
 if(${SHADERC_ENABLE_TESTS})
 | 
						|
   add_executable(shaderc_c_smoke_test ./src/shaderc_c_smoke_test.c)
 | 
						|
   shaderc_default_c_compile_options(shaderc_c_smoke_test)
 | 
						|
diff --git a/libshaderc/include/shaderc/shaderc.h b/libshaderc/include/shaderc/shaderc.h
 | 
						|
index 3a3e97d..65d5b77 100644
 | 
						|
--- a/libshaderc/include/shaderc/shaderc.h
 | 
						|
+++ b/libshaderc/include/shaderc/shaderc.h
 | 
						|
@@ -317,7 +317,7 @@ SHADERC_EXPORT void shaderc_compile_options_set_source_language(
 | 
						|
 
 | 
						|
 // Sets the compiler mode to generate debug information in the output.
 | 
						|
 SHADERC_EXPORT void shaderc_compile_options_set_generate_debug_info(
 | 
						|
-    shaderc_compile_options_t options);
 | 
						|
+    shaderc_compile_options_t options, bool enabled, bool enable_non_semantic);
 | 
						|
 
 | 
						|
 // Sets the compiler optimization level to the given level. Only the last one
 | 
						|
 // takes effect if multiple calls of this function exist.
 | 
						|
@@ -506,6 +506,10 @@ SHADERC_EXPORT void shaderc_compile_options_set_invert_y(
 | 
						|
 SHADERC_EXPORT void shaderc_compile_options_set_nan_clamp(
 | 
						|
     shaderc_compile_options_t options, bool enable);
 | 
						|
 
 | 
						|
+// Returns a string representation of the specified compilation status.
 | 
						|
+SHADERC_EXPORT const char* shaderc_compilation_status_to_string(
 | 
						|
+    shaderc_compilation_status status);
 | 
						|
+
 | 
						|
 // An opaque handle to the results of a call to any shaderc_compile_into_*()
 | 
						|
 // function.
 | 
						|
 typedef struct shaderc_compilation_result* shaderc_compilation_result_t;
 | 
						|
@@ -529,28 +533,31 @@ typedef struct shaderc_compilation_result* shaderc_compilation_result_t;
 | 
						|
 // present.  May be safely called from multiple threads without explicit
 | 
						|
 // synchronization. If there was failure in allocating the compiler object,
 | 
						|
 // null will be returned.
 | 
						|
-SHADERC_EXPORT shaderc_compilation_result_t shaderc_compile_into_spv(
 | 
						|
+SHADERC_EXPORT shaderc_compilation_status shaderc_compile_into_spv(
 | 
						|
     const shaderc_compiler_t compiler, const char* source_text,
 | 
						|
     size_t source_text_size, shaderc_shader_kind shader_kind,
 | 
						|
     const char* input_file_name, const char* entry_point_name,
 | 
						|
-    const shaderc_compile_options_t additional_options);
 | 
						|
+    const shaderc_compile_options_t additional_options,
 | 
						|
+    shaderc_compilation_result_t* result);
 | 
						|
 
 | 
						|
 // Like shaderc_compile_into_spv, but the result contains SPIR-V assembly text
 | 
						|
 // instead of a SPIR-V binary module.  The SPIR-V assembly syntax is as defined
 | 
						|
 // by the SPIRV-Tools open source project.
 | 
						|
-SHADERC_EXPORT shaderc_compilation_result_t shaderc_compile_into_spv_assembly(
 | 
						|
+SHADERC_EXPORT shaderc_compilation_status shaderc_compile_into_spv_assembly(
 | 
						|
     const shaderc_compiler_t compiler, const char* source_text,
 | 
						|
     size_t source_text_size, shaderc_shader_kind shader_kind,
 | 
						|
     const char* input_file_name, const char* entry_point_name,
 | 
						|
-    const shaderc_compile_options_t additional_options);
 | 
						|
+    const shaderc_compile_options_t additional_options,
 | 
						|
+    shaderc_compilation_result_t* result);
 | 
						|
 
 | 
						|
 // Like shaderc_compile_into_spv, but the result contains preprocessed source
 | 
						|
 // code instead of a SPIR-V binary module
 | 
						|
-SHADERC_EXPORT shaderc_compilation_result_t shaderc_compile_into_preprocessed_text(
 | 
						|
+SHADERC_EXPORT shaderc_compilation_status shaderc_compile_into_preprocessed_text(
 | 
						|
     const shaderc_compiler_t compiler, const char* source_text,
 | 
						|
     size_t source_text_size, shaderc_shader_kind shader_kind,
 | 
						|
     const char* input_file_name, const char* entry_point_name,
 | 
						|
-    const shaderc_compile_options_t additional_options);
 | 
						|
+    const shaderc_compile_options_t additional_options,
 | 
						|
+    shaderc_compilation_result_t* result);
 | 
						|
 
 | 
						|
 // Takes an assembly string of the format defined in the SPIRV-Tools project
 | 
						|
 // (https://github.com/KhronosGroup/SPIRV-Tools/blob/master/syntax.md),
 | 
						|
@@ -561,10 +568,11 @@ SHADERC_EXPORT shaderc_compilation_result_t shaderc_compile_into_preprocessed_te
 | 
						|
 // May be safely called from multiple threads without explicit synchronization.
 | 
						|
 // If there was failure in allocating the compiler object, null will be
 | 
						|
 // returned.
 | 
						|
-SHADERC_EXPORT shaderc_compilation_result_t shaderc_assemble_into_spv(
 | 
						|
+SHADERC_EXPORT shaderc_compilation_status shaderc_assemble_into_spv(
 | 
						|
     const shaderc_compiler_t compiler, const char* source_assembly,
 | 
						|
     size_t source_assembly_size,
 | 
						|
-    const shaderc_compile_options_t additional_options);
 | 
						|
+    const shaderc_compile_options_t additional_options,
 | 
						|
+    shaderc_compilation_result_t* result);
 | 
						|
 
 | 
						|
 // The following functions, operating on shaderc_compilation_result_t objects,
 | 
						|
 // offer only the basic thread-safety guarantee.
 | 
						|
diff --git a/libshaderc/include/shaderc/shaderc.hpp b/libshaderc/include/shaderc/shaderc.hpp
 | 
						|
index 3817af8..5592b49 100644
 | 
						|
--- a/libshaderc/include/shaderc/shaderc.hpp
 | 
						|
+++ b/libshaderc/include/shaderc/shaderc.hpp
 | 
						|
@@ -168,8 +168,9 @@ class CompileOptions {
 | 
						|
   }
 | 
						|
 
 | 
						|
   // Sets the compiler mode to generate debug information in the output.
 | 
						|
-  void SetGenerateDebugInfo() {
 | 
						|
-    shaderc_compile_options_set_generate_debug_info(options_);
 | 
						|
+  void SetGenerateDebugInfo(bool enabled, bool non_semantic_debug_info) {
 | 
						|
+    shaderc_compile_options_set_generate_debug_info(options_, enabled,
 | 
						|
+      non_sematic_debug_info);
 | 
						|
   }
 | 
						|
 
 | 
						|
   // Sets the compiler optimization level to the given level. Only the last one
 | 
						|
@@ -425,9 +426,10 @@ class Compiler {
 | 
						|
                                         const char* input_file_name,
 | 
						|
                                         const char* entry_point_name,
 | 
						|
                                         const CompileOptions& options) const {
 | 
						|
-    shaderc_compilation_result_t compilation_result = shaderc_compile_into_spv(
 | 
						|
+    shaderc_compilation_result_t compilation_result = nullptr;
 | 
						|
+    shaderc_compile_into_spv(
 | 
						|
         compiler_, source_text, source_text_size, shader_kind, input_file_name,
 | 
						|
-        entry_point_name, options.options_);
 | 
						|
+        entry_point_name, options.options_, &compilation_result);
 | 
						|
     return SpvCompilationResult(compilation_result);
 | 
						|
   }
 | 
						|
 
 | 
						|
@@ -451,9 +453,10 @@ class Compiler {
 | 
						|
                                         size_t source_text_size,
 | 
						|
                                         shaderc_shader_kind shader_kind,
 | 
						|
                                         const char* input_file_name) const {
 | 
						|
-    shaderc_compilation_result_t compilation_result =
 | 
						|
-        shaderc_compile_into_spv(compiler_, source_text, source_text_size,
 | 
						|
-                                 shader_kind, input_file_name, "main", nullptr);
 | 
						|
+    shaderc_compilation_result_t compilation_result = nullptr;
 | 
						|
+    shaderc_compile_into_spv(compiler_, source_text, source_text_size,
 | 
						|
+                             shader_kind, input_file_name, "main", nullptr,
 | 
						|
+                             &compilation_result);
 | 
						|
     return SpvCompilationResult(compilation_result);
 | 
						|
   }
 | 
						|
 
 | 
						|
@@ -504,8 +507,11 @@ class Compiler {
 | 
						|
   SpvCompilationResult AssembleToSpv(const char* source_assembly,
 | 
						|
                                      size_t source_assembly_size,
 | 
						|
                                      const CompileOptions& options) const {
 | 
						|
-    return SpvCompilationResult(shaderc_assemble_into_spv(
 | 
						|
-        compiler_, source_assembly, source_assembly_size, options.options_));
 | 
						|
+    shaderc_compilation_result_t compilation_result = nullptr;
 | 
						|
+    shaderc_assemble_into_spv(
 | 
						|
+        compiler_, source_assembly, source_assembly_size, options.options_,
 | 
						|
+        &compilation_result);
 | 
						|
+    return SpvCompilationResult(compilation_result);
 | 
						|
   }
 | 
						|
 
 | 
						|
   // Assembles the given SPIR-V assembly and returns a SPIR-V binary module
 | 
						|
@@ -513,8 +519,11 @@ class Compiler {
 | 
						|
   // Like the first AssembleToSpv method but uses the default compiler options.
 | 
						|
   SpvCompilationResult AssembleToSpv(const char* source_assembly,
 | 
						|
                                      size_t source_assembly_size) const {
 | 
						|
-    return SpvCompilationResult(shaderc_assemble_into_spv(
 | 
						|
-        compiler_, source_assembly, source_assembly_size, nullptr));
 | 
						|
+    shaderc_compilation_result_t compilation_result = nullptr;
 | 
						|
+    shaderc_assemble_into_spv(
 | 
						|
+        compiler_, source_assembly, source_assembly_size, nullptr,
 | 
						|
+        &compilation_result);
 | 
						|
+    return SpvCompilationResult(compilation_result);
 | 
						|
   }
 | 
						|
 
 | 
						|
   // Assembles the given SPIR-V assembly and returns a SPIR-V binary module
 | 
						|
@@ -523,9 +532,11 @@ class Compiler {
 | 
						|
   // std::string.
 | 
						|
   SpvCompilationResult AssembleToSpv(const std::string& source_assembly,
 | 
						|
                                      const CompileOptions& options) const {
 | 
						|
-    return SpvCompilationResult(
 | 
						|
-        shaderc_assemble_into_spv(compiler_, source_assembly.data(),
 | 
						|
-                                  source_assembly.size(), options.options_));
 | 
						|
+    shaderc_compilation_result_t compilation_result = nullptr;
 | 
						|
+    shaderc_assemble_into_spv(
 | 
						|
+      compiler_, source_assembly.data(), source_assembly.size(),
 | 
						|
+      options.options_, &compilation_result);
 | 
						|
+    return SpvCompilationResult(compilation_result);
 | 
						|
   }
 | 
						|
 
 | 
						|
   // Assembles the given SPIR-V assembly and returns a SPIR-V binary module
 | 
						|
@@ -533,8 +544,10 @@ class Compiler {
 | 
						|
   // Like the first AssembleToSpv method but the source is provided as a
 | 
						|
   // std::string and also uses default compiler options.
 | 
						|
   SpvCompilationResult AssembleToSpv(const std::string& source_assembly) const {
 | 
						|
-    return SpvCompilationResult(shaderc_assemble_into_spv(
 | 
						|
-        compiler_, source_assembly.data(), source_assembly.size(), nullptr));
 | 
						|
+    shaderc_compilation_result_t compilation_result = nullptr;
 | 
						|
+    shaderc_assemble_into_spv(compiler_, source_assembly.data(),
 | 
						|
+      source_assembly.size(), nullptr, &compilation_result);
 | 
						|
+    return SpvCompilationResult(compilation_result);
 | 
						|
   }
 | 
						|
 
 | 
						|
   // Compiles the given source GLSL and returns the SPIR-V assembly text
 | 
						|
@@ -544,10 +557,11 @@ class Compiler {
 | 
						|
       const char* source_text, size_t source_text_size,
 | 
						|
       shaderc_shader_kind shader_kind, const char* input_file_name,
 | 
						|
       const char* entry_point_name, const CompileOptions& options) const {
 | 
						|
-    shaderc_compilation_result_t compilation_result =
 | 
						|
-        shaderc_compile_into_spv_assembly(
 | 
						|
-            compiler_, source_text, source_text_size, shader_kind,
 | 
						|
-            input_file_name, entry_point_name, options.options_);
 | 
						|
+    shaderc_compilation_result_t compilation_result = nullptr;
 | 
						|
+    shaderc_compile_into_spv_assembly(
 | 
						|
+        compiler_, source_text, source_text_size, shader_kind,
 | 
						|
+        input_file_name, entry_point_name, options.options_,
 | 
						|
+        &compilation_result);
 | 
						|
     return AssemblyCompilationResult(compilation_result);
 | 
						|
   }
 | 
						|
 
 | 
						|
@@ -592,10 +606,10 @@ class Compiler {
 | 
						|
       const char* source_text, size_t source_text_size,
 | 
						|
       shaderc_shader_kind shader_kind, const char* input_file_name,
 | 
						|
       const CompileOptions& options) const {
 | 
						|
-    shaderc_compilation_result_t compilation_result =
 | 
						|
-        shaderc_compile_into_preprocessed_text(
 | 
						|
+    shaderc_compilation_result_t compilation_result;
 | 
						|
+    shaderc_compile_into_preprocessed_text(
 | 
						|
             compiler_, source_text, source_text_size, shader_kind,
 | 
						|
-            input_file_name, "main", options.options_);
 | 
						|
+            input_file_name, "main", options.options_, &compilation_result);
 | 
						|
     return PreprocessedSourceCompilationResult(compilation_result);
 | 
						|
   }
 | 
						|
 
 | 
						|
diff --git a/libshaderc/src/shaderc.cc b/libshaderc/src/shaderc.cc
 | 
						|
index 63f1bbc..c1a9b12 100644
 | 
						|
--- a/libshaderc/src/shaderc.cc
 | 
						|
+++ b/libshaderc/src/shaderc.cc
 | 
						|
@@ -418,8 +418,12 @@ void shaderc_compile_options_set_source_language(
 | 
						|
 }
 | 
						|
 
 | 
						|
 void shaderc_compile_options_set_generate_debug_info(
 | 
						|
-    shaderc_compile_options_t options) {
 | 
						|
-  options->compiler.SetGenerateDebugInfo();
 | 
						|
+    shaderc_compile_options_t options, bool enabled, bool enable_non_semantic) {
 | 
						|
+  if (enabled) {
 | 
						|
+    options->compiler.SetGenerateDebugInfo();
 | 
						|
+    if (enable_non_semantic)
 | 
						|
+      options->compiler.SetEmitNonSemanticDebugInfo();
 | 
						|
+  }
 | 
						|
 }
 | 
						|
 
 | 
						|
 void shaderc_compile_options_set_optimization_level(
 | 
						|
@@ -591,8 +595,31 @@ void shaderc_compiler_release(shaderc_compiler_t compiler) {
 | 
						|
   delete compiler;
 | 
						|
 }
 | 
						|
 
 | 
						|
+const char* shaderc_compilation_status_to_string(shaderc_compilation_status status)
 | 
						|
+{
 | 
						|
+  static constexpr const std::pair<shaderc_compilation_status, const char*> status_names[] = {
 | 
						|
+    {shaderc_compilation_status_success, "shaderc_compilation_status_success"},
 | 
						|
+    {shaderc_compilation_status_invalid_stage, "shaderc_compilation_status_invalid_stage"},
 | 
						|
+    {shaderc_compilation_status_compilation_error, "shaderc_compilation_status_compilation_error"},
 | 
						|
+    {shaderc_compilation_status_internal_error, "shaderc_compilation_status_internal_error"},
 | 
						|
+    {shaderc_compilation_status_null_result_object, "shaderc_compilation_status_null_result_object"},
 | 
						|
+    {shaderc_compilation_status_invalid_assembly, "shaderc_compilation_status_invalid_assembly"},
 | 
						|
+    {shaderc_compilation_status_validation_error, "shaderc_compilation_status_validation_error"},
 | 
						|
+    {shaderc_compilation_status_transformation_error, "shaderc_compilation_status_transformation_error"},
 | 
						|
+    {shaderc_compilation_status_configuration_error, "shaderc_compilation_status_configuration_error"},
 | 
						|
+  };
 | 
						|
+
 | 
						|
+  for (const auto& it : status_names)
 | 
						|
+  {
 | 
						|
+    if (status == it.first)
 | 
						|
+      return it.second;
 | 
						|
+  }
 | 
						|
+
 | 
						|
+  return "shaderc_compilation_status_unknown";
 | 
						|
+}
 | 
						|
+
 | 
						|
 namespace {
 | 
						|
-shaderc_compilation_result_t CompileToSpecifiedOutputType(
 | 
						|
+shaderc_compilation_result_vector* CompileToSpecifiedOutputType(
 | 
						|
     const shaderc_compiler_t compiler, const char* source_text,
 | 
						|
     size_t source_text_size, shaderc_shader_kind shader_kind,
 | 
						|
     const char* input_file_name, const char* entry_point_name,
 | 
						|
@@ -669,48 +696,59 @@ shaderc_compilation_result_t CompileToSpecifiedOutputType(
 | 
						|
 }
 | 
						|
 }  // anonymous namespace
 | 
						|
 
 | 
						|
-shaderc_compilation_result_t shaderc_compile_into_spv(
 | 
						|
+shaderc_compilation_status shaderc_compile_into_spv(
 | 
						|
     const shaderc_compiler_t compiler, const char* source_text,
 | 
						|
     size_t source_text_size, shaderc_shader_kind shader_kind,
 | 
						|
     const char* input_file_name, const char* entry_point_name,
 | 
						|
-    const shaderc_compile_options_t additional_options) {
 | 
						|
-  return CompileToSpecifiedOutputType(
 | 
						|
+    const shaderc_compile_options_t additional_options,
 | 
						|
+    shaderc_compilation_result_t* result) {
 | 
						|
+  shaderc_compilation_result_vector* resultv = CompileToSpecifiedOutputType(
 | 
						|
       compiler, source_text, source_text_size, shader_kind, input_file_name,
 | 
						|
       entry_point_name, additional_options,
 | 
						|
       shaderc_util::Compiler::OutputType::SpirvBinary);
 | 
						|
+  *result = resultv;
 | 
						|
+  return resultv ? resultv->compilation_status : shaderc_compilation_status_internal_error;
 | 
						|
 }
 | 
						|
 
 | 
						|
-shaderc_compilation_result_t shaderc_compile_into_spv_assembly(
 | 
						|
+shaderc_compilation_status shaderc_compile_into_spv_assembly(
 | 
						|
     const shaderc_compiler_t compiler, const char* source_text,
 | 
						|
     size_t source_text_size, shaderc_shader_kind shader_kind,
 | 
						|
     const char* input_file_name, const char* entry_point_name,
 | 
						|
-    const shaderc_compile_options_t additional_options) {
 | 
						|
-  return CompileToSpecifiedOutputType(
 | 
						|
+    const shaderc_compile_options_t additional_options,
 | 
						|
+    shaderc_compilation_result_t* result) {
 | 
						|
+  shaderc_compilation_result_vector* resultv = CompileToSpecifiedOutputType(
 | 
						|
       compiler, source_text, source_text_size, shader_kind, input_file_name,
 | 
						|
       entry_point_name, additional_options,
 | 
						|
       shaderc_util::Compiler::OutputType::SpirvAssemblyText);
 | 
						|
+  *result = resultv;
 | 
						|
+  return resultv ? resultv->compilation_status : shaderc_compilation_status_internal_error;
 | 
						|
 }
 | 
						|
 
 | 
						|
-shaderc_compilation_result_t shaderc_compile_into_preprocessed_text(
 | 
						|
+shaderc_compilation_status shaderc_compile_into_preprocessed_text(
 | 
						|
     const shaderc_compiler_t compiler, const char* source_text,
 | 
						|
     size_t source_text_size, shaderc_shader_kind shader_kind,
 | 
						|
     const char* input_file_name, const char* entry_point_name,
 | 
						|
-    const shaderc_compile_options_t additional_options) {
 | 
						|
-  return CompileToSpecifiedOutputType(
 | 
						|
+    const shaderc_compile_options_t additional_options,
 | 
						|
+    shaderc_compilation_result_t* result) {
 | 
						|
+  shaderc_compilation_result_vector* resultv = CompileToSpecifiedOutputType(
 | 
						|
       compiler, source_text, source_text_size, shader_kind, input_file_name,
 | 
						|
       entry_point_name, additional_options,
 | 
						|
       shaderc_util::Compiler::OutputType::PreprocessedText);
 | 
						|
+  *result = resultv;
 | 
						|
+  return resultv ? resultv->compilation_status : shaderc_compilation_status_internal_error;
 | 
						|
 }
 | 
						|
 
 | 
						|
-shaderc_compilation_result_t shaderc_assemble_into_spv(
 | 
						|
+shaderc_compilation_status shaderc_assemble_into_spv(
 | 
						|
     const shaderc_compiler_t compiler, const char* source_assembly,
 | 
						|
     size_t source_assembly_size,
 | 
						|
-    const shaderc_compile_options_t additional_options) {
 | 
						|
-  auto* result = new (std::nothrow) shaderc_compilation_result_spv_binary;
 | 
						|
-  if (!result) return nullptr;
 | 
						|
-  result->compilation_status = shaderc_compilation_status_invalid_assembly;
 | 
						|
-  if (!compiler->initializer) return result;
 | 
						|
-  if (source_assembly == nullptr) return result;
 | 
						|
+    const shaderc_compile_options_t additional_options,
 | 
						|
+    shaderc_compilation_result_t* result) {
 | 
						|
+  auto* bresult = new (std::nothrow) shaderc_compilation_result_spv_binary;
 | 
						|
+  if (!bresult) return shaderc_compilation_status_internal_error;
 | 
						|
+  bresult->compilation_status = shaderc_compilation_status_invalid_assembly;
 | 
						|
+  *result = bresult;
 | 
						|
+  if (!compiler->initializer) return bresult->compilation_status;
 | 
						|
+  if (source_assembly == nullptr) return bresult->compilation_status;
 | 
						|
 
 | 
						|
   TRY_IF_EXCEPTIONS_ENABLED {
 | 
						|
     spv_binary assembling_output_data = nullptr;
 | 
						|
@@ -724,22 +762,22 @@ shaderc_compilation_result_t shaderc_assemble_into_spv(
 | 
						|
         GetCompilerTargetEnvVersion(target_env_version),
 | 
						|
         {source_assembly, source_assembly + source_assembly_size},
 | 
						|
         &assembling_output_data, &errors);
 | 
						|
-    result->num_errors = !assembling_succeeded;
 | 
						|
+    bresult->num_errors = !assembling_succeeded;
 | 
						|
     if (assembling_succeeded) {
 | 
						|
-      result->SetOutputData(assembling_output_data);
 | 
						|
-      result->output_data_size =
 | 
						|
+      bresult->SetOutputData(assembling_output_data);
 | 
						|
+      bresult->output_data_size =
 | 
						|
           assembling_output_data->wordCount * sizeof(uint32_t);
 | 
						|
-      result->compilation_status = shaderc_compilation_status_success;
 | 
						|
+      bresult->compilation_status = shaderc_compilation_status_success;
 | 
						|
     } else {
 | 
						|
-      result->messages = std::move(errors);
 | 
						|
-      result->compilation_status = shaderc_compilation_status_invalid_assembly;
 | 
						|
+      bresult->messages = std::move(errors);
 | 
						|
+      bresult->compilation_status = shaderc_compilation_status_invalid_assembly;
 | 
						|
     }
 | 
						|
   }
 | 
						|
   CATCH_IF_EXCEPTIONS_ENABLED(...) {
 | 
						|
-    result->compilation_status = shaderc_compilation_status_internal_error;
 | 
						|
+    bresult->compilation_status = shaderc_compilation_status_internal_error;
 | 
						|
   }
 | 
						|
 
 | 
						|
-  return result;
 | 
						|
+  return bresult->compilation_status;
 | 
						|
 }
 | 
						|
 
 | 
						|
 size_t shaderc_result_get_length(const shaderc_compilation_result_t result) {
 | 
						|
diff --git a/libshaderc_util/include/libshaderc_util/compiler.h b/libshaderc_util/include/libshaderc_util/compiler.h
 | 
						|
index d9d02b9..b076ec8 100644
 | 
						|
--- a/libshaderc_util/include/libshaderc_util/compiler.h
 | 
						|
+++ b/libshaderc_util/include/libshaderc_util/compiler.h
 | 
						|
@@ -195,6 +195,7 @@ class Compiler {
 | 
						|
         warnings_as_errors_(false),
 | 
						|
         suppress_warnings_(false),
 | 
						|
         generate_debug_info_(false),
 | 
						|
+        emit_non_semantic_debug_info_(false),
 | 
						|
         enabled_opt_passes_(),
 | 
						|
         target_env_(TargetEnv::Vulkan),
 | 
						|
         target_env_version_(TargetEnvVersion::Default),
 | 
						|
@@ -220,6 +221,10 @@ class Compiler {
 | 
						|
   // such as identifier names and line numbers.
 | 
						|
   void SetGenerateDebugInfo();
 | 
						|
 
 | 
						|
+  // Requests that the compiler emit non-semantic debug information.
 | 
						|
+  // Requires VK_KHR_shader_non_semantic_info.
 | 
						|
+  void SetEmitNonSemanticDebugInfo();
 | 
						|
+
 | 
						|
   // Sets the optimization level to the given level. Only the last one takes
 | 
						|
   // effect if multiple calls of this method exist.
 | 
						|
   void SetOptimizationLevel(OptimizationLevel level);
 | 
						|
@@ -486,6 +491,10 @@ class Compiler {
 | 
						|
   // output.
 | 
						|
   bool generate_debug_info_;
 | 
						|
 
 | 
						|
+  // When true and generate_debug_info_ is also set, generate non-semantic debug
 | 
						|
+  // information.
 | 
						|
+  bool emit_non_semantic_debug_info_;
 | 
						|
+
 | 
						|
   // Optimization passes to be applied.
 | 
						|
   std::vector<PassId> enabled_opt_passes_;
 | 
						|
 
 | 
						|
diff --git a/libshaderc_util/src/compiler.cc b/libshaderc_util/src/compiler.cc
 | 
						|
index e5f5d10..1f9e6a5 100644
 | 
						|
--- a/libshaderc_util/src/compiler.cc
 | 
						|
+++ b/libshaderc_util/src/compiler.cc
 | 
						|
@@ -341,6 +341,11 @@ std::tuple<bool, std::vector<uint32_t>, size_t> Compiler::Compile(
 | 
						|
   options.generateDebugInfo = generate_debug_info_;
 | 
						|
   options.disableOptimizer = true;
 | 
						|
   options.optimizeSize = false;
 | 
						|
+  options.emitNonSemanticShaderDebugInfo =
 | 
						|
+      generate_debug_info_ && emit_non_semantic_debug_info_;
 | 
						|
+  options.emitNonSemanticShaderDebugSource =
 | 
						|
+      generate_debug_info_ && emit_non_semantic_debug_info_;
 | 
						|
+
 | 
						|
   // Note the call to GlslangToSpv also populates compilation_output_data.
 | 
						|
   glslang::GlslangToSpv(*program.getIntermediate(used_shader_stage), spirv,
 | 
						|
                         &options);
 | 
						|
@@ -438,6 +443,10 @@ void Compiler::SetGenerateDebugInfo() {
 | 
						|
   }
 | 
						|
 }
 | 
						|
 
 | 
						|
+void Compiler::SetEmitNonSemanticDebugInfo() {
 | 
						|
+  emit_non_semantic_debug_info_ = true;
 | 
						|
+}
 | 
						|
+
 | 
						|
 void Compiler::SetOptimizationLevel(Compiler::OptimizationLevel level) {
 | 
						|
   // Clear previous settings first.
 | 
						|
   enabled_opt_passes_.clear();
 | 
						|
diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt
 | 
						|
index d44f62a..83966b6 100644
 | 
						|
--- a/third_party/CMakeLists.txt
 | 
						|
+++ b/third_party/CMakeLists.txt
 | 
						|
@@ -20,9 +20,9 @@ set(SHADERC_TINT_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/tint" CACHE STRING
 | 
						|
 set(SHADERC_ABSL_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/abseil_cpp" CACHE STRING
 | 
						|
   "Location of re2 source")
 | 
						|
 
 | 
						|
-set( SKIP_GLSLANG_INSTALL ${SHADERC_SKIP_INSTALL} )
 | 
						|
-set( SKIP_SPIRV_TOOLS_INSTALL ${SHADERC_SKIP_INSTALL} )
 | 
						|
-set( SKIP_GOOGLETEST_INSTALL ${SHADERC_SKIP_INSTALL} )
 | 
						|
+set( SKIP_GLSLANG_INSTALL ON )
 | 
						|
+set( SKIP_SPIRV_TOOLS_INSTALL ON )
 | 
						|
+set( SKIP_GOOGLETEST_INSTALL ON )
 | 
						|
 
 | 
						|
 # Configure third party projects.
 | 
						|
 if(${SHADERC_ENABLE_TESTS})
 | 
						|
@@ -64,7 +64,10 @@ if (NOT TARGET SPIRV-Tools)
 | 
						|
       add_subdirectory(${SHADERC_RE2_DIR} re2)
 | 
						|
       add_subdirectory(${SHADERC_EFFCEE_DIR} effcee)
 | 
						|
     endif()
 | 
						|
-    add_subdirectory(${SHADERC_SPIRV_TOOLS_DIR} spirv-tools)
 | 
						|
+    set(SPIRV_SKIP_EXECUTABLES ON CACHE BOOL "Skip building SPIRV-Tools executables")
 | 
						|
+    set(SPIRV_TOOLS_BUILD_STATIC OFF CACHE BOOL "Skip building two SPIRV-Tools libs")
 | 
						|
+    set(SPIRV_TOOLS_LIBRARY_TYPE STATIC CACHE STRING "Build static SPIRV-Tools libs")
 | 
						|
+    add_subdirectory(${SHADERC_SPIRV_TOOLS_DIR} spirv-tools EXCLUDE_FROM_ALL)
 | 
						|
     if (NOT "${SPIRV_SKIP_TESTS}")
 | 
						|
       if (MSVC)
 | 
						|
         if (${MSVC_VERSION} LESS 1920)
 | 
						|
@@ -87,8 +90,8 @@ if (NOT TARGET glslang)
 | 
						|
       # Glslang tests are off by default. Turn them on if testing Shaderc.
 | 
						|
       set(GLSLANG_TESTS ON)
 | 
						|
     endif()
 | 
						|
-    set(GLSLANG_ENABLE_INSTALL $<NOT:${SKIP_GLSLANG_INSTALL}>)
 | 
						|
-    add_subdirectory(${SHADERC_GLSLANG_DIR} glslang)
 | 
						|
+    set(GLSLANG_ENABLE_INSTALL OFF)
 | 
						|
+    add_subdirectory(${SHADERC_GLSLANG_DIR} glslang EXCLUDE_FROM_ALL)
 | 
						|
   endif()
 | 
						|
   if (NOT TARGET glslang)
 | 
						|
     message(FATAL_ERROR "glslang was not found - required for compilation")
 |