aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Neto <dneto@google.com>2020-09-28 10:26:45 -0400
committerDavid Neto <dneto@google.com>2020-09-28 10:26:45 -0400
commiteb5d79cbc50581eb63a482107f0a4b5b198228a4 (patch)
treeab8fa8502c03c164088db3754854b8e259be4429
parentbc7611c39c09ce0a69b3dc961d24d019634be0dd (diff)
parent1fce59794079f90ceb091190adbbb5499acd4e95 (diff)
downloadshaderc-ndk-release-r22.tar.gz
Merge commit 'aosp/v2020.3' into update-shadercndk-r22-beta1ndk-r22ndk-release-r22
Includes: 1fce597 Finalize SPIRV-Tools v2020.3 4826423 Roll 3 dependencies and update expectations (#1133) b6c82a1 Roll 4 dependencies and updated expectations (#1132) 21b36f7 Roll 4 dependencies (#1131) ffd8051 Add support for Dawn using deprecated Options constructor (#1130) 9f09e3f Roll 5 dependencies and update expectations (#1129) c626b91 Update some language usage. (#1124) cfacaaf Adding support for the additional fixed sample mask in MSL (#1120) 469c206 Rolling 2 dependencies and updating expectations (#1121) 25a8165 Clean up issues discovered by Infer 34c9aac Start shaderc v2020.3 development Testing: checkbuild.py on Linux; unit tests on Windows Change-Id: I3a7173baeb1e3b15786dfcf3f0a31f3ed0887575
-rw-r--r--.gitignore1
-rw-r--r--CHANGES8
-rw-r--r--DEPS10
-rw-r--r--libshaderc/src/shaderc_cpp_test.cc2
-rw-r--r--libshaderc/src/shaderc_test.cc2
-rw-r--r--libshaderc_spvc/include/spvc/spvc.h5
-rw-r--r--libshaderc_spvc/include/spvc/spvc.hpp9
-rw-r--r--libshaderc_spvc/src/spvc.cc9
-rw-r--r--libshaderc_spvc/src/spvc_cpp_test.cc4
-rw-r--r--libshaderc_spvc/src/spvc_private.cc51
-rw-r--r--libshaderc_spvc/src/spvc_test.cc2
-rw-r--r--libshaderc_util/include/libshaderc_util/file_finder.h2
-rw-r--r--spvc/src/main.cc19
-rw-r--r--spvc/test/known_failures59
-rw-r--r--spvc/test/known_spvc_failures60
-rw-r--r--spvc/test/unconfirmed_invalids15
16 files changed, 184 insertions, 74 deletions
diff --git a/.gitignore b/.gitignore
index 756c305..2565dcd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
build/
build-*/
+out/
*.pyc
*.swp
compile_commands.json
diff --git a/CHANGES b/CHANGES
index e04e6df..3aa4b00 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,13 @@
Revision history for Shaderc
+v2020.3 2020-09-02
+ - General:
+ - Last release with spvc
+ - Cleaned up issues discovered by Infer
+ - spvc:
+ - Added support for Dawn using deprecated Options constructor
+ - Adding support for the additional fixed sample mask in MSL
+
v2020.2 2020-07-23
- General:
- Remove VS2013 support
diff --git a/DEPS b/DEPS
index 1f39b53..ea7f54a 100644
--- a/DEPS
+++ b/DEPS
@@ -5,12 +5,12 @@ vars = {
'khronos_git': 'https://github.com/KhronosGroup',
'effcee_revision' : '2ec8f8738118cc483b67c04a759fee53496c5659',
- 'glslang_revision': '3ee5f2f1d3316e228916788b300d786bb574d337',
- 'googletest_revision': 'a781fe29bcf73003559a3583167fe3d647518464',
+ 'glslang_revision': '517f39eee46f27c83527117d831c4d7e2f7c9fe3',
+ 'googletest_revision': 'df6b75949b1efab7606ba60c0f0a0125ac95c5af',
're2_revision': 'ca11026a032ce2a3de4b3c389ee53d2bdc8794d6',
- 'spirv_headers_revision': '979924c8bc839e4cb1b69d03d48398551f369ce7',
- 'spirv_tools_revision': '969f0286479b89267b6c89f6d5223285c265e6ae',
- 'spirv_cross_revision': '6575e451f5bffded6e308988362224dd076b0f2b',
+ 'spirv_headers_revision': '3fdabd0da2932c276b25b9b4a988ba134eba1aa6',
+ 'spirv_tools_revision': '8a0ebd40f86d1f18ad42ea96c6ac53915076c3c7',
+ 'spirv_cross_revision': '685f86471e9d26b3eb7676695a2e2cefb4551ae9',
}
deps = {
diff --git a/libshaderc/src/shaderc_cpp_test.cc b/libshaderc/src/shaderc_cpp_test.cc
index 744d2ee..af9ae30 100644
--- a/libshaderc/src/shaderc_cpp_test.cc
+++ b/libshaderc/src/shaderc_cpp_test.cc
@@ -363,7 +363,7 @@ TEST_F(CppInterface, D_DisassemblyOption) {
const AssemblyCompilationResult result = compiler_.CompileGlslToSpvAssembly(
kMinimalShader, shaderc_glsl_vertex_shader, "shader", options_);
EXPECT_TRUE(CompilationResultIsSuccess(result));
- // This should work with both the glslang native disassembly format and the
+ // This should work with both the glslang disassembly format and the
// SPIR-V Tools assembly format.
EXPECT_THAT(CompilerOutputAsString(result), HasSubstr("Capability Shader"));
EXPECT_THAT(CompilerOutputAsString(result), HasSubstr("MemoryModel"));
diff --git a/libshaderc/src/shaderc_test.cc b/libshaderc/src/shaderc_test.cc
index 14f28ab..3162468 100644
--- a/libshaderc/src/shaderc_test.cc
+++ b/libshaderc/src/shaderc_test.cc
@@ -498,7 +498,7 @@ TEST_F(CompileStringWithOptionsTest, ValuelessMacroCompileOptionsNullPointer) {
TEST_F(CompileStringWithOptionsTest, DisassemblyOption) {
ASSERT_NE(nullptr, compiler_.get_compiler_handle());
- // This should work with both the glslang native assembly format and the
+ // This should work with both the glslang assembly format and the
// SPIR-V tools assembly format.
const std::string disassembly_text =
CompilationOutput(kMinimalShader, shaderc_glsl_vertex_shader,
diff --git a/libshaderc_spvc/include/spvc/spvc.h b/libshaderc_spvc/include/spvc/spvc.h
index d216ad5..e40b434 100644
--- a/libshaderc_spvc/include/spvc/spvc.h
+++ b/libshaderc_spvc/include/spvc/spvc.h
@@ -443,6 +443,11 @@ SHADERC_EXPORT shaderc_spvc_status
shaderc_spvc_compile_options_set_msl_buffer_size_buffer_index(
shaderc_spvc_compile_options_t options, uint32_t index);
+// Set the additional fixed sample mask for MSL
+SHADERC_EXPORT shaderc_spvc_status
+shaderc_spvc_compile_options_set_msl_additional_fixed_sample_mask(
+ shaderc_spvc_compile_options_t options, uint32_t mask);
+
// Set HLSL shader model. Default is 30.
SHADERC_EXPORT shaderc_spvc_status
shaderc_spvc_compile_options_set_hlsl_shader_model(
diff --git a/libshaderc_spvc/include/spvc/spvc.hpp b/libshaderc_spvc/include/spvc/spvc.hpp
index 1c2e7d4..33e717d 100644
--- a/libshaderc_spvc/include/spvc/spvc.hpp
+++ b/libshaderc_spvc/include/spvc/spvc.hpp
@@ -78,6 +78,9 @@ class CompilationResult {
uint32_t binary_length;
status =
shaderc_spvc_result_get_binary_length(result_.get(), &binary_length);
+ if (status != shaderc_spvc_status_success) {
+ return status;
+ }
if (!binary_output || !binary_length) {
*data = std::vector<uint32_t>();
} else {
@@ -277,6 +280,12 @@ class CompileOptions {
options_.get(), index);
}
+ // Set the additional fixed sample mask for MSL
+ shaderc_spvc_status SetMSLAdditionalFixedSampleMask(uint32_t mask) {
+ return shaderc_spvc_compile_options_set_msl_additional_fixed_sample_mask(
+ options_.get(), mask);
+ }
+
// Which HLSL shader model should be used. Default is 30.
shaderc_spvc_status SetHLSLShaderModel(uint32_t model) {
return shaderc_spvc_compile_options_set_hlsl_shader_model(options_.get(),
diff --git a/libshaderc_spvc/src/spvc.cc b/libshaderc_spvc/src/spvc.cc
index 5e27b56..8ff4afb 100644
--- a/libshaderc_spvc/src/spvc.cc
+++ b/libshaderc_spvc/src/spvc.cc
@@ -606,6 +606,15 @@ shaderc_spvc_compile_options_set_msl_buffer_size_buffer_index(
return shaderc_spvc_status_success;
}
+shaderc_spvc_status
+shaderc_spvc_compile_options_set_msl_additional_fixed_sample_mask(
+ shaderc_spvc_compile_options_t options, uint32_t mask) {
+ CHECK_OPTIONS(nullptr, options);
+
+ options->msl.additional_fixed_sample_mask = mask;
+ return shaderc_spvc_status_success;
+}
+
shaderc_spvc_status shaderc_spvc_compile_options_set_hlsl_shader_model(
shaderc_spvc_compile_options_t options, uint32_t model) {
CHECK_OPTIONS(nullptr, options);
diff --git a/libshaderc_spvc/src/spvc_cpp_test.cc b/libshaderc_spvc/src/spvc_cpp_test.cc
index 09ad88b..7bb426a 100644
--- a/libshaderc_spvc/src/spvc_cpp_test.cc
+++ b/libshaderc_spvc/src/spvc_cpp_test.cc
@@ -25,6 +25,10 @@ namespace {
class CompileTest : public testing::Test {
public:
+ CompileTest()
+ : options_(shaderc_spvc_spv_env_vulkan_1_1,
+ shaderc_spvc_spv_env_vulkan_1_1) {}
+
Context context_;
CompileOptions options_;
CompilationResult result_;
diff --git a/libshaderc_spvc/src/spvc_private.cc b/libshaderc_spvc/src/spvc_private.cc
index 69ca3e4..4884db6 100644
--- a/libshaderc_spvc/src/spvc_private.cc
+++ b/libshaderc_spvc/src/spvc_private.cc
@@ -29,6 +29,21 @@
#define CATCH_IF_EXCEPTIONS_ENABLED(X) catch (X)
#endif
+namespace {
+bool is_vulkan_env(spv_target_env env) {
+ switch (env) {
+ case SPV_ENV_VULKAN_1_0:
+ case SPV_ENV_VULKAN_1_1:
+ case SPV_ENV_VULKAN_1_1_SPIRV_1_4:
+ case SPV_ENV_VULKAN_1_2:
+ return true;
+ default:
+ return false;
+ }
+}
+
+} // namespace
+
namespace spvc_private {
spv_target_env get_spv_target_env(shaderc_target_env env,
@@ -115,29 +130,35 @@ shaderc_spvc_status translate_spirv(shaderc_spvc_context* context,
const uint32_t* source, size_t source_len,
shaderc_spvc_compile_options_t options,
std::vector<uint32_t>* target) {
+ bool registered_pass = false;
if (!target) {
shaderc_spvc::ErrorLog(context)
<< "null provided for translation destination.";
return shaderc_spvc_status_transformation_error;
}
- if (source_env == target_env) {
- target->resize(source_len);
- memcpy(target->data(), source, source_len * sizeof(uint32_t));
- return shaderc_spvc_status_success;
- }
-
spvtools::Optimizer opt(source_env);
+ opt.SetValidateAfterAll(options->validate);
opt.SetMessageConsumer(std::bind(
consume_spirv_tools_message, context, std::placeholders::_1,
std::placeholders::_2, std::placeholders::_3, std::placeholders::_4));
- if (source_env == SPV_ENV_WEBGPU_0 && target_env == SPV_ENV_VULKAN_1_1) {
+ if (source_env == SPV_ENV_WEBGPU_0 && is_vulkan_env(target_env)) {
+ registered_pass = true;
opt.RegisterWebGPUToVulkanPasses();
- } else if (source_env == SPV_ENV_VULKAN_1_1 &&
- target_env == SPV_ENV_WEBGPU_0) {
+ } else if (is_vulkan_env(source_env) && target_env == SPV_ENV_WEBGPU_0) {
+ registered_pass = true;
opt.RegisterVulkanToWebGPUPasses();
- } else {
+ } else if (source_env == SPV_ENV_UNIVERSAL_1_0 &&
+ target_env == SPV_ENV_UNIVERSAL_1_0) {
+ // Assuming that the default constructor in Dawn was used, thus the intent
+ // was to perform WebGPU->Vulkan conversion.
+ //
+ // TODO: Remove this case once deprecated options constructor with defaults
+ // is removed.
+ registered_pass = true;
+ opt.RegisterWebGPUToVulkanPasses();
+ } else if (source_env != target_env) {
shaderc_spvc::ErrorLog(context)
<< "No defined transformation between source and target execution "
"environments.";
@@ -145,10 +166,18 @@ shaderc_spvc_status translate_spirv(shaderc_spvc_context* context,
}
if (options->robust_buffer_access_pass) {
+ registered_pass = true;
opt.RegisterPass(spvtools::CreateGraphicsRobustAccessPass());
}
- if (!opt.Run(source, source_len, target)) {
+ if (!registered_pass) {
+ target->resize(source_len);
+ memcpy(target->data(), source, source_len * sizeof(uint32_t));
+ return shaderc_spvc_status_success;
+ }
+
+ if (!opt.Run(source, source_len, target, spvtools::ValidatorOptions(),
+ options->validate)) {
shaderc_spvc::ErrorLog(context) << "Transformations between source and "
"target execution environments failed.";
return shaderc_spvc_status_transformation_error;
diff --git a/libshaderc_spvc/src/spvc_test.cc b/libshaderc_spvc/src/spvc_test.cc
index 7a572bd..3409668 100644
--- a/libshaderc_spvc/src/spvc_test.cc
+++ b/libshaderc_spvc/src/spvc_test.cc
@@ -28,7 +28,7 @@ class CompileTest : public testing::Test {
void SetUp() override {
context_ = shaderc_spvc_context_create();
options_ = shaderc_spvc_compile_options_create(
- shaderc_spvc_spv_env_vulkan_1_0, shaderc_spvc_spv_env_vulkan_1_0);
+ shaderc_spvc_spv_env_vulkan_1_1, shaderc_spvc_spv_env_vulkan_1_1);
result_ = shaderc_spvc_result_create();
}
diff --git a/libshaderc_util/include/libshaderc_util/file_finder.h b/libshaderc_util/include/libshaderc_util/file_finder.h
index 2c1c9d1..a5f91cf 100644
--- a/libshaderc_util/include/libshaderc_util/file_finder.h
+++ b/libshaderc_util/include/libshaderc_util/file_finder.h
@@ -27,7 +27,7 @@ class FileFinder {
// non-empty. The search is attempted on filename prefixed by each element of
// search_path() in turn. The first hit is returned, or an empty string if
// there are no hits. Search attempts treat their argument the way
- // std::fopen() treats its filename argument, blind to whether the path is
+ // std::fopen() treats its filename argument, ignoring whether the path is
// absolute or relative.
//
// If a search_path() element is non-empty and not ending in a slash, then a
diff --git a/spvc/src/main.cc b/spvc/src/main.cc
index b8e03e9..86969cb 100644
--- a/spvc/src/main.cc
+++ b/spvc/src/main.cc
@@ -89,6 +89,7 @@ Options:
--msl-domain-lower-left
--msl-argument-buffers
--msl-discrete-descriptor-set=<number>
+ --msl-additional-fixed-sample-mask=<number>
--emit-line-directives
--hlsl-enable-compat
--shader-model=<model>
@@ -111,14 +112,15 @@ bool ReadFile(const std::string& path, std::vector<uint32_t>* out) {
out->resize(ftell(file) / sizeof((*out)[0]));
rewind(file);
+ bool status = true;
if (fread(out->data(), sizeof((*out)[0]), out->size(), file) != out->size()) {
std::cerr << "Failed to read SPIR-V file: " << path << std::endl;
out->clear();
- return false;
+ status = false;
}
fclose(file);
- return true;
+ return status;
}
bool StringPieceToEnvEnum(const string_piece& str, shaderc_spvc_spv_env* env) {
@@ -294,6 +296,17 @@ int main(int argc, char** argv) {
return 1;
}
msl_discrete_descriptor.push_back(descriptor_num);
+ } else if (arg.starts_with("--msl-additional-fixed-sample-mask=")) {
+ string_piece sample_mask_str;
+ GetOptionArgument(argc, argv, &i,
+ "--msl-additional-fixed-sample-mask=", &sample_mask_str);
+ uint32_t sample_mask_num;
+ if (!shaderc_util::ParseUint32(sample_mask_str.str(), &sample_mask_num)) {
+ std::cerr << "spvc: error: invalid value '" << sample_mask_str
+ << "' in --msl-additional-fixed-sample-mask=" << std::endl;
+ return 1;
+ }
+ options.SetMSLAdditionalFixedSampleMask(sample_mask_num);
} else if (arg == "--emit-line-directives") {
options.SetEmitLineDirectives(true);
} else if (arg.starts_with("--shader-model=")) {
@@ -325,7 +338,7 @@ int main(int argc, char** argv) {
options.SetMSLDiscreteDescriptorSets(msl_discrete_descriptor);
shaderc_spvc::CompilationResult result;
- shaderc_spvc_status status = shaderc_spvc_status_configuration_error;
+ shaderc_spvc_status status;
if (output_language == "glsl") {
status = context.InitializeForGlsl((const uint32_t*)input.data(),
diff --git a/spvc/test/known_failures b/spvc/test/known_failures
index 7ce027b..c6f2b90 100644
--- a/spvc/test/known_failures
+++ b/spvc/test/known_failures
@@ -10,20 +10,18 @@ shaders-hlsl/comp/num-workgroups-alone.comp,False
shaders-hlsl/comp/num-workgroups-alone.comp,True
shaders-hlsl/comp/num-workgroups-with-builtins.comp,False
shaders-hlsl/comp/num-workgroups-with-builtins.comp,True
-shaders-hlsl/frag/combined-texture-sampler-shadow.frag,False
shaders-hlsl/frag/image-query-uav.nonwritable-uav-texture.frag,False
shaders-hlsl/frag/readonly-coherent-ssbo.force-uav.frag,False
shaders-hlsl/frag/readonly-coherent-ssbo.force-uav.frag,True
shaders-hlsl/frag/separate-combined-fake-overload.sm30.frag,False
shaders-hlsl/frag/separate-combined-fake-overload.sm30.frag,True
-shaders-hlsl/vert/read-from-row-major-array.vert,False
-shaders-hlsl/vert/read-from-row-major-array.vert,True
shaders-msl-no-opt/asm/comp/copy-logical-2.spv14.asm.comp,False
shaders-msl-no-opt/asm/comp/copy-logical.spv14.asm.comp,False
shaders-msl-no-opt/asm/comp/device-array-load-temporary.force-native-array.asm.comp,False
shaders-msl-no-opt/asm/comp/device-constant-array-load-store.force-native-array.asm.comp,False
shaders-msl-no-opt/asm/frag/phi.zero-initialize.asm.frag,False
shaders-msl-no-opt/asm/temporary.zero-initialize.asm.frag,False
+shaders-msl-no-opt/asm/tesc/tess-fixed-input-array-builtin-array.invalid.multi-patch.asm.tesc,False
shaders-msl-no-opt/comp/basic.dynamic-buffer.msl2.invalid.comp,False
shaders-msl-no-opt/comp/int64.invalid.msl22.comp,False
shaders-msl-no-opt/frag/force-active-resources.msl2.argument..force-active.discrete.frag,False
@@ -37,6 +35,8 @@ shaders-msl/asm/frag/disable-renamed-output.frag-output.asm.frag,False
shaders-msl/asm/frag/disable-renamed-output.frag-output.asm.frag,True
shaders-msl/asm/frag/min-lod.msl22.asm.frag,False
shaders-msl/asm/frag/min-lod.msl22.asm.frag,True
+shaders-msl/asm/tesc/tess-level-overrun.multi-patch.asm.tesc,False
+shaders-msl/asm/tesc/tess-level-overrun.multi-patch.asm.tesc,True
shaders-msl/asm/vert/clip-distance-plain-variable.no-user-varying.asm.vert,False
shaders-msl/asm/vert/clip-distance-plain-variable.no-user-varying.asm.vert,True
shaders-msl/comp/basic.dispatchbase.comp,False
@@ -48,37 +48,63 @@ shaders-msl/comp/basic.inline-block.msl2.comp,True
shaders-msl/comp/composite-array-initialization.force-native-array.comp,False
shaders-msl/comp/composite-array-initialization.force-native-array.comp,True
shaders-msl/comp/copy-array-of-arrays.force-native-array.comp,False
+shaders-msl/desktop-only/tesc/basic.desktop.sso.multi-patch.tesc,False
+shaders-msl/desktop-only/tesc/basic.desktop.sso.multi-patch.tesc,True
+shaders-msl/desktop-only/tesc/struct-copy.desktop.sso.multi-patch.tesc,False
+shaders-msl/desktop-only/tesc/struct-copy.desktop.sso.multi-patch.tesc,True
shaders-msl/desktop-only/vert/clip-cull-distance..no-user-varying.desktop.vert,False
shaders-msl/desktop-only/vert/clip-cull-distance..no-user-varying.desktop.vert,True
+shaders-msl/desktop-only/vert/shader-draw-parameters.desktop.for-tess.vert,False
+shaders-msl/desktop-only/vert/shader-draw-parameters.desktop.for-tess.vert,True
shaders-msl/frag/barycentric-nv-nopersp.msl22.frag,False
shaders-msl/frag/barycentric-nv-nopersp.msl22.frag,True
shaders-msl/frag/barycentric-nv.msl22.frag,False
shaders-msl/frag/barycentric-nv.msl22.frag,True
shaders-msl/frag/buffer-read-write.texture-buffer-native.msl21.frag,False
shaders-msl/frag/buffer-read-write.texture-buffer-native.msl21.frag,True
-shaders-msl/frag/constant-array.frag,False
-shaders-msl/frag/constant-array.frag,True
shaders-msl/frag/disable-frag-output.frag-output.frag,False
shaders-msl/frag/disable-frag-output.frag-output.frag,True
shaders-msl/frag/huge-argument-buffer.device-argument-buffer.argument.msl2.frag,False
shaders-msl/frag/huge-argument-buffer.device-argument-buffer.argument.msl2.frag,True
shaders-msl/frag/image-query-lod.msl22.frag,False
shaders-msl/frag/image-query-lod.msl22.frag,True
-shaders-msl/frag/separate-image-sampler-argument.frag,False
+shaders-msl/frag/sample-mask-in-and-out.fixed-sample-mask.frag,False
+shaders-msl/frag/sample-mask-in-and-out.fixed-sample-mask.frag,True
+shaders-msl/frag/sample-mask-not-used.fixed-sample-mask.frag,False
+shaders-msl/frag/sample-mask-not-used.fixed-sample-mask.frag,True
+shaders-msl/frag/sample-mask.fixed-sample-mask.frag,False
+shaders-msl/frag/sample-mask.fixed-sample-mask.frag,True
+shaders-msl/frag/shader-arithmetic-8bit.frag,True
shaders-msl/frag/subgroup-builtins.msl22.frag,False
shaders-msl/frag/subgroup-builtins.msl22.frag,True
shaders-msl/frag/texture-cube-array.ios.emulate-cube-array.frag,False
shaders-msl/frag/texture-cube-array.ios.emulate-cube-array.frag,True
shaders-msl/frag/vecsize-mismatch.shader-inputs.frag,False
shaders-msl/frag/vecsize-mismatch.shader-inputs.frag,True
-shaders-msl/tese/water_tess.tese,False
-shaders-msl/tese/water_tess.tese,True
+shaders-msl/tesc/basic.multi-patch.tesc,False
+shaders-msl/tesc/basic.multi-patch.tesc,True
+shaders-msl/tesc/load-control-point-array-of-matrix.multi-patch.tesc,False
+shaders-msl/tesc/load-control-point-array-of-matrix.multi-patch.tesc,True
+shaders-msl/tesc/load-control-point-array-of-struct.multi-patch.tesc,False
+shaders-msl/tesc/load-control-point-array-of-struct.multi-patch.tesc,True
+shaders-msl/tesc/load-control-point-array.multi-patch.tesc,False
+shaders-msl/tesc/load-control-point-array.multi-patch.tesc,True
+shaders-msl/tesc/matrix-output.multi-patch.tesc,False
+shaders-msl/tesc/matrix-output.multi-patch.tesc,True
+shaders-msl/tesc/struct-output.multi-patch.tesc,False
+shaders-msl/tesc/struct-output.multi-patch.tesc,True
+shaders-msl/tesc/water_tess.multi-patch.tesc,False
+shaders-msl/tesc/water_tess.multi-patch.tesc,True
+shaders-msl/vert/basic.for-tess.vert,False
+shaders-msl/vert/basic.for-tess.vert,True
shaders-msl/vert/clip-distance-block.no-user-varying.vert,False
shaders-msl/vert/clip-distance-block.no-user-varying.vert,True
shaders-msl/vert/float-math.invariant-float-math.vert,False
shaders-msl/vert/float-math.invariant-float-math.vert,True
-shaders-msl/vert/read-from-row-major-array.vert,False
-shaders-msl/vert/read-from-row-major-array.vert,True
+shaders-msl/vert/leaf-function.for-tess.vert,False
+shaders-msl/vert/leaf-function.for-tess.vert,True
+shaders-msl/vert/no_stage_out.for-tess.vert,False
+shaders-msl/vert/no_stage_out.for-tess.vert,True
shaders-msl/vert/return-array.force-native-array.vert,False
shaders-msl/vert/signedness-mismatch.shader-inputs.vert,False
shaders-msl/vert/signedness-mismatch.shader-inputs.vert,True
@@ -88,6 +114,7 @@ shaders-no-opt/asm/comp/copy-logical.spv14.asm.comp,False
shaders-no-opt/asm/frag/phi.zero-initialize.asm.frag,False
shaders-no-opt/asm/temporary.zero-initialize.asm.frag,False
shaders-no-opt/frag/variables.zero-initialize.frag,False
+shaders-no-opt/vert/io-blocks.force-flattened-io.vert,False
shaders-reflection/asm/aliased-entry-point-names.asm.multi,False
shaders-reflection/asm/comp/pointer-to-array-of-physical-pointer.asm.comp,False
shaders-reflection/asm/op-source-glsl-ssbo-1.asm.comp,False
@@ -124,15 +151,3 @@ shaders/asm/frag/image-fetch-no-sampler.no-samplerless.asm.vk.frag,True
shaders/asm/frag/image-query-no-sampler.no-samplerless.vk.asm.frag,False
shaders/desktop-only/frag/image-size.no-qualifier-deduction.frag,False
shaders/desktop-only/frag/image-size.no-qualifier-deduction.frag,True
-shaders/frag/constant-array.frag,False
-shaders/frag/constant-array.frag,True
-shaders/tese/water_tess.tese,False
-shaders/tese/water_tess.tese,True
-shaders/vert/read-from-row-major-array.vert,False
-shaders/vert/read-from-row-major-array.vert,True
-shaders/vulkan/frag/combined-texture-sampler-shadow.vk.frag,False
-shaders/vulkan/frag/combined-texture-sampler.vk.frag,False
-shaders/vulkan/frag/separate-sampler-texture-array.vk.frag,False
-shaders/vulkan/frag/separate-sampler-texture-array.vk.frag,True
-shaders/vulkan/frag/separate-sampler-texture.vk.frag,False
-shaders/vulkan/frag/separate-sampler-texture.vk.frag,True
diff --git a/spvc/test/known_spvc_failures b/spvc/test/known_spvc_failures
index db3c83b..d3276b3 100644
--- a/spvc/test/known_spvc_failures
+++ b/spvc/test/known_spvc_failures
@@ -1,4 +1,5 @@
shaders-hlsl-no-opt/asm/frag/phi.zero-initialize.asm.frag,False
+shaders-hlsl-no-opt/asm/frag/struct-packing-last-element-array-matrix-rule.invalid.asm.frag,False
shaders-hlsl-no-opt/asm/frag/switch-block-case-fallthrough.asm.invalid.frag,False
shaders-hlsl-no-opt/asm/temporary.zero-initialize.asm.frag,False
shaders-hlsl-no-opt/frag/constant-buffer-array.invalid.sm51.frag,False
@@ -15,14 +16,11 @@ shaders-hlsl/comp/num-workgroups-alone.comp,False
shaders-hlsl/comp/num-workgroups-alone.comp,True
shaders-hlsl/comp/num-workgroups-with-builtins.comp,False
shaders-hlsl/comp/num-workgroups-with-builtins.comp,True
-shaders-hlsl/frag/combined-texture-sampler-shadow.frag,False
shaders-hlsl/frag/image-query-uav.nonwritable-uav-texture.frag,False
shaders-hlsl/frag/readonly-coherent-ssbo.force-uav.frag,False
shaders-hlsl/frag/readonly-coherent-ssbo.force-uav.frag,True
shaders-hlsl/frag/separate-combined-fake-overload.sm30.frag,False
shaders-hlsl/frag/separate-combined-fake-overload.sm30.frag,True
-shaders-hlsl/vert/read-from-row-major-array.vert,False
-shaders-hlsl/vert/read-from-row-major-array.vert,True
shaders-msl-no-opt/asm/comp/composite-construct-buffer-struct.asm.comp,False
shaders-msl-no-opt/asm/comp/copy-logical-2.spv14.asm.comp,False
shaders-msl-no-opt/asm/comp/copy-logical.spv14.asm.comp,False
@@ -44,6 +42,7 @@ shaders-msl-no-opt/asm/packing/scalar-float2x3-col-major.invalid.asm.frag,False
shaders-msl-no-opt/asm/packing/scalar-float3x2-col-major.invalid.asm.frag,False
shaders-msl-no-opt/asm/packing/scalar-float3x3-col-major.invalid.asm.frag,False
shaders-msl-no-opt/asm/temporary.zero-initialize.asm.frag,False
+shaders-msl-no-opt/asm/tesc/tess-fixed-input-array-builtin-array.invalid.multi-patch.asm.tesc,False
shaders-msl-no-opt/comp/basic.dynamic-buffer.msl2.invalid.comp,False
shaders-msl-no-opt/comp/int64.invalid.msl22.comp,False
shaders-msl-no-opt/frag/16bit-constants.invalid.frag,False
@@ -71,6 +70,8 @@ shaders-msl/asm/frag/disable-renamed-output.frag-output.asm.frag,False
shaders-msl/asm/frag/disable-renamed-output.frag-output.asm.frag,True
shaders-msl/asm/frag/min-lod.msl22.asm.frag,False
shaders-msl/asm/frag/min-lod.msl22.asm.frag,True
+shaders-msl/asm/tesc/tess-level-overrun.multi-patch.asm.tesc,False
+shaders-msl/asm/tesc/tess-level-overrun.multi-patch.asm.tesc,True
shaders-msl/asm/vert/clip-distance-plain-variable.no-user-varying.asm.vert,False
shaders-msl/asm/vert/clip-distance-plain-variable.no-user-varying.asm.vert,True
shaders-msl/comp/basic.dispatchbase.comp,False
@@ -82,37 +83,63 @@ shaders-msl/comp/basic.inline-block.msl2.comp,True
shaders-msl/comp/composite-array-initialization.force-native-array.comp,False
shaders-msl/comp/composite-array-initialization.force-native-array.comp,True
shaders-msl/comp/copy-array-of-arrays.force-native-array.comp,False
+shaders-msl/desktop-only/tesc/basic.desktop.sso.multi-patch.tesc,False
+shaders-msl/desktop-only/tesc/basic.desktop.sso.multi-patch.tesc,True
+shaders-msl/desktop-only/tesc/struct-copy.desktop.sso.multi-patch.tesc,False
+shaders-msl/desktop-only/tesc/struct-copy.desktop.sso.multi-patch.tesc,True
shaders-msl/desktop-only/vert/clip-cull-distance..no-user-varying.desktop.vert,False
shaders-msl/desktop-only/vert/clip-cull-distance..no-user-varying.desktop.vert,True
+shaders-msl/desktop-only/vert/shader-draw-parameters.desktop.for-tess.vert,False
+shaders-msl/desktop-only/vert/shader-draw-parameters.desktop.for-tess.vert,True
shaders-msl/frag/barycentric-nv-nopersp.msl22.frag,False
shaders-msl/frag/barycentric-nv-nopersp.msl22.frag,True
shaders-msl/frag/barycentric-nv.msl22.frag,False
shaders-msl/frag/barycentric-nv.msl22.frag,True
shaders-msl/frag/buffer-read-write.texture-buffer-native.msl21.frag,False
shaders-msl/frag/buffer-read-write.texture-buffer-native.msl21.frag,True
-shaders-msl/frag/constant-array.frag,False
-shaders-msl/frag/constant-array.frag,True
shaders-msl/frag/disable-frag-output.frag-output.frag,False
shaders-msl/frag/disable-frag-output.frag-output.frag,True
shaders-msl/frag/huge-argument-buffer.device-argument-buffer.argument.msl2.frag,False
shaders-msl/frag/huge-argument-buffer.device-argument-buffer.argument.msl2.frag,True
shaders-msl/frag/image-query-lod.msl22.frag,False
shaders-msl/frag/image-query-lod.msl22.frag,True
-shaders-msl/frag/separate-image-sampler-argument.frag,False
+shaders-msl/frag/sample-mask-in-and-out.fixed-sample-mask.frag,False
+shaders-msl/frag/sample-mask-in-and-out.fixed-sample-mask.frag,True
+shaders-msl/frag/sample-mask-not-used.fixed-sample-mask.frag,False
+shaders-msl/frag/sample-mask-not-used.fixed-sample-mask.frag,True
+shaders-msl/frag/sample-mask.fixed-sample-mask.frag,False
+shaders-msl/frag/sample-mask.fixed-sample-mask.frag,True
+shaders-msl/frag/shader-arithmetic-8bit.frag,True
shaders-msl/frag/subgroup-builtins.msl22.frag,False
shaders-msl/frag/subgroup-builtins.msl22.frag,True
shaders-msl/frag/texture-cube-array.ios.emulate-cube-array.frag,False
shaders-msl/frag/texture-cube-array.ios.emulate-cube-array.frag,True
shaders-msl/frag/vecsize-mismatch.shader-inputs.frag,False
shaders-msl/frag/vecsize-mismatch.shader-inputs.frag,True
-shaders-msl/tese/water_tess.tese,False
-shaders-msl/tese/water_tess.tese,True
+shaders-msl/tesc/basic.multi-patch.tesc,False
+shaders-msl/tesc/basic.multi-patch.tesc,True
+shaders-msl/tesc/load-control-point-array-of-matrix.multi-patch.tesc,False
+shaders-msl/tesc/load-control-point-array-of-matrix.multi-patch.tesc,True
+shaders-msl/tesc/load-control-point-array-of-struct.multi-patch.tesc,False
+shaders-msl/tesc/load-control-point-array-of-struct.multi-patch.tesc,True
+shaders-msl/tesc/load-control-point-array.multi-patch.tesc,False
+shaders-msl/tesc/load-control-point-array.multi-patch.tesc,True
+shaders-msl/tesc/matrix-output.multi-patch.tesc,False
+shaders-msl/tesc/matrix-output.multi-patch.tesc,True
+shaders-msl/tesc/struct-output.multi-patch.tesc,False
+shaders-msl/tesc/struct-output.multi-patch.tesc,True
+shaders-msl/tesc/water_tess.multi-patch.tesc,False
+shaders-msl/tesc/water_tess.multi-patch.tesc,True
+shaders-msl/vert/basic.for-tess.vert,False
+shaders-msl/vert/basic.for-tess.vert,True
shaders-msl/vert/clip-distance-block.no-user-varying.vert,False
shaders-msl/vert/clip-distance-block.no-user-varying.vert,True
shaders-msl/vert/float-math.invariant-float-math.vert,False
shaders-msl/vert/float-math.invariant-float-math.vert,True
-shaders-msl/vert/read-from-row-major-array.vert,False
-shaders-msl/vert/read-from-row-major-array.vert,True
+shaders-msl/vert/leaf-function.for-tess.vert,False
+shaders-msl/vert/leaf-function.for-tess.vert,True
+shaders-msl/vert/no_stage_out.for-tess.vert,False
+shaders-msl/vert/no_stage_out.for-tess.vert,True
shaders-msl/vert/return-array.force-native-array.vert,False
shaders-msl/vert/signedness-mismatch.shader-inputs.vert,False
shaders-msl/vert/signedness-mismatch.shader-inputs.vert,True
@@ -134,6 +161,7 @@ shaders-no-opt/frag/16bit-constants.invalid.frag,False
shaders-no-opt/frag/fp16.invalid.desktop.frag,False
shaders-no-opt/frag/multi-dimensional.desktop.invalid.flatten_dim.frag,False
shaders-no-opt/frag/variables.zero-initialize.frag,False
+shaders-no-opt/vert/io-blocks.force-flattened-io.vert,False
shaders-reflection/asm/aliased-entry-point-names.asm.multi,False
shaders-reflection/asm/comp/pointer-to-array-of-physical-pointer.asm.comp,False
shaders-reflection/asm/op-source-glsl-ssbo-1.asm.comp,False
@@ -170,15 +198,3 @@ shaders/asm/frag/image-fetch-no-sampler.no-samplerless.asm.vk.frag,True
shaders/asm/frag/image-query-no-sampler.no-samplerless.vk.asm.frag,False
shaders/desktop-only/frag/image-size.no-qualifier-deduction.frag,False
shaders/desktop-only/frag/image-size.no-qualifier-deduction.frag,True
-shaders/frag/constant-array.frag,False
-shaders/frag/constant-array.frag,True
-shaders/tese/water_tess.tese,False
-shaders/tese/water_tess.tese,True
-shaders/vert/read-from-row-major-array.vert,False
-shaders/vert/read-from-row-major-array.vert,True
-shaders/vulkan/frag/combined-texture-sampler-shadow.vk.frag,False
-shaders/vulkan/frag/combined-texture-sampler.vk.frag,False
-shaders/vulkan/frag/separate-sampler-texture-array.vk.frag,False
-shaders/vulkan/frag/separate-sampler-texture-array.vk.frag,True
-shaders/vulkan/frag/separate-sampler-texture.vk.frag,False
-shaders/vulkan/frag/separate-sampler-texture.vk.frag,True
diff --git a/spvc/test/unconfirmed_invalids b/spvc/test/unconfirmed_invalids
index c8335ed..b50ffde 100644
--- a/spvc/test/unconfirmed_invalids
+++ b/spvc/test/unconfirmed_invalids
@@ -1,3 +1,4 @@
+shaders-hlsl-no-opt/asm/frag/struct-packing-last-element-array-matrix-rule.invalid.asm.frag,False
shaders-hlsl-no-opt/asm/frag/switch-block-case-fallthrough.asm.invalid.frag,False
shaders-hlsl-no-opt/frag/constant-buffer-array.invalid.sm51.frag,False
shaders-hlsl-no-opt/frag/fp16.invalid.desktop.frag,False
@@ -6,6 +7,13 @@ shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-3.asm.comp,False
shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-5.asm.comp,False
shaders-msl-no-opt/asm/packing/load-packed-no-forwarding.asm.comp,False
shaders-msl-no-opt/asm/packing/packed-vector-extract-insert.asm.comp,False
+shaders-msl-no-opt/asm/packing/scalar-array-float2.asm.frag,False
+shaders-msl-no-opt/asm/packing/scalar-array-float3-one-element.asm.frag,False
+shaders-msl-no-opt/asm/packing/scalar-array-float3.asm.frag,False
+shaders-msl-no-opt/asm/packing/scalar-float2x2-col-major.invalid.asm.frag,False
+shaders-msl-no-opt/asm/packing/scalar-float2x3-col-major.invalid.asm.frag,False
+shaders-msl-no-opt/asm/packing/scalar-float3x2-col-major.invalid.asm.frag,False
+shaders-msl-no-opt/asm/packing/scalar-float3x3-col-major.invalid.asm.frag,False
shaders-msl-no-opt/frag/16bit-constants.invalid.frag,False
shaders-msl-no-opt/frag/fp16.desktop.invalid.frag,False
shaders-msl-no-opt/frag/min-max-clamp.invalid.asm.frag,False
@@ -29,10 +37,3 @@ shaders-no-opt/asm/frag/switch-merge-to-continue.asm.invalid.frag,False
shaders-no-opt/frag/16bit-constants.invalid.frag,False
shaders-no-opt/frag/fp16.invalid.desktop.frag,False
shaders-no-opt/frag/multi-dimensional.desktop.invalid.flatten_dim.frag,False
-shaders-msl-no-opt/asm/packing/scalar-array-float2.asm.frag,False
-shaders-msl-no-opt/asm/packing/scalar-array-float3-one-element.asm.frag,False
-shaders-msl-no-opt/asm/packing/scalar-array-float3.asm.frag,False
-shaders-msl-no-opt/asm/packing/scalar-float2x2-col-major.invalid.asm.frag,False
-shaders-msl-no-opt/asm/packing/scalar-float2x3-col-major.invalid.asm.frag,False
-shaders-msl-no-opt/asm/packing/scalar-float3x2-col-major.invalid.asm.frag,False
-shaders-msl-no-opt/asm/packing/scalar-float3x3-col-major.invalid.asm.frag,False