Snap for 8518779 from 465ef8fe75f632361e799dc9f7c644daf1e343f5 to ndk-r25-release

Change-Id: I2f63e1b8c04d2d8d61721e2815dc309429fdf715
diff --git a/Android.mk b/Android.mk
index e1ad18a..147d959 100644
--- a/Android.mk
+++ b/Android.mk
@@ -52,8 +52,8 @@
 
 $(1)/libshaderc_combined.a: $(addprefix $(1)/, $(ALL_LIBS)) $(1)/combine.ar
 	@echo "[$(TARGET_ARCH_ABI)] Combine: libshaderc_combined.a <= $(ALL_LIBS)"
-	@cd $(1) && $(2)ar -M < combine.ar && cd $(ROOT_SHADERC_PATH)
-	@$(2)objcopy --strip-debug $(1)/libshaderc_combined.a
+	@cd $(1) && $(TARGET_AR) -M < combine.ar && cd $(ROOT_SHADERC_PATH)
+	@$(TARGET_STRIP) --strip-debug $(1)/libshaderc_combined.a
 
 $(NDK_APP_LIBS_OUT)/$(APP_STL)/$(TARGET_ARCH_ABI)/libshaderc.a: \
 		$(1)/libshaderc_combined.a
@@ -73,4 +73,4 @@
 
 libshaderc_combined: $(SHADERC_HEADERS_IN_OUT_DIR)
 
-$(eval $(call gen_libshaderc,$(TARGET_OUT),$(TOOLCHAIN_PREFIX)))
+$(eval $(call gen_libshaderc,$(TARGET_OUT)))
diff --git a/CHANGES b/CHANGES
index d68c626..e592214 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,21 @@
 Revision history for Shaderc
 
+v2022.1 2022-01-27
+ - Update DEPS to include two fixes on top of SPIRV-Tools v2022.1:
+    - Validator handles Nontemporal image operand
+    - Optimizer handles RayQueryKHR type
+
+v2022.0 2022-01-27
+ - Update to Glslang 11.8.0
+
+v2021.4 2022-01-27
+ - Support Vulkan 1.3
+ - Support targeting SPIR-V 1.6, which is the default for Vulkan 1.3
+ - Updated copyright check: Excludes Glslang generated files when
+   building in source tree
+ - Fix Android.mk rules for building libshaderc_combined, to adapt to more
+   recent NDKs that have removed the GNU binutils.
+
 v2021.3 2021-11-11
  - Add build switch to disable copyright check
  - Update DEPS:
diff --git a/DEPS b/DEPS
index 710a86e..15cf269 100644
--- a/DEPS
+++ b/DEPS
@@ -5,11 +5,11 @@
   'khronos_git': 'https://github.com/KhronosGroup',
 
   'effcee_revision' : '2ec8f8738118cc483b67c04a759fee53496c5659',
-  'glslang_revision': '600c5037baac82a80851d1fb95f3f09d34bb43e8',
+  'glslang_revision': 'c34bb3b6c55f6ab084124ad964be95a699700d34',
   'googletest_revision': '389cb68b87193358358ae87cc56d257fd0d80189',
   're2_revision': '7107ebc4fbf7205151d8d2a57b2fc6e7853125d4',
