summarylogtreecommitdiffstats
path: root/shaderc-changes.patch
blob: 4524d53e642d4d92050a95b661ea2b04656c2227 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
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")