From 77d4762957e4dee604c69bd732857d00a48840a1 Mon Sep 17 00:00:00 2001 From: Aras Pranckevicius Date: Mon, 24 Feb 2020 21:06:41 +0200 Subject: [PATCH 1/2] Add "versioning" of SMOL-V opcode tables. NOTE: potentially breaking change with code from last 10 days. --- Changelog.md | 7 ++++ source/smolv.cpp | 89 +++++++++++++++++++++++++++++++----------------- 2 files changed, 65 insertions(+), 31 deletions(-) diff --git a/Changelog.md b/Changelog.md index b1dc38a..89151e5 100644 --- a/Changelog.md +++ b/Changelog.md @@ -2,6 +2,13 @@ For an overview, see [readme](README.md). +## 2020 02 24 + +* Added mechanism for "versioning" SMOL-V encodings. + Note: files produced by SMOL-V 2020-02-13 version that happened + to contain ExecutionModeId..GroupNonUniformQuadSwap opcodes + will not decode properly; please re-encode them. + ## 2020 02 13 * Added support for SPIR-V 1.4 and 1.5 versions. diff --git a/source/smolv.cpp b/source/smolv.cpp index 72a7190..82c8946 100644 --- a/source/smolv.cpp +++ b/source/smolv.cpp @@ -1118,36 +1118,47 @@ static const OpData kSpirvOpData[] = }; static_assert(_SMOLV_ARRAY_SIZE(kSpirvOpData) == kKnownOpsCount, "kSpirvOpData table mismatch with known SpvOps"); +// Instruction encoding depends on the table that describes the various SPIR-V opcodes. +// Whenever we change or expand the table, we need to bump up the SMOL-V version, and make +// sure that we can still decode files encoded by an older version. +static int smolv_GetKnownOpsCount(int version) +{ + if (version == 0) + return SpvOpModuleProcessed+1; + if (version == 1) // 2020 February, version 1 added ExecutionModeId..GroupNonUniformQuadSwap + return SpvOpGroupNonUniformQuadSwap+1; + return 0; +} -static bool smolv_OpHasResult(SpvOp op) +static bool smolv_OpHasResult(SpvOp op, int opsCount) { - if (op < 0 || op >= kKnownOpsCount) + if (op < 0 || op >= opsCount) return false; return kSpirvOpData[op].hasResult != 0; } -static bool smolv_OpHasType(SpvOp op) +static bool smolv_OpHasType(SpvOp op, int opsCount) { - if (op < 0 || op >= kKnownOpsCount) + if (op < 0 || op >= opsCount) return false; return kSpirvOpData[op].hasType != 0; } -static int smolv_OpDeltaFromResult(SpvOp op) +static int smolv_OpDeltaFromResult(SpvOp op, int opsCount) { - if (op < 0 || op >= kKnownOpsCount) + if (op < 0 || op >= opsCount) return 0; return kSpirvOpData[op].deltaFromResult; } -static bool smolv_OpVarRest(SpvOp op) +static bool smolv_OpVarRest(SpvOp op, int opsCount) { - if (op < 0 || op >= kKnownOpsCount) + if (op < 0 || op >= opsCount) return false; return kSpirvOpData[op].varrest != 0; } -static bool smolv_OpDebugInfo(SpvOp op) +static bool smolv_OpDebugInfo(SpvOp op, int opsCount) { return op == SpvOpSourceContinued || @@ -1175,7 +1186,7 @@ static int smolv_DecorationExtraOps(int dec) // -------------------------------------------------------------------------------------------- -static bool smolv_CheckGenericHeader(const uint32_t* words, size_t wordCount, uint32_t expectedMagic) +static bool smolv_CheckGenericHeader(const uint32_t* words, size_t wordCount, uint32_t expectedMagic, uint32_t versionMask) { if (!words) return false; @@ -1185,7 +1196,7 @@ static bool smolv_CheckGenericHeader(const uint32_t* words, size_t wordCount, ui uint32_t headerMagic = words[0]; if (headerMagic != expectedMagic) return false; - uint32_t headerVersion = words[1]; + uint32_t headerVersion = words[1] & versionMask; if (headerVersion < 0x00010000 || headerVersion > 0x00010500) return false; // only support 1.0 through 1.5 @@ -1195,18 +1206,24 @@ static bool smolv_CheckGenericHeader(const uint32_t* words, size_t wordCount, ui static const int kSpirVHeaderMagic = 0x07230203; static const int kSmolHeaderMagic = 0x534D4F4C; // "SMOL" +static const int kSmolCurrEncodingVersion = 1; + static bool smolv_CheckSpirVHeader(const uint32_t* words, size_t wordCount) { //@TODO: if SPIR-V header magic was reversed, that means the file got written // in a "big endian" order. Need to byteswap all words then. - return smolv_CheckGenericHeader(words, wordCount, kSpirVHeaderMagic); + return smolv_CheckGenericHeader(words, wordCount, kSpirVHeaderMagic, 0xFFFFFFFF); } static bool smolv_CheckSmolHeader(const uint8_t* bytes, size_t byteCount) { - if (!smolv_CheckGenericHeader((const uint32_t*)bytes, byteCount/4, kSmolHeaderMagic)) + if (!smolv_CheckGenericHeader((const uint32_t*)bytes, byteCount/4, kSmolHeaderMagic, 0x00FFFFFF)) return false; if (byteCount < 24) // one more word past header to store decoded length return false; + // SMOL-V version + int smolVersion = ((const uint32_t*)bytes)[1] >> 24; + if (smolVersion < 0 || smolVersion > kSmolCurrEncodingVersion) + return false; return true; } @@ -1390,9 +1407,9 @@ bool smolv::Encode(const void* spirvData, size_t spirvSize, ByteArray& outSmolv, // reserve space in output (typical compression is to about 30%; reserve half of input space) outSmolv.reserve(outSmolv.size() + spirvSize/2); - // header + // header (matches SPIR-V one, except different magic) smolv_Write4(outSmolv, kSmolHeaderMagic); - smolv_Write4(outSmolv, words[1]); // version + smolv_Write4(outSmolv, (words[1] & 0x00FFFFFF) + (kSmolCurrEncodingVersion<<24)); // SPIR-V version (_XXX) + SMOL-V version (X___) smolv_Write4(outSmolv, words[2]); // generator smolv_Write4(outSmolv, words[3]); // bound smolv_Write4(outSmolv, words[4]); // schema @@ -1403,13 +1420,15 @@ bool smolv::Encode(const void* spirvData, size_t spirvSize, ByteArray& outSmolv, size_t strippedSpirvWordCount = wordCount; uint32_t prevResult = 0; uint32_t prevDecorate = 0; + + const int knownOpsCount = smolv_GetKnownOpsCount(kSmolCurrEncodingVersion); words += 5; while (words < wordsEnd) { _SMOLV_READ_OP(instrLen, words, op); - if ((flags & kEncodeFlagStripDebugInfo) && smolv_OpDebugInfo(op)) + if ((flags & kEncodeFlagStripDebugInfo) && smolv_OpDebugInfo(op, knownOpsCount)) { strippedSpirvWordCount -= instrLen; words += instrLen; @@ -1439,7 +1458,7 @@ bool smolv::Encode(const void* spirvData, size_t spirvSize, ByteArray& outSmolv, size_t ioffs = 1; // write type as varint, if we have it - if (smolv_OpHasType(op)) + if (smolv_OpHasType(op, knownOpsCount)) { if (ioffs >= instrLen) return false; @@ -1447,7 +1466,7 @@ bool smolv::Encode(const void* spirvData, size_t spirvSize, ByteArray& outSmolv, ioffs++; } // write result as delta+zig+varint, if we have it - if (smolv_OpHasResult(op)) + if (smolv_OpHasResult(op, knownOpsCount)) { if (ioffs >= instrLen) return false; @@ -1530,7 +1549,7 @@ bool smolv::Encode(const void* spirvData, size_t spirvSize, ByteArray& outSmolv, } // Write out this many IDs, encoding them relative+zigzag to result ID - int relativeCount = smolv_OpDeltaFromResult(op); + int relativeCount = smolv_OpDeltaFromResult(op, knownOpsCount); for (int i = 0; i < relativeCount && ioffs < instrLen; ++i, ++ioffs) { if (ioffs >= instrLen) @@ -1547,7 +1566,7 @@ bool smolv::Encode(const void* spirvData, size_t spirvSize, ByteArray& outSmolv, outSmolv.push_back(uint8_t(swizzle)); ioffs = instrLen; } - else if (smolv_OpVarRest(op)) + else if (smolv_OpVarRest(op, knownOpsCount)) { // write out rest of words with variable encoding (expected to be small integers) for (; ioffs < instrLen; ++ioffs) @@ -1599,14 +1618,17 @@ bool smolv::Decode(const void* smolvData, size_t smolvSize, void* spirvOutputBuf uint8_t* outSpirv = (uint8_t*)spirvOutputBuffer; uint32_t val; + int smolVersion = 0; // header smolv_Write4(outSpirv, kSpirVHeaderMagic); bytes += 4; - smolv_Read4(bytes, bytesEnd, val); smolv_Write4(outSpirv, val); // version + smolv_Read4(bytes, bytesEnd, val); smolVersion = val >> 24; val &= 0x00FFFFFF; smolv_Write4(outSpirv, val); // version smolv_Read4(bytes, bytesEnd, val); smolv_Write4(outSpirv, val); // generator smolv_Read4(bytes, bytesEnd, val); smolv_Write4(outSpirv, val); // bound smolv_Read4(bytes, bytesEnd, val); smolv_Write4(outSpirv, val); // schema bytes += 4; // decode buffer size + + const int knownOpsCount = smolv_GetKnownOpsCount(smolVersion); uint32_t prevResult = 0; uint32_t prevDecorate = 0; @@ -1626,14 +1648,14 @@ bool smolv::Decode(const void* smolvData, size_t smolvSize, void* spirvOutputBuf size_t ioffs = 1; // read type as varint, if we have it - if (smolv_OpHasType(op)) + if (smolv_OpHasType(op, knownOpsCount)) { if (!smolv_ReadVarint(bytes, bytesEnd, val)) return false; smolv_Write4(outSpirv, val); ioffs++; } // read result as delta+varint, if we have it - if (smolv_OpHasResult(op)) + if (smolv_OpHasResult(op, knownOpsCount)) { if (!smolv_ReadVarint(bytes, bytesEnd, val)) return false; val = prevResult + smolv_ZigDecode(val); @@ -1712,7 +1734,7 @@ bool smolv::Decode(const void* smolvData, size_t smolvSize, void* spirvOutputBuf } // Read this many IDs, that are relative to result ID - int relativeCount = smolv_OpDeltaFromResult(op); + int relativeCount = smolv_OpDeltaFromResult(op, knownOpsCount); for (int i = 0; i < relativeCount && ioffs < instrLen; ++i, ++ioffs) { if (!smolv_ReadVarint(bytes, bytesEnd, val)) return false; @@ -1728,7 +1750,7 @@ bool smolv::Decode(const void* smolvData, size_t smolvSize, void* spirvOutputBuf if (instrLen > 7) smolv_Write4(outSpirv, (swizzle >> 2) & 3); if (instrLen > 8) smolv_Write4(outSpirv, swizzle & 3); } - else if (smolv_OpVarRest(op)) + else if (smolv_OpVarRest(op, knownOpsCount)) { // read rest of words with variable encoding for (; ioffs < instrLen; ++ioffs) @@ -1843,11 +1865,16 @@ bool smolv::StatsCalculateSmol(smolv::Stats* stats, const void* smolvData, size_ const uint8_t* bytesEnd = bytes + smolvSize; if (!smolv_CheckSmolHeader(bytes, smolvSize)) return false; - bytes += 24; + + uint32_t val; + int smolVersion; + bytes += 4; + smolv_Read4(bytes, bytesEnd, val); smolVersion = val >> 24; + const int knownOpsCount = smolv_GetKnownOpsCount(smolVersion); + bytes += 16; stats->totalSizeSmol += smolvSize; - uint32_t val; while (bytes < bytesEnd) { const uint8_t* instrBegin = bytes; @@ -1865,14 +1892,14 @@ bool smolv::StatsCalculateSmol(smolv::Stats* stats, const void* smolvData, size_ stats->varintCountsOp[bytes-varBegin]++; size_t ioffs = 1; - if (smolv_OpHasType(op)) + if (smolv_OpHasType(op, knownOpsCount)) { varBegin = bytes; if (!smolv_ReadVarint(bytes, bytesEnd, val)) return false; stats->varintCountsType[bytes-varBegin]++; ioffs++; } - if (smolv_OpHasResult(op)) + if (smolv_OpHasResult(op, knownOpsCount)) { varBegin = bytes; if (!smolv_ReadVarint(bytes, bytesEnd, val)) return false; @@ -1916,7 +1943,7 @@ bool smolv::StatsCalculateSmol(smolv::Stats* stats, const void* smolvData, size_ continue; } - int relativeCount = smolv_OpDeltaFromResult(op); + int relativeCount = smolv_OpDeltaFromResult(op, knownOpsCount); for (int i = 0; i < relativeCount && ioffs < instrLen; ++i, ++ioffs) { varBegin = bytes; @@ -1928,7 +1955,7 @@ bool smolv::StatsCalculateSmol(smolv::Stats* stats, const void* smolvData, size_ { bytes++; } - else if (smolv_OpVarRest(op)) + else if (smolv_OpVarRest(op, knownOpsCount)) { for (; ioffs < instrLen; ++ioffs) { From 6beffe21a74892e7d742f08636dcce934d4eb1ca Mon Sep 17 00:00:00 2001 From: Aras Pranckevicius Date: Mon, 24 Feb 2020 21:11:48 +0200 Subject: [PATCH 2/2] Tests: add validation that current SMOL-V can still decode files produced by earlier versions. Including coverage for shaders that used group operations before the SMOL-V encoding was taught to support these instructions. --- testing/testmain.cpp | 124 +++++++++++++++++- .../smolv-dumps/2016-09-07/dota2_14074.smolv | Bin 0 -> 1543 bytes .../smolv-dumps/2016-09-07/dota2_15212.smolv | Bin 0 -> 3336 bytes .../smolv-dumps/2016-09-07/dota2_20451.smolv | Bin 0 -> 7944 bytes .../smolv-dumps/2016-09-07/dota2_367079.smolv | Bin 0 -> 13506 bytes .../smolv-dumps/2016-09-07/dota2_824933.smolv | Bin 0 -> 627 bytes .../2016-09-07/shadertoy_st-Ms2SD1.smolv | Bin 0 -> 7129 bytes .../2016-09-07/shadertoy_st-Xds3zN.smolv | Bin 0 -> 13324 bytes .../2016-09-07/shadertoy_st-ld3Gz2.smolv | Bin 0 -> 27912 bytes .../2016-09-07/shadertoy_st-lsSXzD.smolv | Bin 0 -> 62115 bytes .../2016-09-07/talos_0A38A8F3.smolv | Bin 0 -> 5385 bytes .../2016-09-07/talos_0C958994.smolv | Bin 0 -> 351 bytes .../2016-09-07/talos_1AFB24CF.smolv | Bin 0 -> 13373 bytes .../2016-09-07/talos_7A632EA9.smolv | Bin 0 -> 10728 bytes .../2016-09-07/unity_s0-0001-32333750.smolv | Bin 0 -> 391 bytes .../2016-09-07/unity_s0-0007-3454fc86.smolv | Bin 0 -> 1516 bytes .../2016-09-07/unity_s0-0012-fba002b2.smolv | Bin 0 -> 2565 bytes .../2016-09-07/unity_s1-0000-5ca04fe4.smolv | Bin 0 -> 193 bytes .../2016-09-07/unity_s1-0002-8d2ed6da.smolv | Bin 0 -> 468 bytes .../2016-09-07/unity_s1-0017-6c18345b.smolv | Bin 0 -> 3233 bytes .../2016-09-07/unity_s1-0084-ffb8278d.smolv | Bin 0 -> 13718 bytes .../2016-09-07/unity_s2-0031-412ed89d.smolv | Bin 0 -> 5685 bytes .../2016-09-07/unity_s3-0028-e081a509.smolv | Bin 0 -> 5126 bytes .../2016-09-07/unity_s4-0004-6ec33743.smolv | Bin 0 -> 871 bytes .../2016-09-07/unity_s4-0006-a5e06270.smolv | Bin 0 -> 1348 bytes .../smolv-dumps/2018-10-27/dxc_imgui-vs.smolv | Bin 0 -> 580 bytes .../glslang_spv.subgroup.frag.smolv | Bin 0 -> 291 bytes .../glslang_spv.subgroupClustered.comp.smolv | Bin 0 -> 7035 bytes ...oupExtendedTypesShuffleRelative.comp.smolv | Bin 0 -> 4855 bytes .../glslang_spv.subgroupQuad.comp.smolv | Bin 0 -> 5563 bytes .../glslang_spv.subgroupVote.comp.smolv | Bin 0 -> 1975 bytes .../glslang_spv.1.4.NonWritable.frag.smolv | Bin 0 -> 402 bytes .../glslang_spv.1.4.OpCopyLogical.comp.smolv | Bin 0 -> 1044 bytes ...slang_spv.1.4.OpCopyLogicalBool.comp.smolv | Bin 0 -> 1499 bytes .../glslang_spv.1.4.sparseTexture.frag.smolv | Bin 0 -> 1995 bytes ...g_spv.320.meshShaderUserDefined.mesh.smolv | Bin 0 -> 1340 bytes .../glslang_spv.AnyHitShader.rahit.smolv | Bin 0 -> 1138 bytes ...pv.meshShaderPerViewUserDefined.mesh.smolv | Bin 0 -> 1380 bytes ...meshShaderRedeclPerViewBuiltins.mesh.smolv | Bin 0 -> 1385 bytes .../glslang_spv.meshShaderTaskMem.mesh.smolv | Bin 0 -> 738 bytes .../glslang_spv.perprimitiveNV.frag.smolv | Bin 0 -> 336 bytes .../glslang_spv.subgroup.frag.smolv | Bin 0 -> 291 bytes .../glslang_spv.subgroupClustered.comp.smolv | Bin 0 -> 5435 bytes ...oupExtendedTypesShuffleRelative.comp.smolv | Bin 0 -> 4175 bytes .../glslang_spv.subgroupQuad.comp.smolv | Bin 0 -> 4547 bytes .../glslang_spv.subgroupVote.comp.smolv | Bin 0 -> 1735 bytes .../glslang_spv.vulkan110.int16.frag.smolv | Bin 0 -> 877 bytes 47 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 tests/smolv-dumps/2016-09-07/dota2_14074.smolv create mode 100644 tests/smolv-dumps/2016-09-07/dota2_15212.smolv create mode 100644 tests/smolv-dumps/2016-09-07/dota2_20451.smolv create mode 100644 tests/smolv-dumps/2016-09-07/dota2_367079.smolv create mode 100644 tests/smolv-dumps/2016-09-07/dota2_824933.smolv create mode 100644 tests/smolv-dumps/2016-09-07/shadertoy_st-Ms2SD1.smolv create mode 100644 tests/smolv-dumps/2016-09-07/shadertoy_st-Xds3zN.smolv create mode 100644 tests/smolv-dumps/2016-09-07/shadertoy_st-ld3Gz2.smolv create mode 100644 tests/smolv-dumps/2016-09-07/shadertoy_st-lsSXzD.smolv create mode 100644 tests/smolv-dumps/2016-09-07/talos_0A38A8F3.smolv create mode 100644 tests/smolv-dumps/2016-09-07/talos_0C958994.smolv create mode 100644 tests/smolv-dumps/2016-09-07/talos_1AFB24CF.smolv create mode 100644 tests/smolv-dumps/2016-09-07/talos_7A632EA9.smolv create mode 100644 tests/smolv-dumps/2016-09-07/unity_s0-0001-32333750.smolv create mode 100644 tests/smolv-dumps/2016-09-07/unity_s0-0007-3454fc86.smolv create mode 100644 tests/smolv-dumps/2016-09-07/unity_s0-0012-fba002b2.smolv create mode 100644 tests/smolv-dumps/2016-09-07/unity_s1-0000-5ca04fe4.smolv create mode 100644 tests/smolv-dumps/2016-09-07/unity_s1-0002-8d2ed6da.smolv create mode 100644 tests/smolv-dumps/2016-09-07/unity_s1-0017-6c18345b.smolv create mode 100644 tests/smolv-dumps/2016-09-07/unity_s1-0084-ffb8278d.smolv create mode 100644 tests/smolv-dumps/2016-09-07/unity_s2-0031-412ed89d.smolv create mode 100644 tests/smolv-dumps/2016-09-07/unity_s3-0028-e081a509.smolv create mode 100644 tests/smolv-dumps/2016-09-07/unity_s4-0004-6ec33743.smolv create mode 100644 tests/smolv-dumps/2016-09-07/unity_s4-0006-a5e06270.smolv create mode 100644 tests/smolv-dumps/2018-10-27/dxc_imgui-vs.smolv create mode 100644 tests/smolv-dumps/2019-05-02/glslang_spv.subgroup.frag.smolv create mode 100644 tests/smolv-dumps/2019-05-02/glslang_spv.subgroupClustered.comp.smolv create mode 100644 tests/smolv-dumps/2019-05-02/glslang_spv.subgroupExtendedTypesShuffleRelative.comp.smolv create mode 100644 tests/smolv-dumps/2019-05-02/glslang_spv.subgroupQuad.comp.smolv create mode 100644 tests/smolv-dumps/2019-05-02/glslang_spv.subgroupVote.comp.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.1.4.NonWritable.frag.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.1.4.OpCopyLogical.comp.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.1.4.OpCopyLogicalBool.comp.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.1.4.sparseTexture.frag.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.320.meshShaderUserDefined.mesh.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.AnyHitShader.rahit.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.meshShaderPerViewUserDefined.mesh.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.meshShaderRedeclPerViewBuiltins.mesh.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.meshShaderTaskMem.mesh.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.perprimitiveNV.frag.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.subgroup.frag.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.subgroupClustered.comp.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.subgroupExtendedTypesShuffleRelative.comp.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.subgroupQuad.comp.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.subgroupVote.comp.smolv create mode 100644 tests/smolv-dumps/2020-02-13/glslang_spv.vulkan110.int16.frag.smolv diff --git a/testing/testmain.cpp b/testing/testmain.cpp index 81aa90e..62bd08b 100644 --- a/testing/testmain.cpp +++ b/testing/testmain.cpp @@ -82,6 +82,100 @@ static size_t CompressMiniz(const void* data, size_t size, int level = MZ_DEFAUL return (size_t)resSize; } +static bool TestDecodingExistingSmolvFiles() +{ + const char* kFiles[] = + { + // files produced by 2020-02-13 version (SPIR-V 1.4 & 1.5 added, encoding version 1 with new instructions) + "2020-02-13/glslang_spv.1.4.NonWritable.frag.smolv", + "2020-02-13/glslang_spv.1.4.OpCopyLogical.comp.smolv", + "2020-02-13/glslang_spv.1.4.OpCopyLogicalBool.comp.smolv", + "2020-02-13/glslang_spv.1.4.sparseTexture.frag.smolv", + "2020-02-13/glslang_spv.320.meshShaderUserDefined.mesh.smolv", + "2020-02-13/glslang_spv.AnyHitShader.rahit.smolv", + "2020-02-13/glslang_spv.meshShaderPerViewUserDefined.mesh.smolv", + "2020-02-13/glslang_spv.meshShaderRedeclPerViewBuiltins.mesh.smolv", + "2020-02-13/glslang_spv.meshShaderTaskMem.mesh.smolv", + "2020-02-13/glslang_spv.perprimitiveNV.frag.smolv", + "2020-02-13/glslang_spv.subgroup.frag.smolv", + "2020-02-13/glslang_spv.subgroupClustered.comp.smolv", + "2020-02-13/glslang_spv.subgroupExtendedTypesShuffleRelative.comp.smolv", + "2020-02-13/glslang_spv.subgroupQuad.comp.smolv", + "2020-02-13/glslang_spv.subgroupVote.comp.smolv", + "2020-02-13/glslang_spv.vulkan110.int16.frag.smolv", + + // files produced by 2018-10-27 version (have subgroup ops without "efficient" encoding of them) + "2019-05-02/glslang_spv.subgroup.frag.smolv", + "2019-05-02/glslang_spv.subgroupClustered.comp.smolv", + "2019-05-02/glslang_spv.subgroupExtendedTypesShuffleRelative.comp.smolv", + "2019-05-02/glslang_spv.subgroupQuad.comp.smolv", + "2019-05-02/glslang_spv.subgroupVote.comp.smolv", + + // files produced by 2018-10-27 version (SPIR-V 1.2 & 1.3 added) + "2018-10-27/dxc_imgui-vs.smolv", + + // files produced by 2016-09-07 version (initial) + "2016-09-07/dota2_14074.smolv", + "2016-09-07/dota2_15212.smolv", + "2016-09-07/dota2_20451.smolv", + "2016-09-07/dota2_367079.smolv", + "2016-09-07/dota2_824933.smolv", + "2016-09-07/shadertoy_st-ld3Gz2.smolv", + "2016-09-07/shadertoy_st-lsSXzD.smolv", + "2016-09-07/shadertoy_st-Ms2SD1.smolv", + "2016-09-07/shadertoy_st-Xds3zN.smolv", + "2016-09-07/talos_0A38A8F3.smolv", + "2016-09-07/talos_0C958994.smolv", + "2016-09-07/talos_1AFB24CF.smolv", + "2016-09-07/talos_7A632EA9.smolv", + "2016-09-07/unity_s0-0001-32333750.smolv", + "2016-09-07/unity_s0-0007-3454fc86.smolv", + "2016-09-07/unity_s0-0012-fba002b2.smolv", + "2016-09-07/unity_s1-0000-5ca04fe4.smolv", + "2016-09-07/unity_s1-0002-8d2ed6da.smolv", + "2016-09-07/unity_s1-0017-6c18345b.smolv", + "2016-09-07/unity_s1-0084-ffb8278d.smolv", + "2016-09-07/unity_s2-0031-412ed89d.smolv", + "2016-09-07/unity_s3-0028-e081a509.smolv", + "2016-09-07/unity_s4-0004-6ec33743.smolv", + "2016-09-07/unity_s4-0006-a5e06270.smolv", + }; + + int errorCount = 0; + size_t fileCount = sizeof(kFiles)/sizeof(kFiles[0]); + printf("Check decoding %zi existing SMOL-V files...\n", fileCount); + for (size_t i = 0; i < fileCount; ++i) + { + // Read + ByteArray smolv; + ReadFile((std::string("tests/smolv-dumps/") + kFiles[i]).c_str(), smolv); + if (smolv.empty()) + { + printf("ERROR: failed to read %s\n", kFiles[i]); + ++errorCount; + break; + } + + // Decode to SPIR-V + size_t spirvDecodedSize = smolv::GetDecodedBufferSize(smolv.data(), smolv.size()); + ByteArray spirvDecoded; + spirvDecoded.resize(spirvDecodedSize); + if (!smolv::Decode(smolv.data(), smolv.size(), spirvDecoded.data(), spirvDecodedSize)) + { + printf("ERROR: failed to decode smol-v on %s\n", kFiles[i]); + ++errorCount; + break; + } + } + + if (errorCount != 0) + { + printf("Got SMOL-V decoding ERRORS: %i\n", errorCount); + return false; + } + return true; +} + int main() { spv::spirvbin_t::registerErrorHandler([](const std::string& msg) @@ -501,6 +595,11 @@ int main() #endif // #if TEST_SYNTHETIC }; + if (!TestDecodingExistingSmolvFiles()) + { + return 1; + } + // all test data lumped together, to check how well it compresses as a whole block ByteArray spirvAll; ByteArray spirvRemapAll[2]; @@ -513,7 +612,7 @@ int main() for (size_t i = 0; i < sizeof(kFiles)/sizeof(kFiles[0]); ++i) { // Read - printf("Reading %s\n", kFiles[i]); + //printf("Reading %s\n", kFiles[i]); ByteArray spirv; ReadFile((std::string("tests/spirv-dumps/") + kFiles[i]).c_str(), spirv); if (spirv.empty()) @@ -532,9 +631,9 @@ int main() continue; else { - printf("ERROR: failed to calc instruction stats (invalid SPIR-V?) %s\n", kFiles[i]); - ++errorCount; - break; + printf("WARN: failed to calc instruction stats (invalid SPIR-V?) %s\n", kFiles[i]); + //++errorCount; + //break; } } @@ -551,6 +650,23 @@ int main() break; } } + + // Dump SMOL-V output to file + /* + { + std::string outname = kFiles[i]; + for (auto& c : outname) + if (c == '/') + c = '_'; + size_t extPos = outname.find_last_of('.'); + if (extPos != std::string::npos) + outname = outname.substr(0, extPos) + ".smolv"; + outname ="tests/smolv-dumps/" + outname; + FILE* fout = fopen(outname.c_str(), "wb"); + fwrite(smolv.data(), smolv.size(), 1, fout); + fclose(fout); + } + */ // Decode back to SPIR-V size_t spirvDecodedSize = smolv::GetDecodedBufferSize(smolv.data(), smolv.size()); diff --git a/tests/smolv-dumps/2016-09-07/dota2_14074.smolv b/tests/smolv-dumps/2016-09-07/dota2_14074.smolv new file mode 100644 index 0000000000000000000000000000000000000000..328d0ad021e821876cb96400860d075c5c8f6769 GIT binary patch literal 1543 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 K2PQ@n;qX6z=zeej literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/dota2_20451.smolv b/tests/smolv-dumps/2016-09-07/dota2_20451.smolv new file mode 100644 index 0000000000000000000000000000000000000000..9edec6358f945dbf164387182da424ec67cd91a4 GIT binary patch literal 7944 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 Z$OKVI6H0n5-a=Z@G24Bu!u$c?e*rq$v+e)@ literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/shadertoy_st-Xds3zN.smolv b/tests/smolv-dumps/2016-09-07/shadertoy_st-Xds3zN.smolv new file mode 100644 index 0000000000000000000000000000000000000000..1a9048ac50a35762fb350886894ee503f7b2fad7 GIT binary patch literal 13324 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 literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/shadertoy_st-ld3Gz2.smolv b/tests/smolv-dumps/2016-09-07/shadertoy_st-ld3Gz2.smolv new file mode 100644 index 0000000000000000000000000000000000000000..61b290e889fa255c8931f86c1854dfd8553af551 GIT binary patch literal 27912 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
k4{^SU-~D;vt1PUxM<*7s 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

V5u(C- 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 literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/talos_0A38A8F3.smolv b/tests/smolv-dumps/2016-09-07/talos_0A38A8F3.smolv new file mode 100644 index 0000000000000000000000000000000000000000..3ce82fd52afea74ace4882f6519f723e3b626a61 GIT binary patch literal 5385 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 HC5!$8Fa<0R literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/talos_0C958994.smolv b/tests/smolv-dumps/2016-09-07/talos_0C958994.smolv new file mode 100644 index 0000000000000000000000000000000000000000..32d9f0318f4d1c8b8b1bad2cba6651c1e5ffa0aa GIT binary patch literal 351 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

2g~;a@M6MfLH%OkfcpUMp?(0hR-PZ|2 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 apZjw&Uf{$8lds(Nhn>E-DS6M40{;szUY;)i literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/unity_s0-0001-32333750.smolv b/tests/smolv-dumps/2016-09-07/unity_s0-0001-32333750.smolv new file mode 100644 index 0000000000000000000000000000000000000000..9436892d6fa4122080a5ca4378a0c1a9d2f877ae GIT binary patch literal 391 zcmXw!u}T9$5Qb-GH+z@6m>ep4u?Ru1un88X2od~VPWrsSos3(CipM&7vIeMyBoBRLja`B zWICm5D!WRfPBQ8xBbiJz>}jZ_8^f`fuU%?L{-MZZC~guxv}I{m>K2uWEb6pF|IBZn z%%6GWDyVW6>3$Qsgv4ljAQIAu@vxwbTN22SC<2F!NjjXZ#5+b@Q%gibe R1F@;fWI0YZ8QfKF`5$eAMp^&> literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/unity_s0-0007-3454fc86.smolv b/tests/smolv-dumps/2016-09-07/unity_s0-0007-3454fc86.smolv new file mode 100644 index 0000000000000000000000000000000000000000..033a47ac6798452affccc2caa80458273fab279a GIT binary patch literal 1516 zcmah|O>Yxd6us}xV`hk>FeM?5iDbc8VNp?I+N5ISU^l_R4LEU>c+xD8hKVzQsm3#5 zJOsDDpqsX;Ds^2JWzj`(tx?t5!m;3>CRTupM?Y%Qe!3D&#-+k|$bMD9cm{xmb z13=JEhZwRJi~)Ru;tvCxt&LW>pX`)p=PJy7FG2iu0_2~+{qVO6xyt4G!s^z|y*u}H z@d&>@-fTGw>x+&z*bDrwpEz!k#QwGuL|r%WqY&mK#pt*ley~*0yn9Eouh>x zI&1BX<<4?@HO*$9BG3-~+%-#z6iJN#%&!vk+M=77D9{3gyKip4ZH|#sT7p{*|Pv!rfce!|{z5S`zO*+vh zQ5@`$1Tr-r#?T%zb*kz_nG>sbdBex3XMC&Oxa#hBwEiwls{Y4ho?O~)6!+HL*zNTJ zX7VK9W|zs_3LHAjO)pNo0fUk#S(J z(&VMA?=x<14TB$~;LTxhmcgYxGPI>^_sb2i?_|JoNRKD%dISL&lSME_RKvjG-b4*b zAW9z%{|x{%q$vzI3(Yb@j=rUwpuSOkz@Kv4jKfkn|oK_M~+!p|yX3|S<}sowYp80Lj%p2sW{seDNCX_nG32-OGop6lb>=GtjdxCt zPiR^V@su@*_z>}oIFM8P)X9H}>H;8AqxmF*zo4N}7Nu-mK!pYTv}=Z5k}q656s@PCe~v^qQqj02D+LpzsE(qk z!ua$^BhCC?m1;AtRdt$_f&_39{9 z$ht+691P$#ms!Z8Pu`JkK*MxCGgK`5*<#Ka8o;yDgj>4k`ildl?3?}Be153-nuoU2 zoIJGV$eZcQmYp?BHctS)0;oFsy}6>#qCukK>TSnOg|U;RJMiEZGY7^}L*qkZ`(<43 z^9WjH3>6KxIGs7*lqe#Jcpwo7Vkh$Dd@h$M_zOJ?Ju0xVZQYpKL zIK`mgp2CpGaZeGejA)efarMSAiTEFK5OF5BHCa9URz6i1bm~s45s_qLeK- zcz(diN^8xH(|Ihm?_>&DY}G<$rsPqy)GT&EGX5jRQHh^m?21Iele#K*g&Hc(Be0^U z{U37T0QQyQq(M;nM-ryoOcgk5nb48~PpQ^#<-RTp4!JBgOnQY;>>tKJ`Jjn?B zD4Dpjr{19IS1wuiq<3(3F6(9hs)RK{8Ey zBXE*qxAjf%BM$T(0JBqW%K)1#6o}YeQc$N(#dJXK^CT+hO}qsSAuR@4!cKyQ8XffF z5q;u`ZCQguhhIG+Oj@XV)IJ8V3|(dj*`7TETFlVQn9dXS+rUvte!pU2HKHF?D z>^&Atz^|P0+42r?RM_`hLeK!MOI)!X-|DtUU4%z_AeU&da>Ui?_DP1gPE@D;lyR zR+#aGZdrhyfWGZZoK`Sey8}15Y(>Q|jP@Y3cEcL;jeTeiP;WX1utNBcm0o9AG%m0r zgbdlh8liv^sxhw$?Uq7%9cb1boGY=U-3e|2uyhvrfn#sZa!T-J{NNerjJcl;pAr86 DSlH(L literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/unity_s1-0000-5ca04fe4.smolv b/tests/smolv-dumps/2016-09-07/unity_s1-0000-5ca04fe4.smolv new file mode 100644 index 0000000000000000000000000000000000000000..9eb549937b5b37d326edbc162472d7cf4b459be8 GIT binary patch literal 193 zcmebA_YG!XU<5)A23`gTC}Ct^n8?I<{9 literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/unity_s1-0002-8d2ed6da.smolv b/tests/smolv-dumps/2016-09-07/unity_s1-0002-8d2ed6da.smolv new file mode 100644 index 0000000000000000000000000000000000000000..b14ba593b4c4aa090aab1ce0ca4438b1890fdd2f GIT binary patch literal 468 zcmYk2&q^Cn6vn^%<#IcdrZS9als1HzwmXp&%wjeJ{u#0vNinH(cRSi315+brDtQE5 z6cJxQ7rGI;t1es!F1qhqbW^(M3-pZH^jtXH^L@W_?%~G0jXt2{ICza|eAK`x)lZMz zxF0W#^G{35op#}!Yp6dnTK|5y{A*BOIHz_l9CgDJw;S7)%~d;`>}Tmtn%gAL57KR$ zjdqee9qpkbL-9FD_lh|kN75HN$&$Q{s4T_1ZZ_IZvT@;V6+#hqL-@gP68F~erZUwK zRpm16ecQIORy6+~T0rmXk`Bjq5Pewd^)}ZZSC1A%>~GmYaDU%_!drQY? zA^l*M=D0+o#89{I1MS@TAU}E$|V~h{R@7$T`&bAIahkL*8 z{GU5F9oe^cObCg8De5zfS4e(u(a^})$maRl;mzIKI+=S*33+X`Qomh)`wuNv zosn>M$6|qgh z)oig;VVB!hLL7G&%Eelzm{^6);dytwFg37m-~PdF)+jVXj1HBnhl=HS297Ymk2_L2 zdaO23EmwV$-Xs%}iLp6v#^6F+kc<-EW99ks%#1r*Tj*ZsK3*x+o^l_p`sKspRpUo& zXoV6#g$E#loVIkja6OR+5JVgI7HY?R4`5+;U2D6$1;E}o&;_$;023U@1SnOGVt-mP z%1;n|Y_2%t8Gf`nZ^}5q3Z{$*E^*)X7b{0SVMwkfD4;u1nPO8zCYF;27D;aX63gjD za>Wv|zgF`qV2xY7NScsgcSADSNTL#xa$uQiB#l=<0cpl>W-&HbtqqoZZ^j&wNp3=V z(Q<50zb}LV`HTc507OR(*c1m3h2U*5a93oWiGz{(>NpsgTQP6|>kS7X_$d@2g7eXZ zx#JK&u?TF%z_Bq?ANBl!;;iRGeYZL6Al&iNtcU+683@j5sS;uV$isC9s`C+egf;6! z9rVhzqTxl-UJXcGsBrU-w5KvgyzLY5J|w_dk~A6 zcWo7gkK+K6D0~IL-HW>m_W+h+;s!)4B9egCEr_v6cf9By^>D2TE8DihYSPvY;$d{~ z+&e7UVc}k~lr1cAw-6%&SFk0ZC=9ZK?<_PM^Ti_g#n(Wht(DT2MfG=x?&KgQL?}(b zAnHlU;UW1AR(1A&R`n!lX#L8ij$=XUic(~S$V6E$roU`~a#dKaLW!1Ys~5#3<8mH(T$XoJV73i7V#H&Q- z6ww9J?N^9&B2PN$q)6vUCY?0NE2OphfT&$uRjUb>;uE5b^({o^_B>Iu(?Z0&ysFj^ zB0+BrVO|1c25Y_>8C%a+1AO2xF{icDqxAC$(yS}RJ46rWN%T59Nn9bN392bJaZ*Y< zsf=b*{-!zn#1e7oR3FmeXY$dh1HmeT_|wi~L{3i{4qEl4gk~nm0$jzZ5`wHTHDQmc zn~_t-=yDc$CHtJ0B}pfhLUhfw_uW)U!V_#yUJJJ-M>NYxr_qMhDK5!LE3@X7a0)On ztq8p}ee?C#{m#y;$loQk^CQAQ0Yg6dP`)XVaekJR$fpwe3r$}pL?VZ2WN0VH9`DHI zTC;b^3Ubr99Jd+b0{Qy3jupGw3;Kdu|Y>w#y#Y3@mI1fLe!tsFCpHy1kG%sx7e!>8;n z4rl}D37tmW`&|a@3#x&6^YVO7%Vi0*1^KiK*^7+(FnZHGGnt&7;b_gnNv)9_gaOQ4 zv(W(Pti%Mk`#kRU2v%q11!)Tv;+taly8%w?p?@q)@*oG=1mFh>k)Vxbt>nfJ;WPZU^e= zqo=tYDm?Y}X`ULr#)ZBRYQ9bky+H`Md&xu|2nN!NMA5lFVXNsc`7A2B_a-X%N!tGy rf5X84m2qSHaspoUM+uyNHHfcHsTDeblhyKzRJY`yEpjilJ*WQzdn^D= literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/unity_s1-0084-ffb8278d.smolv b/tests/smolv-dumps/2016-09-07/unity_s1-0084-ffb8278d.smolv new file mode 100644 index 0000000000000000000000000000000000000000..327e1a340e858014dacfe51514cf1976568f5f9b GIT binary patch literal 13718 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 VjG7-L?WdC$$Tu!kKUcTT`5&TbcoqNv literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/unity_s2-0031-412ed89d.smolv b/tests/smolv-dumps/2016-09-07/unity_s2-0031-412ed89d.smolv new file mode 100644 index 0000000000000000000000000000000000000000..734efffc62085c0e2fedf01743b09d7f933758b3 GIT binary patch literal 5685 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 Q6(=IqO7D(FHse(F|1!iauK)l5 literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2016-09-07/unity_s3-0028-e081a509.smolv b/tests/smolv-dumps/2016-09-07/unity_s3-0028-e081a509.smolv new file mode 100644 index 0000000000000000000000000000000000000000..682231d6a5e4e12125b037c411fa4024c340559c GIT binary patch literal 5126 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 aG&cpn7Y-hjV1~NuweEnr57n#AOY09CF=N*N literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2019-05-02/glslang_spv.subgroup.frag.smolv b/tests/smolv-dumps/2019-05-02/glslang_spv.subgroup.frag.smolv new file mode 100644 index 0000000000000000000000000000000000000000..c6793e110cbc8e1a6d9804fe9de9676a02190c52 GIT binary patch literal 291 zcmebA_YG!XW@O+1LO})yC}Cn?n8?I9k;(R=0F%2cJE_N0Upl&5ThF-Z2HUPloH^=}0 literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2019-05-02/glslang_spv.subgroupClustered.comp.smolv b/tests/smolv-dumps/2019-05-02/glslang_spv.subgroupClustered.comp.smolv new file mode 100644 index 0000000000000000000000000000000000000000..55ef95359e6effc163f1b992df8d416477650854 GIT binary patch literal 7035 zcmZ{o4Nw&48OL|ueQ)nLm=*!i!@R_8f&d#>V;$@Cd7gdW^I4?g z;qC78|Lr}y&u{nKS+k#-V_2r)gP+U7pg+$Q8b+Nk>x92fOsf-*pGg)oX3d#3sj_Op zq{+G8#hM0bn1kQ)$o|$({$(5fq|-u<@R{aTpJ=t-OPDdM_{qYe;>s6G7L-;LS60tk zSh2WzN%6dr%JTV`{_y`*%zvf2vZ}PAbOBc7O8E6^N%7xDSxfh$Q=zUr&pJil~z<5Q*Z(Qlub6A1rrv^^#UG= zYQ12=!U9;x4d9!SsuK9eFw%@*;A=)5zeF(X+TLBk9t)8DbMJ=xBJl5s|I zO=9AGzZPPv6k?yS#~S&i;a#ePU$)#X z#AEO#U0xC*C2i!WLqd%HcD_iuZ|eOb>7Y!-tN{=@k+6OQ00DUlf)ixm zVX7>EYFm1Ql?6W7q9{1Q4&>05X%S$I9tcGs^L@sc!WiG<3|leEke)|d20|%N{U}T4 zv-Bew&IhlEOqYR->`XINi2hJ2R6M~F1uB6>Kg?FWE)CAK1KHVT8uVI-z4nJddE+UT zo27EWnKCegDhr^R^;&P@rX1Qdtq7a#4;4Y^83vilAV1*{-Rw4ih(I1~>JOzs`SUFP z9E(4j?R5LO8F>NP&B=tr4ei=cGM`1}sR$Mo=cslMn8Ah6Z;m+<`Ym(%ErY_BS@0zl z3@(&`QmQO~YS!;5fIz>rX&Ou;_PYc^RSZ(eAd5Lf_ZtNW^h=xiLnER5brye(#ebRO z^xJDjmO{UInPxhUaypd!iba;G2o}AWr~18N23MKTaGp5|8eVB)#{;32Q2Gvwu2xZ~ zm4Ou|6&FB&^;{!pV-9VbR*N7Q=~@WZGf*7|t#yHP-(fMWT#km(k%Wzgn*rq;Pr zphev0LGt-9OMapE2GSldxr@5z>qOx~50cPF8RgH6((0ny9TjUFVUzhwE7EPujO zO4nME7ocZH=|NKZEX$lx8C3c&rgnORg(h*Q2Se!e1(y7qN}{;uOzxxZc?VIr)Pp2- zlu`b{C~Yo^?zxF5j@5%?br;LWSiaL#TDMw}rO>mZbu^4x_p!`Xl|ik0Ozrhai!5?^ z9Sx(`->~dIRhHBpaOtSqZgW5`ucKk~`W6HIhl6goK)Ulj2jqAi4Wrj4e7(>&OatEI zjg~&j9qsiEi+SBaUgLKZ9rCCUdc8tuub0W8UU!h!Ni3PDcL!dt7Q=b{K2f;W9prTy zqogv*`!0&^x`8N;*B#__faULJ`3*vO{i$SLUk>A4dMwL~Q5p1lv(R4el|#M09LD?f z!z}rb-Wz!Rkr>YFBShg|Uk(=mWfG%IWRy=`6y5VVqBwWz%VE4z=d%1{mftOu*Ow&o zx;<<|<_9b@Rb|lYMxnj#mP5U652M$QvE-wAZ{YPIF`U;oiNd{Z597_ckWpqZ$`Kbu z_q^J3_io)D#=G@wmVcV%PYUIAy@z?-L0U z>+@o``}Ix-(id0UdPDmDweF&y92MUxs22ov?x)y*D>w`FUxo989(7=Gu}lrevM@YRR(9gKR)BYowHI-rleuYLi$tQDy(0mI_aJ;OP!d$JA<_I~db>*3go^)nSf99%E+3nMInp$;H$MsFg8W(*NMl zCPMljK9=&vv7I`fBh)Uw~l_u9` z*CTR`C|rwf(xQM-9%qzh7eya|WeIr19WA;^iziwBM=XC#_gs^}wCE-+e#|nnRR*>A zQtC_px`d%xbdwg(u;g65HyFsXa=1(XHllDXx=D+lGs^Rfa?wT6J?|xoqeVAqQOfcQ zSiW6raX5jUXVgN7jR{vtiajeV?s#kAEpL|b^N#lK=h-H0l$s|!H&w*Lp6Gh4?1 literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2019-05-02/glslang_spv.subgroupExtendedTypesShuffleRelative.comp.smolv b/tests/smolv-dumps/2019-05-02/glslang_spv.subgroupExtendedTypesShuffleRelative.comp.smolv new file mode 100644 index 0000000000000000000000000000000000000000..79e9f4d7acb8f894b8140b25d370e91a2f30e498 GIT binary patch literal 4855 zcmb7GeQ;FO6@T}>m$w_p;D&q?65?Bv)NRX>S)rscsnQSx(?U%}$2wgXvPrfE60;kM zOr2WlFe#;xrSYq#795*WKB7iqQiYh(luC>8Vf|=#hf=H6@}VPG%O7a_JNMnY+1=<& z0e+mf_nhDF-Saz#4UNmc)}-l7bK>_0OcTE@dNnP|S(Il+`Sd8ykMhbWuZ{9WQGVQt z@>AB^uBH_${WsollYil=P{bdObaVw;gTy`V;!7Hv8s~;1&2z7rKaY;K8yb6mMuu_j z;4d$j+O(`=+{kt^w!_H}>PIt|H2N3c`b~ehEzlh7@(0&3V;a5Hu}Ub7|AB z)*#5~=_>n4Gqfe84$ZAGw;}#GncKzOW%z?amuaE)O3l^pm|pZ#&UYA`4|B6jtK$x{ z&R}MBCTG=|27BHxO}fx9H=JyQ^K4_7bEk%<9C~umS)O>JvjTd$j?Rk26P*=X}l;bv&!A`bwS!?J~URDs-S}c%g_$X5-mO)*$C3^B|JVk(h~t zT&ki2ojy=i-LkBl5k4b_Dso47ZjN4edsZG!^5`TVCwX*IfRh3`Da1(uv2UjaaZrRz z5oKl}QzSBEKMsnKDW=S9WQs+GW`TneWJ)MgicE<nZ!N*-DH~C?gX&BscY0Rux;H#Wwm6unrY>oj2XDaxjz%U!`F+s&@OByNajx+Ycr+e2Zk>jJOh@ zx80O{S=I1>P)X}}5GvI29RS_=+khV+m2V}hsFp{CN}}g6@TuoEfcPyyD?t2a+4BVR z-Dz0m-U^l@CVT`w<)EemAkG?qzLKcwJ6<{B6U-epEw7j5V#Zx^#wWq-LgjjZnCpP= z0`9P3-6cxvQJys9ccEffH6m4ekDT&(sN4hAMu1fA1%3cf>GzUVRL_^7!mS38qB--J zCl~db0pj-nKLUuqiFxIqx$jO4I?;45kBg?aN>VT4{Qxz+g{iLlIK3&Y>wZwF>xU%u z0mKIZdfzsdeBs2Xg-lx8gOH)Nw*z$T$ADh|B=cyBjOu$-$Rzq6g8=ot6Ci;B;8y?% zJfZrY;J)1q)2^vtdG@s7RvxOJ1c@%F&E3y147`TrW8gzfO&shYRF4A0 zeij%3P;6LFGf`a+M)J%_2}2jT+5@CS|F+LV=>V7q0a6+VehY}={V7VS|4XEV!3!lC zydLx9gYrj!Bwhp#147~utC5q}(HcgdaG+O@3kQx#+RKPX0pY-rgaduLcw4#y{a}*= zuS@o;h_3heP?I~8Y)L7?!G`f(7+0@1LqSv0QPxQ zUj&H#5%3=X#fJ3(6V>%#B<}zzVFyI6_T$73Kahzkc?k~RbJ3P3opg)0a84Dq&f2l~M# z2MQ!R4>2DQ_uj@o&4B@1DcylVD3JqYQmGVij#7FwMM*g@YAYoi7=r{k@Hr__fmo>| zo=^@<7`{E+w90q$3RWbR;AJ>h1l~N!n~UfLP-j@XI0|j={%pASf$81N*(|KVGx+x_ ze!!ms--r5Y$^R1KLIBl;6rHDf%{ddbv@!DrF9@x zOZo5#X<-v=Er{Hg5%bJKLpMs1rHIRv$R8kL_p>yEWXps{EspUt!LutiRwUiUj z*;6I)Dlh@F^p zVw)KkPHdCJt%y-TIMEBDbmC$AjZ>W14n8^Yh~z(n_%I-P?F0W)oY-Y+O>trfTI9sz zQfoWn4yE<;R4wJi{&Xh}LWG>yB}H~3{#uC)B%FBB^bP9RiM@ISD-k>vAXF0)H6w&rAMq5T653ZCLxjr}BCrX(!$z zE$oDytQ{vU+KG$M8VC3HQtNk!6H4oaR4wJiMhCR86SfvadK@uNDH?i7iu?)jh!Qyr z5xbvW2Rg(~Ogho$hzloPk;LPOCjjBZ(MczMX1{TY6OV&WPW)B!-$48eAbNc@_4ZtT zPwcU^rZ}+=TI9q(q}JaN-&9&BQ?-;6W9d#zK!lt)BSrp&cv^|PV>|Ja(jN1FE2lW& literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2019-05-02/glslang_spv.subgroupQuad.comp.smolv b/tests/smolv-dumps/2019-05-02/glslang_spv.subgroupQuad.comp.smolv new file mode 100644 index 0000000000000000000000000000000000000000..e2de081facc13438e0ef73d923821c7a247777c3 GIT binary patch literal 5563 zcmZ{o0c=!v9mn7My?_6`LY>!MxfX9Nr8ifa9E60 zV>Try-K-c`i$Jh42G~_>mO==$ld(x_hYktr3_6VMW7A18+-Bz%!dztje*gdPfBnDR z!ST3z?|r|Y>+ik)eR`qc{#8wm=Q<&LYye07DO%<@ec<-NoIa@TgW6ZZP}k7Za92m? z+Pm&v@)^n;5{~=t+p@&l<4?aQojJLaAo4=4dpHE+-V-@>4b5MyZ*1<^(6V;jmgbJG z*7aL9b!~2LZRu!VL+y`3w@7@at7WaTL}29MmiCPlT@k{6+Bbf8)0&pf_Dy)GYYrY* z|Lx``rmjq#TUqNokQ+SN)c(jiXGswrT;A2zwr)#@a}Vv%pSHUlz2o9eyV;>D&}DW! z+*yk|OJek*rLzT}9H+nuJ98@>Oai^SL%(u_Qx_Ia+;QV!^|utyhh-T?7CPbmIdkX# z4B)T;I0drQsex=+BV4&O2i&DO!hKFiNmCDkC>;gJ6Q=-5U3?W0_>UBW0AIitQQ-sR z7tAX>15otI8pxf$^iz=goQP1@L5RA6cs!4QG#DMDF)$ONeS!l9^6@}ErRji2JCv%) z&5evgZiEsAqmUo*YHrV!ctp~Xd3Z$9ktiOC(vd<`rzX$dJ(hjW`NRlirM=ey=6x8i(NC2o}Fi(=%59N)%q z3jCmo=ezF4A9HcQDz^{^>~{5p-5C7|*Lt{yIT73Ls$eaKtr>TKI$5dCRqrAQPPq$< zyBX4FLv{urX3hfy!9f*dI#Gy?pL2V^-QMR`=}`wExg5+&9g7}xh3LkS4`TQb7oXzd zUkf4v-gkRc;}@=3yCXnL$6mZ+(WCgO7t@KO*c@WYuTzwIw80$e{L;0TBJk&I(&Fj0 zJQh8rd8d#u%Dj;juhH<12YBX^T(fv%(J@UL!}jl(G@c?A7}E1Duk@RcT!5EHOUhT0 zI?uJ2@VNxHji`c`+!Wmlc>tR>(pS-rvee{h~;^?K@#pYc9^$NdE9>KeD+ z+FHJ{RuSh5IZxKw3r1T5LdhbaEk8lp zD&bzSc^}eNKV;I@Neu~T%U9aElOdnBAx8obGwFneXl?mQTZ_4!u-ikx+PWyLHA~t8 z7!tnHR+5XATvXcX7sIM?42-s>#K#vgX$xQweC4fWjJY?3sTcUAXh_*)1TvXx#zM}T z3*ZnUNnI-#S(`#O3OE1*3VAkwG#92jYxbukc>(kzYz$#vV%Vw_tU$m%IH+Lff&H~R zE6rbD)(-$7{*DGNBbs#IVzgBbWL2i-1{sNi&^^78<`>T}+Ef&EK5X{hL6v6ga zJ9jr&-K)Uc& z`aTmLwFox?1T*7|BG~@g&fOnb-EAJ<$Ny%f`KyQXKju97>oL#xt6OIF*Dh}DH1C4` z+TmsL*B(Vk_t!oq?6nBH0|YbUfFjubdXl>btZu)@{u-8P{yM_>!<;97J>?mHJu7eJ zucO@im3bfX*MOJFUw_b$4E{RKkYhIFnE=F0dRaqke~of`#BQJT*k6B_)|%D+dO>P` zJsvq;-t zClN{hdYO?IQ%LmJaq+A|o(~|+h1qW*wZDcDHiodv40|;NLw^m46AE_8toy<2G=E*; z;xs<{xFr|J*xx+kuM^ps{q;|7y}>Q=*Xv#;e~l|by1(9L!dn*M%>cm+{U=4R{q;U~ z-?O^!dhD;MY-=rOe|^CD8=NP9T~FQmtJX!e{q+&IZkl&Ne|;FZEyiEh6(QYU*`UAO zNPMPiOW)wO3wy1Y86OYPTCx3g8+Sipb$=?@U%jC;e?>S?|HGl~Bl@dX7=QJLGW%;j zw~EZWpuhHtO#T{Dgmix`WJ0M$crrjRGoDri+h2>gTW)oq7VNKyP@2CMb3Va&^4E|s z{<;{tmA{hQt2FOJ{yHWy`ODXk4E|cikb7;&XaHg+eMduVe=X#W3IC-}LzqSpP+ Hk{-lHfyRrw;y?w)7*^%yn;h~X3UES$yribZ& zJpU6hI+W`Z^^!u~OlJl;^l1E)uC1Q{I|BJMeO(8zu1v^ zoAg5Dd~&3}zi&7zcC*2s{yO0rKt{$GNXCdUEHZkH!G{{AyFSd`bS_PU5CLI}O|^nB zcNCZuS!i$q*N+;+az5U-{XTg50UD(t^-)8>y5XC&eURMjGd#VRF1HIyJUlt{QF zmEsN0p{&j$mdOi<)j%`9q#q^EAvV(_DDNSb2P!K4Un7PdNTF|Y!xr>il77iF*?yWU znu?Q%Bq}*28o7qNTt>?tE_O5@}9uSK(;17RnHpwsY`K9lV3a9|C^brz#%7aLv}3pk1*&o>bvP z6v`2IK7xq0OFgQo-7Y0DkYMUzP4zO>=ul0M6BTl)W=%a|sE3-FdQ4NJ@uUp5IFuXT zs^gzA@pUh7{8Ku99Fk;36SZ6bm)NU`HbXRbGVz=yCLrEU=_DXP>Fg_{^RmYF8?5~x zV=rm!EMYR-=wMBqg?wJq*sBKX9%JkkjV%y{;T8vTkJqb#9s>*>0VdL#xD3eyG8}EJ zrONA!-q6VF1{pi$AOjk?4)H^jQX^DQN<)Q|a+=E;?l_!xz(EcEL?9*QfK7)BNsVdn z9Rp6oMF)IKgZBuev>eb)>wS&9XOMZg>LBkjG8I{b5cksGj_(674U4!AH=T|>ss%oz zaV}Cs9Sc@bi2fDiQA{2ODoIN%1WidMb@YVU?pyfTkv<0ch^H}r3aBbAP)Sw!7z$-M zquD9L{s@0K>`BAUGfRbW*rsV_b^D&x?2KW5fpO%=_laQ_nWfq|tXrG&8k#fEpD^J- zvj$ql4Q)*CG2$8h?7z_L=Y}1}X@~vHu-_xM*v5ul4(90(L%N%Pr3Ee;fz!BvOJ45$ zWiP!nf=|C-#O`hobK875c%>lrjTXCV#Joq(yx8icOFvB(kiFWA{O3IG5A literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.1.4.NonWritable.frag.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.1.4.NonWritable.frag.smolv new file mode 100644 index 0000000000000000000000000000000000000000..32792f3defab259e467183bf71409ed87c1f21d9 GIT binary patch literal 402 zcmXxezfJ-{5C-ts@7BFj60-3Ro(RW@i6x=%3P?PU!Wa{bCcJhET47-*?0o}Yz*zVK&gIrkzWMEBrkLi*af=p&aLAz@O5fNbdVu)UIBd3>mFsb* zvKv&BSu9EXWTpI`Km96lN-?B8buhOA$eLd zdB4kltv#YjRuiM#M_?*}XDB~}rD`^;SHP#4T!iNBH$W}Tqyo`oKb4}?$T%^^#&_eF zks9f~Hu}b@F*2SS&x|AEr15eaW#D^-yqjBH)@yuLj=jlP(Zm(_uifQ1KklmP5=M^ literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.1.4.OpCopyLogical.comp.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.1.4.OpCopyLogical.comp.smolv new file mode 100644 index 0000000000000000000000000000000000000000..d1b04e96d89dfa15999b8bbbd0a4bfdca7e1a83b GIT binary patch literal 1044 zcmZWo%}x_x6usYNm<}+)2UB7ZQU_|)C_*XB=pZ&oLb`!=(eMDsPr^b-Y`gFc+_*44 zfU?jfVPjlCT(EGh58}!f@SLeb1W$7B+;i`__s)FzW}~^;l73@6@#MMmFf}0ZPR&oN z^^MlXT)VS7w-i-a`{;=IFw*b*y7=_lm0+^8xbj1tQDe-prx$&Z1I^3rgF|Z9eYnln zt+X|Gz)`kgp*pZ@*Et`Dm~mwJwJ#@^(2`-;x}M(gVmUXXds9d5pX+8QNnDt zorFlIkz7t&21!o_O)&}4sA9khg5JqA#1>tzt|}!lC0kd6Kt!!GBUYxR?q5w9>$y<% z+Jaljs{ajBJLnd&Dt2C*{9g6gQT?oL_*K=_FRG!OIUbgYoU7&rm@(f}2Zw5! z^Uu}E4S9nNh_vJlA2LbKHlR zI*X}c%I2Y~puUh)Q(XlUY+8AON`kq|$y4=fj-PyYwJm)GO>T_kl1Hn#V0=Ev8>@O+ z-uIKdthv7hzMZhzai4Qr?7F&pl-CvQj~hv-D5T17z?2?O7@; j=1qk?yn~NnF)P-X+2LYPb5^j2S7H_Rj1@6&i*MXN=NEo< literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.1.4.OpCopyLogicalBool.comp.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.1.4.OpCopyLogicalBool.comp.smolv new file mode 100644 index 0000000000000000000000000000000000000000..916cd008e3d0ec6b337950ea97fa3890e4bba2f7 GIT binary patch literal 1499 zcmZWpO>a|I5WV+s^L%-}*e|@;N~6lk2NqOCkeED6R*{vaiX4JtBUx1|Di#ESlt2g~ zHVWz{RTr%)Ar--%WYH`mHi!ill3B2!i+0&%e*mlgfu4ExiwKN#$M?+4nKO4RyWU)G zsUfYcvg#K#u&h##q5lq0tGDXsw%Rw(%|_Fb+cio*%MO|MZ~pktQ(-Y`Zu|u^thL^= zcylZ=tl7A}c2{Z_9NqH6R{MVEMq2`935ea=-0TBQu(hI8F~f`0ECh5%I1&(xIRX++ zG)&NH%{OJRvH-E`JW)uuc6YvWOTZMJl+Ez7EI^E!Dk{=#cG_{>LW$srumr?nVF8J7 z@dClO^G#Kji`WgGD5C51HC41o&{*ASuim7n05K7bfplu|6qo2^S5ckruwH;zTrVK0 zkCq9j+>mTpfLMbsi<-QMx}>6Yi6-g-#NuuO4!hkZh&Mx0S%6rBPmMNs>2Ic?f`Vsj zfSOWzDyTv8q7(u%sRA{jYU4)(IvDj>)h{3axE#S*Z#v0-(hR|@H=1Or`BCR5z@7p2 z;f=opJiGwL)hlBurc@V59e)bE2K;mtDc6Nb9Vg1#10blv4OdRW2}i#&BSKLO234E# ziLER}dc|>*N*}-oX{vGxu4-MDxwxikoK0HKNb6D+xKNn|_*v>=(urug#t{}-R}y3| zv#!qka-|X1)vK9Qt&3AZoLysfom#gmcc^9DdeynLw;ul0>ewhMCr+j+m$p-3el^VL z0O7H+muiuTNJrCi8$rL7)(auhXc@%R!--l7*7v?mH z{DrG8dCnxnv~l{M5o-(z;dygfm|-~+<#b6TXJSbtl3$TkNto7HkpwP=6A(#ghm|9e zm>WobL(AFbD_ZqidXWOM5lRf`3tPa03ONE|a0{?$b z;Cnu6MxHf>tAl-9WB(r#jln*E9nCgZMMJoGEnK!4a90N0Rr2K5{NXNv--WvpziiPh zhMQ)Cs%Z`oPyd_V*PQ=ef5aM`4m;)^dpj91j|YdF$M#?iKT_ghB6GNgUEP&N+x;P( g3`sT{^}jbhVL<eMbxbQQ=qbfAbi~rvLx| literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.1.4.sparseTexture.frag.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.1.4.sparseTexture.frag.smolv new file mode 100644 index 0000000000000000000000000000000000000000..0fae79474f6b3edd793db3bad9d10ca020d33eef GIT binary patch literal 1995 zcmZ8hT})g>6rOW-7_N7>bPDMqU-cl@u#rp^A;6b zu}IhL7Zqigv}@aPOj=Uu);D`nqNy5-OzK2WOA5PUr+6&_omzk|{;Y@Y?R{0mp?$2| zo3foUf*&($7X*WsXiVn-W3)lr-Jos`Rt|04NPutJ0D|d=p>` zM1wk7G$n%`y~w2x_}CMY z)>PP>6esS66tlFGf@%uD^2;zdyo^jyt%F{!K-QBT&eG3;ULy~J z{@QY^4)p#g_-?*3n{PnpYpmsa5q!mkXxFk9Um(;V_rs!}mSc_DBMA>T>0FN@HrA59 zweImv*5e*RrF@ZKa-L=aT~dw*N~HNHR*qi>_jo6m&pE-*S?L2vYviz&j%g|Lcwn0} z9>wY)?T zfW2}IBQ!(?QbaRkI60CVM0H BTDJfI literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.320.meshShaderUserDefined.mesh.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.320.meshShaderUserDefined.mesh.smolv new file mode 100644 index 0000000000000000000000000000000000000000..42c27a88608afe20eeddcfe03b891b589853c9fb GIT binary patch literal 1340 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 Oimm%2k=UKUE%h606Zk#= literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.meshShaderRedeclPerViewBuiltins.mesh.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.meshShaderRedeclPerViewBuiltins.mesh.smolv new file mode 100644 index 0000000000000000000000000000000000000000..f96301df486a2a6f0efae4ebbbb65534516f98a5 GIT binary patch literal 1385 zcmZva&uIm)!aCoZVpTcLQ?y>3py2&Gq&Vq-epiVEo>W+ot$$?fx6dg5jNU z>otf_jPq3xkx2|oW^5V6LvuxkHSKRbmq!Qh>#_lXQVV6LN|Fg3gX7GxW)PEaE2VsG zwp}MM;+HIS7+@HP_RxlE0qsYc3c6zdGxU1 zyg9PjK;1&aSwJT(+qcl7CVlik<%`&U$KMjC?z%m4U9UB~@v?jFU5MG18mGk@;`C_7 zu3*&Y2(Fk01eeXhuw*}&j0O2MldI&;+vG0RVK6J%_n4^OJ(F)EfQZ0OG=w2S zVPEJKKv#D+NldD-{jp)tKFaif_83GA#S^~xQxQSkOCxyFJ*&>_`gtk)uZV&!1>kTL zXC%EIo`PV-E@!b9!J4jZ)Lvwtfk=dCJq@6v#8C{#LeBv{8>Vthl}Bj!c;*CXBp$#b z-V-E7e|H3hjsi453;z;Zr>d>iO9}sQrtN`DKn5}aBhcBV1-El#dfFM6?eLp{`S#8> z2=Df*9a!Bp#HH-*JJ=roIQdBr6WEyGQk<~*_4uLG;j}7!LuIR9#*d^2hk6*ke0UK{ zXZv!}8clw#pvxRfo|O~USnA6pQY&3CzS^Z}SeMuN3)+4F5udwF@D<*75aLtGX&wcj zw2++i)#0wf(Hz_)@+S&Q-0Fw;snpkL9s!_yCiN9ML_6@a8u$X!ABlZL;ekJJCOtd! zcHnfnto*}sH86wNLt=lW@C)zDfps={jwjF%rt?Wh>AzC=JVI+k{z2g-w~%S1+$8ao U*Hh=!FZZTay9$M=Yu#7n|4B_4U;qFB literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.meshShaderTaskMem.mesh.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.meshShaderTaskMem.mesh.smolv new file mode 100644 index 0000000000000000000000000000000000000000..b9a7a3243c44790157d32613f969d353cbeaa281 GIT binary patch literal 738 zcmZWkO-~b16us}x^L3yjzM)uK!0Fh5n#S0OGMc)Wg%KL0evl??n?hTd(2s<+Cj0|8 z#`qBvcd*d4F(E7@E?BtMg*y}ffUf)l-a7*;@8aD1&OPVcnd;+*H8>}P2`1cyxPB{u zm-wpqL)V_H*B`CdyRE@?eX!kVwsrx&Yphgj)zVC_fbsOgu4unU(5)vEWNe>Ndh2C(fG$Vc3LGl7_8Lz1rVw zbXIy#sSU$^Z{`Mqv5?ye{+Y4WhS_`!lutXB1BBwX2MSsboVwotY4ZX7&Znw zX93GhaFKt3dqkZ2Z!+OK1l>J0k$;XJ8>4o+wHqfaGr>jvTihe!)W67tUm&3Sqc(M& zPR_stYSRHduH+q*@U95pfry$0KrQ241(A6#=JKH73g|*I`x@~;A|9f0A;5$>LaB@Z z#aMY9#b>FIkJ4LxAjJ_<-WLL!H*2&xMx0CqXiSwaqH&1QB~K>uu!09t=xOrI*pxC` zzRal^%cU0poASL%chyHNtYa)$@0YYiVbElkaPH05$s#S=mRgD_GYchQ)n+Hka2dR>Da>7PTEyzMNtlDUz O=gai<9BH0A&(uHT-E$%U literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.perprimitiveNV.frag.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.perprimitiveNV.frag.smolv new file mode 100644 index 0000000000000000000000000000000000000000..f27763363ca12cc1b596e3a0e82819b33c62d36a GIT binary patch literal 336 zcmZXMFHgfz6vgj5eZ0NV(Y#R-5YQ|n6*CKhZK;_6F+us0G?{IdY*54yln;SH3R=N-mB1 z=NGmdY9416$~^YiEelqs?9eTcp~|q&ZdtI(*r8t_kuia8L(qMl0~i@ly8`m~@VCo5 zU@Cz*RILL?MI|^3Ky@I>(K5sXP!o@mODqo60?Hn%(JI8V!WKCj@Vzy6MJO<6zkmaU L3br@tCb(8VsDm)! literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.subgroup.frag.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.subgroup.frag.smolv new file mode 100644 index 0000000000000000000000000000000000000000..7c8be59f485491e5f9ca0a1d3c3eeeba83ba60bb GIT binary patch literal 291 zcmebA_YG!XW@O}G;9wABfPfMv28M}Dj1!q`FA6ZZ`vm*w6_=#wnV1@Yq!+L-F#hLb zVR?IK>1Q?uPHx@>Of2jRIhYPH_j9`Y#Cv-L#TREJrlc0d7ndfb7v+~0#3v;dXC{O6 znz8_i+{Da0FozRJrX-dmf;gevKq5USJ{YPeII}91p_CU@&@-X(z;Q;DZ;$!HQ>tF)_!T~qQ literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.subgroupClustered.comp.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.subgroupClustered.comp.smolv new file mode 100644 index 0000000000000000000000000000000000000000..f84cf3b64ccb626222363871dded06234ddf79cf GIT binary patch literal 5435 zcmZ|TeN0x@9S87xe!p|?^CH=J6YZWt?ei={$+KpI+RO~e*0G40%Q9U5S(;E(a4cOl zBFoZbhETN*Un&%rQ%tMQfe4j6J;g@FFkHI^&!(`<-*{!E=%E z5T56rbG|=*_ukLF;j-jMKU``dV}8qT^@1h8UM#Sz8elaLtbv6!@V!fkuxQEBCC`+v zUGdDb^S>e1)NzYVe97ixZHK;atYAVH@FYKD`~A>{Zv+-CDf&S{VNvkm0zw}Uc9z! z6%ADcX<+5cMN8f4iznw6=UXo%cqf;Zy;@?;pG||$SCp2PtSPsi6C2{I^jS-7Fxn{7 z8{$Y*=nbTe6|^xwBt8_cEv7fiO0^QL8S^Y!3F6aN)hCNvixRmNu~;Nge$S!#L?=v3 zp0*OJXUurwO@RFz;3PP6tUT~Jd7L>50>BmoI6K1~N9^@s;B%S*lK4r0IgCD~aQfl! z!vNo*4{5vyAUSpBtQLUTU(SPsCl-7K63*}xk+rCZJdre>BnpZh6JugGXpLWNi{d~F zl4&4WtQG?(HpHsDgoKo4NJtSYQkx+;1@oRvaA?F4BQt5l5hH0dk|suG(MTHZfO~c) zFGwEsjryouH3!;qV!oKKn-?Z;^oy4qN7{Do`^0OMrzY<8tCyVPG~(3y)r-3B0deBH z`D%a%!3V*12byPCI2#uD93OKWU=D}YLhp$6sZU z1z;>I1@bXJobx<{zMJXxxGu8T31w!oRO+!n^f;DP06)Pc;mBeLEt2E;G-vc!%OZ<; zC|gb~EEG+SWfejxz91t%HY2*pgA{>KuACanN`!{b<43;KNdm6MbtYqPwbrAY> zuG{Qg7TLh4+gvt_x?RsiyW?5(-pOzi3)3WoUSo1LpH>(xR|8E_&vI_zHjyL)^xng; z#!YVZBz5C^M3Op}$?>dNFv@V3o7l;6Rr7~I0CmmAqDgR<;XBkk4Zh7Z+jHYfPYr0Hcv|TydEEE zo*>Ov06W$C4(5X1h61k(dV)ar0A8Y=Y4BsFN$)~I%_KdMRSF}3f1_$NbA_2ebdTK6T&SD(R6Oi<0aUi2rtzcRfkn`>0AP*|F#>XhEz5^}8Nw*>};9 z-A}UH5jTL8{TgW5m3*q~ev*9|aWj=8*_&WG+1q8xl-*CV`w-t$sqLPW?z&E;pD_LFGvHEss%sO~z!(lpQD84L1Hq zrS5rBy6amqrDVrRcB_q5D1S>Oy0Y)vhU@{7-C^VFC}nRzEqlE)RrUbMzG~xEsz$P_ zaXQ&MWXhC1K(gaDzNJ#No|NwSpiC**10?&7jeFGk-KhTvaSYivNcKY;_fyX#dmn1q zr<|#>Z;0czQ!&f~Jt)JR zGDu3QeAus2F;7Z&-6~T`$sj4&?!ytaen>0n@EJ-5Ny%;>PADZ~lS;1mrYadEC5L_Z zFRDgLZhOwR?s-6_OeKS)q{)Z>RjK=)ls<^AmpbkZY~I32HZeSL28Pd)PI(sqbv$C2m`4sjp8C87oNJQNfQ z-{8|-u1Aa_>S^Iz+J04p9#AX&ct8{>)J67qis*f8Gm4x`JFeo#IqdS|2@y}#@!xaz zV!rA(Xblmq!+t!;+b;{F>K25h|%A_?!wA%dmCzWdT zr1UOS2E;K^w1$XQmmfRS`U|?}>VQFOh-h8+bfVTdv25|MQey?tqoedbrS*POv6fp~`lRRRxWGA0}g$1Gw3i z#(rb#i)f3yHq1R8CSyGTtg)rBZT56m%^sODjSZ8r@c{l-rFME!dM}R2lrlC<#vTN) zPOaaodu|FE#)iq*#vmS|p2^s|wl>xpoN8>CjMWD5J*q~xuOs$!#=2z6G&W4e4g~Ri zm8$oobk8xFQpSeKSbY#rtM#XB_x3en9%p5&Jvb_iwFI$MoE^G-H3d85vJWSZ{JqDH zyfQWdqrzBc5HE-<{nH~3;~=ii^PZ!sjcu9n=r(8?8=yL5EEdGeq7MBhBnCsW&P7ih hy{C0X9c8SCDv+_;LHyh`b{+a;g=_MBZOz!^{12uPd)fd1 literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.subgroupExtendedTypesShuffleRelative.comp.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.subgroupExtendedTypesShuffleRelative.comp.smolv new file mode 100644 index 0000000000000000000000000000000000000000..f288c8858d2bb2d86ff7ce1b5214fc093de6af3b GIT binary patch literal 4175 zcmb7G4RBP|8GZM=Z{IGEv77(@h;L08cUnRwz(_+<#|c4fT05pXj&-^d$OcwJLi0mg zrpzGiFp<(=Fj5CogpQ3?AR-1sEykE;s8GsZE2iBYq>dIF11eZcnUwZ?_wL*5Zgi$( zvgF?HeCNFHe1}JGT;rttA+|C}8r)uk1zOuEYV+{a>53LOv z3rw`Ht`9XcZHWhegqqj3tN_@8QpZdbRyGCdqT5*(!cW3tJDdwKg2WXf8F4N=R0w-fh>H>DV&T$=wgom04fXBy_+c0shS!*N zn*l-M)2;esn8wl~x8XB{&s5(Y;qwaLY<#29YuV_%#qjpJXXQRYwA&;)NY-qliriL} zDXc{^NGzIRir<=+#RDBA(<26nQq6-z9s{RzK6$y8sZLzW=F=Tq%T*_?<(qxz!=cdZ zl9ZN_m6KOcbeQPoFI7>>>_xXw3bbeALASzzVc>!4C%{ykJ-ixV9$p?qQVBpB3K`tR z1<4ogs=7NReUNTS=Z=g)%1D=052a+HlF5}UR5H1ejY>9Ga!|=;_CstCgyF)vEOf{$4Aw%d?7w8(9_ zg=LYjOd9rDWYJNtWtwDr4PlimET1#eE-o$+se}%y4*OG0y3JochiqSQiEVJP)>r1S zON&Js(O2dX=U~x;VgEeJn!mtTM)q6~2QxkWIh(DF?{^mVgu60K4 z5zI-NxfiYT=z;t0XYAhi=Q~69DO%Fh{h%$Thrb(O+IQk<&e(?(EjITM2x+vgaU~NP zqH~Xm@<&X&xU@v1t4$w=xpe9jtDDOoA^YLd=&sKQUz=r@mWm84yEVG(bLefQ9b)bG zeQjiaPl45Fh+Fpu;F)%Xf-2WX_k9_>_0%smh(`gF{iArMGyJ52Y81pvr?5YRhD4`$ zOaYrjX>{?#gH9Rfq6iEe6J25}tdYG%I39Y4AC}~y7wxSyCY}`AmF_kXKTIqDMNP8N z59)dv7dyo>iu!Z{)$wsiQDZ)aK+2$NqE9@hNY6SxMyY&{KoS)tB2y;;$C=bg`$WG0 zMD`1!!byXCFAKy`A+iw10pa8U1};136)`B#LH0{RwN#@mJ`|=S6@^v4#&muSE`yFs zKMjjFH2rV_-ElO@bh2v{ouiRqe-;hVo8qXZ9T64LY@`}|%2St&z|%20Ax>&f$77y) zq*6`x)C&eYjnP};tX4mhFjOodO;7gJ4>~-J(>d{uriT;gj;BMK9`iH=UKU-Wzl#f+ z_MYQuRF;3pIn|ViY@HMAXH%!VC@u*=WRHs)CnxE)iRs8mVU_=hIM@L7jmAT-t2*(~ATQFBAdP z8~C&78$fsI9uj$o>SeqV>i5ZcaB%502MI6o07wTw;+|@J;<6fN0c54Y${`lum+Dgp z;IiL*gGRK#Yl#Amv+FE?w6p-2KXHZqc{FSu#rvY5--D>9-Rx5H$9a3)6@jfXcYbR_q-OE=50R&;BCTuht6w(NTPt_?Nu!> zD4NUaJ(H(_BH}$0bO@JFMq9x zeKBuuTIKx`x$ToBqEO{_28$@9E^EJhNdhB#uLP)b8?$_`pu2RR6h+AGpp54B9yqw{ zvVJ39m1rS*03`0I#wRYfODurgG*~&z0-W1b2;eec{Z5W*f!7lS9B&)lO1?%5fZ6E| z`-^DQ`hz^KiAO=y({{Pl{BhoT+!1&?Wu2C1w6~K}-gao^Y2JPb4!oVS#^hi06W&T3 yjiT?{UM(=q+W-XM?PKe2@?9-(E>XboHk9mb6wD&p;Qogk*Tf6j+s}$Rt^Wb;xlSDb literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.subgroupQuad.comp.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.subgroupQuad.comp.smolv new file mode 100644 index 0000000000000000000000000000000000000000..d95fc395f17f0613b706721b7e794f4ba05bc1c0 GIT binary patch literal 4547 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 literal 0 HcmV?d00001 diff --git a/tests/smolv-dumps/2020-02-13/glslang_spv.vulkan110.int16.frag.smolv b/tests/smolv-dumps/2020-02-13/glslang_spv.vulkan110.int16.frag.smolv new file mode 100644 index 0000000000000000000000000000000000000000..e1ebdf4cdc2b76efe1f5a9bb742fb1fdbc605e6c GIT binary patch literal 877 zcmb7?J4*vW6ov2H9XFe(>l&YxsKGXr&hV3-#WmQz3U1%up zq~dt0XnPlR$A#Dbp0tn4wSu>n4oW1}gA(av076wc69gkDQ$T_;1tc~IfRv3)HRUOwF6_<@|Hn>!^y#}7>ILzM&Cf+NDK|l zH#l~m=OAZ8o_;D8f4uG+zdR@76U?WksU7)YQZpo6PQp90EcjZgoGBniGg@*PELehE z)F4B|WPcbUM#EqKoe~y`5`E4!Vn-rAqP_@si25dCC}XgJmUu#pAUBPhWDjU%vS+eq p${P(MqhsUdgf&TMG&6zq`VYUE*bD#w literal 0 HcmV?d00001