-  'spirv_headers_revision': '814e728b30ddd0f4509233099a3ad96fd4318c07',
-  'spirv_tools_revision': 'ab8eb607750208066e2d57eff6a34dbaf05f5ada',
+  'spirv_headers_revision': 'b42ba6d92faf6b4938e6f22ddd186dbdacc98d78',
+  'spirv_tools_revision': 'b846f8f1dc2d79f2b5ce27d5ad901f885da1cf82',
 }
 
 deps = {
diff --git a/README.md b/README.md
index 3048618..c262340 100644
--- a/README.md
+++ b/README.md
@@ -96,7 +96,6 @@
 git clone https://github.com/google/shaderc $SOURCE_DIR
 cd $SOURCE_DIR
 ./utils/git-sync-deps
-cd $SOURCE_DIR/
 ```
 
 **Note:** The [known-good](https://github.com/google/shaderc/tree/known-good)
diff --git a/glslc/README.asciidoc b/glslc/README.asciidoc
index 2d64820..ced28af 100644
--- a/glslc/README.asciidoc
+++ b/glslc/README.asciidoc
@@ -237,7 +237,7 @@
 * `opengl4.5`: create SPIR-V under OpenGL 4.5 semantics.
 
 Generated code uses SPIR-V 1.0, except for code compiled for Vulkan 1.1, which uses
-SPIR-V 1.3, and code compiled for Vulkan 1.5, which uses SPIR-V 1.5.
+SPIR-V 1.3, and code compiled for Vulkan 1.2, which uses SPIR-V 1.5.
 
 If this option is not specified, a default of `vulkan1.0` is used.
 
@@ -259,6 +259,7 @@
 * `spv1.3`
 * `spv1.4`
 * `spv1.5`
+* `spv1.6`
 
 ==== `-x`
 
diff --git a/glslc/src/main.cc b/glslc/src/main.cc
index 5ca5d61..54ae3ff 100644
--- a/glslc/src/main.cc
+++ b/glslc/src/main.cc
@@ -159,6 +159,7 @@
                         vulkan1.0       # The default
                         vulkan1.1
                         vulkan1.2
+                        vulkan1.3
                         vulkan          # Same as vulkan1.0
                         opengl4.5
                         opengl          # Same as opengl4.5
@@ -169,8 +170,9 @@
                     For example, default for vulkan1.0 is spv1.0, and
                     the default for vulkan1.1 is spv1.3,
                     the default for vulkan1.2 is spv1.5.
+                    the default for vulkan1.3 is spv1.6.
                     Values are:
-                        spv1.0, spv1.1, spv1.2, spv1.3, spv1.4, spv1.5
+                        spv1.0, spv1.1, spv1.2, spv1.3, spv1.4, spv1.5, spv1.6
   --version         Display compiler version information.
   -w                Suppresses all warning messages.
   -Werror           Treat all warnings as errors.
@@ -438,6 +440,9 @@
       } else if (target_env_str == "vulkan1.2") {
         target_env = shaderc_target_env_vulkan;
         version = shaderc_env_version_vulkan_1_2;
+      } else if (target_env_str == "vulkan1.3") {
+        target_env = shaderc_target_env_vulkan;
+        version = shaderc_env_version_vulkan_1_3;
       } else if (target_env_str == "opengl") {
         target_env = shaderc_target_env_opengl;
       } else if (target_env_str == "opengl4.5") {
@@ -470,6 +475,8 @@
         ver = shaderc_spirv_version_1_4;
       } else if (ver_str == "spv1.5") {
         ver = shaderc_spirv_version_1_5;
+      } else if (ver_str == "spv1.6") {
+        ver = shaderc_spirv_version_1_6;
       } else {
         std::cerr << "glslc: error: invalid value '" << ver_str
                   << "' in '--target-spv=" << ver_str << "'" << std::endl;
diff --git a/glslc/test/expect.py b/glslc/test/expect.py
index 7410f73..9ac54b2 100644
--- a/glslc/test/expect.py
+++ b/glslc/test/expect.py
@@ -312,6 +312,22 @@
         return True, ''
 
 
+class ValidObjectFile1_6(SuccessfulReturn, CorrectObjectFilePreamble):
+    """Mixin class for checking that every input file generates a valid SPIR-V 1.6
+    object file following the object file naming rule, and there is no output on
+    stdout/stderr."""
+
+    def check_object_file_preamble(self, status):
+        for input_filename in status.input_filenames:
+            object_filename = get_object_filename(input_filename)
+            success, message = self.verify_object_file_preamble(
+                os.path.join(status.directory, object_filename),
+                0x10600)
+            if not success:
+                return False, message
+        return True, ''
+
+
 class ValidObjectFileWithAssemblySubstr(SuccessfulReturn, CorrectObjectFilePreamble):
     """Mixin class for checking that every input file generates a valid object
     file following the object file naming rule, there is no output on
diff --git a/glslc/test/option_target_env.py b/glslc/test/option_target_env.py
index 4805581..91e6022 100644
--- a/glslc/test/option_target_env.py
+++ b/glslc/test/option_target_env.py
@@ -131,6 +131,16 @@
     glslc_args = ['--target-env=vulkan1.2', '-c', shader]
 
 @inside_glslc_testsuite('OptionTargetEnv')
+class TestTargetEnvEqVulkan1_2WithVulkan1_0ShaderSucceeds(expect.ValidObjectFile1_6):
+    shader = FileShader(vulkan_vertex_shader(), '.vert')
+    glslc_args = ['--target-env=vulkan1.3', '-c', shader]
+
+@inside_glslc_testsuite('OptionTargetEnv')
+class TestTargetEnvEqVulkan1_2WithVulkan1_1ShaderSucceeds(expect.ValidObjectFile1_6):
+    shader = FileShader(vulkan_compute_subgroup_shader(), '.comp')
+    glslc_args = ['--target-env=vulkan1.3', '-c', shader]
+
+@inside_glslc_testsuite('OptionTargetEnv')
 class TestTargetEnvEqOpenGL4_5WithOpenGLShaderSucceeds(expect.ValidObjectFile):
     shader = FileShader(opengl_vertex_shader(), '.vert')
     glslc_args = ['--target-env=opengl4.5', '-c', shader]
diff --git a/glslc/test/option_target_spv.py b/glslc/test/option_target_spv.py
index 870025b..86ad6f1 100644
--- a/glslc/test/option_target_spv.py
+++ b/glslc/test/option_target_spv.py
@@ -78,6 +78,13 @@
     glslc_args = ['--target-spv=spv1.5', '-c', shader]
 
 
+@inside_glslc_testsuite('OptionTargetSpv')
+class TestTargetSpv1p5(expect.ValidObjectFile1_6):
+    """Tests that compiling to spv1.6 succeeds and generates SPIR-V 1.6 binary."""
+    shader = FileShader(vulkan_vertex_shader(), '.vert')
+    glslc_args = ['--target-spv=spv1.6', '-c', shader]
+
+
 ### Option parsing error cases
 
 @inside_glslc_testsuite('OptionTargetSpv')
diff --git a/glslc/test/parameter_tests.py b/glslc/test/parameter_tests.py
index be011a1..ce41d8f 100644
--- a/glslc/test/parameter_tests.py
+++ b/glslc/test/parameter_tests.py
@@ -163,6 +163,7 @@
                         vulkan1.0       # The default
                         vulkan1.1
                         vulkan1.2
+                        vulkan1.3
                         vulkan          # Same as vulkan1.0
                         opengl4.5
                         opengl          # Same as opengl4.5
@@ -173,8 +174,9 @@
                     For example, default for vulkan1.0 is spv1.0, and
                     the default for vulkan1.1 is spv1.3,
                     the default for vulkan1.2 is spv1.5.
+                    the default for vulkan1.3 is spv1.6.
                     Values are:
-                        spv1.0, spv1.1, spv1.2, spv1.3, spv1.4, spv1.5
+                        spv1.0, spv1.1, spv1.2, spv1.3, spv1.4, spv1.5, spv1.6
   --version         Display compiler version information.
   -w                Suppresses all warning messages.
   -Werror           Treat all warnings as errors.
diff --git a/kokoro/linux/build-docker.sh b/kokoro/linux/build-docker.sh
index fb65f81..9687d0a 100755
--- a/kokoro/linux/build-docker.sh
+++ b/kokoro/linux/build-docker.sh
@@ -92,6 +92,9 @@
 fi
 echo $(date): ctest completed.
 
+# libshaderc_util/core is generated by the death test in shaderc_util_file_finder_test
+rm -f libshaderc_util/core
+
 # Package the build.
 ninja install
 cd $KOKORO_ARTIFACTS_DIR
diff --git a/kokoro/linux/build.sh b/kokoro/linux/build.sh
index 765a387..3e6375c 100755
--- a/kokoro/linux/build.sh
+++ b/kokoro/linux/build.sh
@@ -24,7 +24,10 @@
 CONFIG=$1
 COMPILER=$2
 
+# --privileged is required for some sanitizer builds, as they seem to require
+# PTRACE privileges
 docker run --rm -i \
+  --privileged \
   --volume "${ROOT_DIR}:${ROOT_DIR}" \
   --volume "${KOKORO_ARTIFACTS_DIR}:${KOKORO_ARTIFACTS_DIR}" \
   --workdir "${ROOT_DIR}" \
diff --git a/kokoro/ndk-build/build.sh b/kokoro/ndk-build/build.sh
index edf361c..0b9e124 100644
--- a/kokoro/ndk-build/build.sh
+++ b/kokoro/ndk-build/build.sh
@@ -44,13 +44,21 @@
 
 # Invoke the build.
 BUILD_SHA=${KOKORO_GITHUB_COMMIT:-$KOKORO_GITHUB_PULL_REQUEST_COMMIT}
-echo $(date): Starting ndk-build ...
-$ANDROID_NDK/ndk-build \
-  -C $SRC/android_test \
-  NDK_APP_OUT=`pwd` \
-  V=1 \
-  SPVTOOLS_LOCAL_PATH=$SRC/third_party/spirv-tools \
-  SPVHEADERS_LOCAL_PATH=$SRC/third_party/spirv-headers \
-  -j 8
+
+function do_ndk_build () {
+  echo $(date): Starting ndk-build $@...
+  $ANDROID_NDK/ndk-build \
+    -C $SRC/android_test \
+    NDK_APP_OUT=`pwd` \
+    V=1 \
+    SPVTOOLS_LOCAL_PATH=$SRC/third_party/spirv-tools \
+    SPVHEADERS_LOCAL_PATH=$SRC/third_party/spirv-headers \
+    -j 8 $@
+}
+
+do_ndk_build
+
+# Check that libshaderc_combined builds
+do_ndk_build libshaderc_combined
 
 echo $(date): ndk-build completed.
diff --git a/libshaderc/include/shaderc/env.h b/libshaderc/include/shaderc/env.h
index 5285b9e..14b418d 100644
--- a/libshaderc/include/shaderc/env.h
+++ b/libshaderc/include/shaderc/env.h
@@ -40,6 +40,7 @@
   shaderc_env_version_vulkan_1_0 = ((1u << 22)),
   shaderc_env_version_vulkan_1_1 = ((1u << 22) | (1 << 12)),
   shaderc_env_version_vulkan_1_2 = ((1u << 22) | (2 << 12)),
+  shaderc_env_version_vulkan_1_3 = ((1u << 22) | (3 << 12)),
   // For OpenGL, use the number from #version in shaders.
   // TODO(dneto): Currently no difference between OpenGL 4.5 and 4.6.
   // See glslang/Standalone/Standalone.cpp
@@ -60,7 +61,8 @@
   shaderc_spirv_version_1_2 = 0x010200u,
   shaderc_spirv_version_1_3 = 0x010300u,
   shaderc_spirv_version_1_4 = 0x010400u,
-  shaderc_spirv_version_1_5 = 0x010500u
+  shaderc_spirv_version_1_5 = 0x010500u,
+  shaderc_spirv_version_1_6 = 0x010600u
 } shaderc_spirv_version;
 
 #ifdef __cplusplus
diff --git a/libshaderc/src/shaderc.cc b/libshaderc/src/shaderc.cc
index 7fdd516..712f3dc 100644
--- a/libshaderc/src/shaderc.cc
+++ b/libshaderc/src/shaderc.cc
@@ -305,6 +305,10 @@
       version_number) {
     return Compiler::TargetEnvVersion::Vulkan_1_2;
   }
+  if (static_cast<uint32_t>(Compiler::TargetEnvVersion::Vulkan_1_3) ==
+      version_number) {
+    return Compiler::TargetEnvVersion::Vulkan_1_3;
+  }
   if (static_cast<uint32_t>(Compiler::TargetEnvVersion::OpenGL_4_5) ==
       version_number) {
     return Compiler::TargetEnvVersion::OpenGL_4_5;
diff --git a/libshaderc_util/include/libshaderc_util/compiler.h b/libshaderc_util/include/libshaderc_util/compiler.h
index bad5b6a..1a46f4e 100644
--- a/libshaderc_util/include/libshaderc_util/compiler.h
+++ b/libshaderc_util/include/libshaderc_util/compiler.h
@@ -85,6 +85,7 @@
     Vulkan_1_0 = ((1 << 22)),              // Vulkan 1.0
     Vulkan_1_1 = ((1 << 22) | (1 << 12)),  // Vulkan 1.1
     Vulkan_1_2 = ((1 << 22) | (2 << 12)),  // Vulkan 1.2
+    Vulkan_1_3 = ((1 << 22) | (3 << 12)),  // Vulkan 1.2
     // For OpenGL, use the numbering from #version in shaders.
     OpenGL_4_5 = 450,
   };
@@ -97,6 +98,7 @@
     v1_3 = 0x010300u,
     v1_4 = 0x010400u,
     v1_5 = 0x010500u,
+    v1_6 = 0x010600u,
   };
 
   enum class OutputType {
diff --git a/libshaderc_util/src/compiler.cc b/libshaderc_util/src/compiler.cc
index 8a8d12b..7c1206c 100644
--- a/libshaderc_util/src/compiler.cc
+++ b/libshaderc_util/src/compiler.cc
@@ -720,6 +720,9 @@
       } else if (env_version == Compiler::TargetEnvVersion::Vulkan_1_2) {
         result.client_version = glslang::EShTargetVulkan_1_2;
         result.target_language_version = glslang::EShTargetSpv_1_5;
+      } else if (env_version == Compiler::TargetEnvVersion::Vulkan_1_3) {
+        result.client_version = glslang::EShTargetVulkan_1_3;
+        result.target_language_version = glslang::EShTargetSpv_1_6;
       } else {
         errs << "error:" << error_tag << ": Invalid target client version "
              << static_cast<uint32_t>(env_version) << " for Vulkan environment "
@@ -766,6 +769,9 @@
       case Compiler::SpirvVersion::v1_5:
         result.target_language_version = glslang::EShTargetSpv_1_5;
         break;
+      case Compiler::SpirvVersion::v1_6:
+        result.target_language_version = glslang::EShTargetSpv_1_6;
+        break;
       default:
         errs << "error:" << error_tag << ": Unknown SPIR-V version " << std::hex
              << uint32_t(spv_version);
diff --git a/libshaderc_util/src/compiler_test.cc b/libshaderc_util/src/compiler_test.cc
index 1dfbb6d..a0a964d 100644
--- a/libshaderc_util/src/compiler_test.cc
+++ b/libshaderc_util/src/compiler_test.cc
@@ -165,7 +165,7 @@
 std::string Disassemble(const std::vector<uint32_t> binary) {
   std::string result;
   shaderc_util::SpirvToolsDisassemble(Compiler::TargetEnv::Vulkan,
-                                      Compiler::TargetEnvVersion::Vulkan_1_2,
+                                      Compiler::TargetEnvVersion::Vulkan_1_3,
                                       binary, &result);
   return result;
 }
@@ -389,6 +389,12 @@
   EXPECT_THAT(errors_, Eq(""));
 }
 
+TEST_F(CompilerTest, SpirvTargetVersion1_6Succeeds) {
+  compiler_.SetTargetSpirv(Compiler::SpirvVersion::v1_6);
+  EXPECT_TRUE(SimpleCompilationSucceeds(kVulkanVertexShader, EShLangVertex));
+  EXPECT_THAT(errors_, Eq(""));
+}
+
 TEST_F(CompilerTest, SpirvTargetBadVersionFails) {
   compiler_.SetTargetSpirv(static_cast<Compiler::SpirvVersion>(0x090900));
   EXPECT_FALSE(SimpleCompilationSucceeds(kVulkanVertexShader, EShLangVertex));
diff --git a/libshaderc_util/src/spirv_tools_wrapper.cc b/libshaderc_util/src/spirv_tools_wrapper.cc
index 8ce5253..63bff6a 100644
--- a/libshaderc_util/src/spirv_tools_wrapper.cc
+++ b/libshaderc_util/src/spirv_tools_wrapper.cc
@@ -37,6 +37,8 @@
           return SPV_ENV_VULKAN_1_1;
         case Compiler::TargetEnvVersion::Vulkan_1_2:
           return SPV_ENV_VULKAN_1_2;
+        case Compiler::TargetEnvVersion::Vulkan_1_3:
+          return SPV_ENV_VULKAN_1_3;
         default:
           break;
       }
diff --git a/utils/add_copyright.py b/utils/add_copyright.py
index 37505bc..ab3c5f1 100755
--- a/utils/add_copyright.py
+++ b/utils/add_copyright.py
@@ -62,7 +62,7 @@
     """Returns glob-matching filenames under the current directory, but skips
     some irrelevant paths."""
     return find('.', glob, ['third_party', 'external', 'build*', 'out*',
-                            'CompilerIdCXX', '.venv'])
+                            'CompilerIdCXX', '.venv', 'glslang'])
 
 
 def skip(line):