| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429 |
- // Copyright (c) 2024 Google LLC.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- #include <vector>
- #include "gmock/gmock.h"
- #include "test/test_fixture.h"
- #include "tools/io.h"
- namespace spvtools {
- namespace {
- using spvtest::ScopedContext;
- class HexToText : public ::testing::Test {
- public:
- void VerifyDisassembly(const char* hex_stream,
- const char* expected_disassembly) {
- std::vector<char> stream(hex_stream, hex_stream + strlen(hex_stream));
- std::vector<uint32_t> binary;
- // Convert hext to binary first.
- EXPECT_TRUE(ConvertHexToBinary(stream, &binary));
- // Then disassemble it.
- spv_diagnostic diagnostic = nullptr;
- spv_text disassembly = nullptr;
- EXPECT_EQ(spvBinaryToText(ScopedContext().context, binary.data(),
- binary.size(), SPV_BINARY_TO_TEXT_OPTION_NONE,
- &disassembly, &diagnostic),
- SPV_SUCCESS);
- EXPECT_EQ(diagnostic, nullptr);
- // Verify disassembly is as expected and clean up.
- EXPECT_STREQ(disassembly->str, expected_disassembly);
- spvDiagnosticDestroy(diagnostic);
- spvTextDestroy(disassembly);
- }
- void EnsureError(const char* hex_stream) {
- std::vector<char> stream(hex_stream, hex_stream + strlen(hex_stream));
- std::vector<uint32_t> binary;
- // Make sure there is a parse error
- EXPECT_FALSE(ConvertHexToBinary(stream, &binary));
- }
- };
- // The actual assembly doesn't matter, just the hex parsing. All the tests use
- // the following SPIR-V.
- constexpr char kDisassembly[] = R"(; SPIR-V
- ; Version: 1.6
- ; Generator: Khronos SPIR-V Tools Assembler; 0
- ; Bound: 11
- ; Schema: 0
- OpCapability Shader
- OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %1 "main" %2 %3
- OpName %2 "fancy_attribute"
- OpName %3 "useful_output"
- OpDecorate %2 Location 4
- OpDecorate %3 Location 2
- %4 = OpTypeFloat 32
- %5 = OpTypePointer Input %4
- %2 = OpVariable %5 Input
- %6 = OpTypePointer Output %4
- %3 = OpVariable %6 Output
- %7 = OpTypeVoid
- %8 = OpTypeFunction %7
- %1 = OpFunction %7 None %8
- %9 = OpLabel
- %10 = OpLoad %4 %2
- OpStore %3 %10
- OpReturn
- OpFunctionEnd
- )";
- TEST_F(HexToText, Words) {
- constexpr char kHex[] = R"(0x07230203, 0x00010600, 0x00070000, 0x0000000b
- 0x00000000, 0x00020011, 0x00000001, 0x0003000e
- 0x00000000, 0x00000001, 0x0007000f, 0x00000000
- 0x00000001, 0x6e69616d, 0x00000000, 0x00000002
- 0x00000003, 0x00060005, 0x00000002, 0x636e6166
- 0x74615f79, 0x62697274, 0x00657475, 0x00060005
- 0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
- 0x00000074, 0x00040047, 0x00000002, 0x0000001e
- 0x00000004, 0x00040047, 0x00000003, 0x0000001e
- 0x00000002, 0x00030016, 0x00000004, 0x00000020
- 0x00040020, 0x00000005, 0x00000001, 0x00000004
- 0x0004003b, 0x00000005, 0x00000002, 0x00000001
- 0x00040020, 0x00000006, 0x00000003, 0x00000004
- 0x0004003b, 0x00000006, 0x00000003, 0x00000003
- 0x00020013, 0x00000007, 0x00030021, 0x00000008
- 0x00000007, 0x00050036, 0x00000007, 0x00000001
- 0x00000000, 0x00000008, 0x000200f8, 0x00000009
- 0x0004003d, 0x00000004, 0x0000000a, 0x00000002
- 0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
- 0x00010038)";
- VerifyDisassembly(kHex, kDisassembly);
- }
- TEST_F(HexToText, WordsLeadingSpace) {
- constexpr char kHex[] = R"(
- x07230203, x00010600, x00070000, x0000000b
- x00000000, x00020011, x00000001, x0003000e
- x00000000, x00000001, x0007000f, x00000000
- x00000001, x6e69616d, x00000000, x00000002
- x00000003, x00060005, x00000002, x636e6166
- x74615f79, x62697274, x00657475, x00060005
- x00000003, x66657375, x6f5f6c75, x75707475
- x00000074, x00040047, x00000002, x0000001e
- x00000004, x00040047, x00000003, x0000001e
- x00000002, x00030016, x00000004, x00000020
- x00040020, x00000005, x00000001, x00000004
- x0004003b, x00000005, x00000002, x00000001
- x00040020, x00000006, x00000003, x00000004
- x0004003b, x00000006, x00000003, x00000003
- x00020013, x00000007, x00030021, x00000008
- x00000007, x00050036, x00000007, x00000001
- x00000000, x00000008, x000200f8, x00000009
- x0004003d, x00000004, x0000000a, x00000002
- x0003003e, x00000003, x0000000a, x000100fd
- x00010038)";
- VerifyDisassembly(kHex, kDisassembly);
- }
- TEST_F(HexToText, WordsTrailingSpace) {
- constexpr char kHex[] = R"(0X7230203, 0X10600, 0X70000, 0XB
- 0X0, 0X20011, 0X1, 0X3000E
- 0X0, 0X1, 0X7000F, 0X0
- 0X1, X6E69616D, 0X0, 0X2
- 0X3, 0X60005, 0X2, X636E6166
- X74615F79, X62697274, 0X657475, 0X60005
- 0X3, X66657375, X6F5F6C75, X75707475
- 0X74, 0X40047, 0X2, 0X1E
- 0X4, 0X40047, 0X3, 0X1E
- 0X2, 0X30016, 0X4, 0X20
- 0X40020, 0X5, 0X1, 0X4
- 0X4003B, 0X5, 0X2, 0X1
- 0X40020, 0X6, 0X3, 0X4
- 0X4003B, 0X6, 0X3, 0X3
- 0X20013, 0X7, 0X30021, 0X8
- 0X7, 0X50036, 0X7, 0X1
- 0X0, 0X8, 0X200F8, 0X9
- 0X4003D, 0X4, 0XA, 0X2
- 0X3003E, 0X3, 0XA, 0X100FD
- 0X10038
- )";
- VerifyDisassembly(kHex, kDisassembly);
- }
- TEST_F(HexToText, BytesLittleEndian) {
- constexpr char kHex[] = R"(
- 0x03 0x02 0x23 0x07 0x00 0x06 0x01 0x00 0x00 0x00 0x07 0x00 0x0b 0x00 0x00 0x00
- 0x00 0x00 0x00 0x00 0x11 0x00 0x02 0x00 0x01 0x00 0x00 0x00 0x0e 0x00 0x03 0x00
- 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x0f 0x00 0x07 0x00 0x00 0x00 0x00 0x00
- 0x01 0x00 0x00 0x00 0x6d 0x61 0x69 0x6e 0x00 0x00 0x00 0x00 0x02 0x00 0x00 0x00
- 0x03 0x00 0x00 0x00 0x05 0x00 0x06 0x00 0x02 0x00 0x00 0x00 0x66 0x61 0x6e 0x63
- 0x79 0x5f 0x61 0x74 0x74 0x72 0x69 0x62 0x75 0x74 0x65 0x00 0x05 0x00 0x06 0x00
- 0x03 0x00 0x00 0x00 0x75 0x73 0x65 0x66 0x75 0x6c 0x5f 0x6f 0x75 0x74 0x70 0x75
- 0x74 0x00 0x00 0x00 0x47 0x00 0x04 0x00 0x02 0x00 0x00 0x00 0x1e 0x00 0x00 0x00
- 0x04 0x00 0x00 0x00 0x47 0x00 0x04 0x00 0x03 0x00 0x00 0x00 0x1e 0x00 0x00 0x00
- 0x02 0x00 0x00 0x00 0x16 0x00 0x03 0x00 0x04 0x00 0x00 0x00 0x20 0x00 0x00 0x00
- 0x20 0x00 0x04 0x00 0x05 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x04 0x00 0x00 0x00
- 0x3b 0x00 0x04 0x00 0x05 0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x01 0x00 0x00 0x00
- 0x20 0x00 0x04 0x00 0x06 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x04 0x00 0x00 0x00
- 0x3b 0x00 0x04 0x00 0x06 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x03 0x00 0x00 0x00
- 0x13 0x00 0x02 0x00 0x07 0x00 0x00 0x00 0x21 0x00 0x03 0x00 0x08 0x00 0x00 0x00
- 0x07 0x00 0x00 0x00 0x36 0x00 0x05 0x00 0x07 0x00 0x00 0x00 0x01 0x00 0x00 0x00
- 0x00 0x00 0x00 0x00 0x08 0x00 0x00 0x00 0xf8 0x00 0x02 0x00 0x09 0x00 0x00 0x00
- 0x3d 0x00 0x04 0x00 0x04 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x02 0x00 0x00 0x00
- 0x3e 0x00 0x03 0x00 0x03 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0xfd 0x00 0x01 0x00
- 0x38 0x00 0x01 0x00
- )";
- VerifyDisassembly(kHex, kDisassembly);
- }
- TEST_F(HexToText, BytesBigEndian) {
- constexpr char kHex[] = R"(
- X07,X23,X02,X03, X00,X01,X06,X00, X00,X07,X00,X00, X00,X00,X00,X0B
- X00,X00,X00,X00, X00,X02,X00,X11, X00,X00,X00,X01, X00,X03,X00,X0E
- X00,X00,X00,X00, X00,X00,X00,X01, X00,X07,X00,X0F, X00,X00,X00,X00
- X00,X00,X00,X01, X6E,X69,X61,X6D, X00,X00,X00,X00, X00,X00,X00,X02
- X00,X00,X00,X03, X00,X06,X00,X05, X00,X00,X00,X02, X63,X6E,X61,X66
- X74,X61,X5F,X79, X62,X69,X72,X74, X00,X65,X74,X75, X00,X06,X00,X05
- X00,X00,X00,X03, X66,X65,X73,X75, X6F,X5F,X6C,X75, X75,X70,X74,X75
- X00,X00,X00,X74, X00,X04,X00,X47, X00,X00,X00,X02, X00,X00,X00,X1E
- X00,X00,X00,X04, X00,X04,X00,X47, X00,X00,X00,X03, X00,X00,X00,X1E
- X00,X00,X00,X02, X00,X03,X00,X16, X00,X00,X00,X04, X00,X00,X00,X20
- X00,X04,X00,X20, X00,X00,X00,X05, X00,X00,X00,X01, X00,X00,X00,X04
- X00,X04,X00,X3B, X00,X00,X00,X05, X00,X00,X00,X02, X00,X00,X00,X01
- X00,X04,X00,X20, X00,X00,X00,X06, X00,X00,X00,X03, X00,X00,X00,X04
- X00,X04,X00,X3B, X00,X00,X00,X06, X00,X00,X00,X03, X00,X00,X00,X03
- X00,X02,X00,X13, X00,X00,X00,X07, X00,X03,X00,X21, X00,X00,X00,X08
- X00,X00,X00,X07, X00,X05,X00,X36, X00,X00,X00,X07, X00,X00,X00,X01
- X00,X00,X00,X00, X00,X00,X00,X08, X00,X02,X00,XF8, X00,X00,X00,X09
- X00,X04,X00,X3D, X00,X00,X00,X04, X00,X00,X00,X0A, X00,X00,X00,X02
- X00,X03,X00,X3E, X00,X00,X00,X03, X00,X00,X00,X0A, X00,X01,X00,XFD
- X00,X01,X00,X38,
- )";
- VerifyDisassembly(kHex, kDisassembly);
- }
- TEST_F(HexToText, StreamLittleEndian) {
- constexpr char kHex[] = R"(
- 03 02 23 07 00 06 01 00 00 00 07 00 0b 00 00 00
- 00 00 00 00 11 00 02 00 01 00 00 00 0e 00 03 00
- 00 00 00 00 01 00 00 00 0f 00 07 00 00 00 00 00
- 01 00 00 00 6d 61 69 6e 00 00 00 00 02 00 00 00
- 03 00 00 00 05 00 06 00 02 00 00 00 66 61 6e 63
- 79 5f 61 74 74 72 69 62 75 74 65 00 05 00 06 00
- 03 00 00 00 75 73 65 66 75 6c 5f 6f 75 74 70 75
- 74 00 00 00 47 00 04 00 02 00 00 00 1e 00 00 00
- 04 00 00 00 47 00 04 00 03 00 00 00 1e 00 00 00
- 02 00 00 00 16 00 03 00 04 00 00 00 20 00 00 00
- 20 00 04 00 05 00 00 00 01 00 00 00 04 00 00 00
- 3b 00 04 00 05 00 00 00 02 00 00 00 01 00 00 00
- 20 00 04 00 06 00 00 00 03 00 00 00 04 00 00 00
- 3b 00 04 00 06 00 00 00 03 00 00 00 03 00 00 00
- 13 00 02 00 07 00 00 00 21 00 03 00 08 00 00 00
- 07 00 00 00 36 00 05 00 07 00 00 00 01 00 00 00
- 00 00 00 00 08 00 00 00 f8 00 02 00 09 00 00 00
- 3d 00 04 00 04 00 00 00 0a 00 00 00 02 00 00 00
- 3e 00 03 00 03 00 00 00 0a 00 00 00 fd 00 01 00
- 38 00 01 00
- )";
- VerifyDisassembly(kHex, kDisassembly);
- }
- TEST_F(HexToText, StreamLittleEndianNoDelim) {
- constexpr char kHex[] = R"(
- 0302230700060100000007000B000000
- 0000000011000200010000000E000300
- 00000000010000000F00070000000000
- 010000006D61696E0000000002000000
- 03000000050006000200000066616E63
- 795F6174747269627574650005000600
- 0300000075736566756C5F6F75747075
- 7400000047000400020000001E000000
- 0400000047000400030000001E000000
- 02000000160003000400000020000000
- 20000400050000000100000004000000
- 3B000400050000000200000001000000
- 20000400060000000300000004000000
- 3B000400060000000300000003000000
- 13000200070000002100030008000000
- 07000000360005000700000001000000
- 0000000008000000F800020009000000
- 3D000400040000000A00000002000000
- 3E000300030000000A000000FD000100
- 38000100
- )";
- VerifyDisassembly(kHex, kDisassembly);
- }
- TEST_F(HexToText, StreamBigEndian) {
- constexpr char kHex[] = R"(
- 07230203, 00010600, 00070000, 0000000b
- 00000000, 00020011, 00000001, 0003000e
- 00000000, 00000001, 0007000f, 00000000
- 00000001, 6e69616d, 00000000, 00000002
- 00000003, 00060005, 00000002, 636e6166
- 74615f79, 62697274, 00657475, 00060005
- 00000003, 66657375, 6f5f6c75, 75707475
- 00000074, 00040047, 00000002, 0000001e
- 00000004, 00040047, 00000003, 0000001e
- 00000002, 00030016, 00000004, 00000020
- 00040020, 00000005, 00000001, 00000004
- 0004003b, 00000005, 00000002, 00000001
- 00040020, 00000006, 00000003, 00000004
- 0004003b, 00000006, 00000003, 00000003
- 00020013, 00000007, 00030021, 00000008
- 00000007, 00050036, 00000007, 00000001
- 00000000, 00000008, 000200f8, 00000009
- 0004003d, 00000004, 0000000a, 00000002
- 0003003e, 00000003, 0000000a, 000100fd
- 00010038,
- )";
- VerifyDisassembly(kHex, kDisassembly);
- }
- TEST_F(HexToText, WordsNoDelimieter) {
- constexpr char kHex[] = R"(0x07230203 0x00010600 0x00070000 0x0000000b
- 0x00000000 0x00020011 0x00000001 0x0003000e
- 0x00000000 0x00000001 0x0007000f 0x00000000
- 0x00000001 0x6e69616d 0x00000000 0x00000002
- 0x00000003 0x00060005 0x00000002 0x636e6166
- 0x74615f79 0x62697274 0x00657475 0x00060005
- 0x00000003 0x666573750x6f5f6c75 0x75707475
- 0x00000074 0x00040047 0x00000002 0x0000001e
- 0x00000004 0x00040047 0x00000003 0x0000001e
- 0x00000002 0x00030016 0x00000004 0x00000020
- 0x00040020 0x00000005 0x00000001 0x00000004
- 0x0004003b 0x00000005 0x00000002 0x00000001
- 0x00040020 0x00000006 0x00000003 0x00000004
- 0x0004003b 0x00000006 0x00000003 0x00000003
- 0x00020013 0x00000007 0x00030021 0x00000008
- 0x00000007 0x00050036 0x00000007 0x00000001
- 0x00000000 0x00000008 0x000200f8 0x00000009
- 0x0004003d 0x00000004 0x0000000a 0x00000002
- 0x0003003e 0x00000003 0x0000000a 0x000100fd
- 0x00010038)";
- EnsureError(kHex);
- }
- TEST_F(HexToText, InvalidFirstToken) {
- constexpr char kHex[] = R"(0x17230203, 0x00010600, 0x00070000, 0x0000000b
- 0x00000000, 0x00020011, 0x00000001, 0x0003000e
- 0x00000000, 0x00000001, 0x0007000f, 0x00000000
- 0x00000001, 0x6e69616d, 0x00000000, 0x00000002
- 0x00000003, 0x00060005, 0x00000002, 0x636e6166
- 0x74615f79, 0x62697274, 0x00657475, 0x00060005
- 0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
- 0x00000074, 0x00040047, 0x00000002, 0x0000001e
- 0x00000004, 0x00040047, 0x00000003, 0x0000001e
- 0x00000002, 0x00030016, 0x00000004, 0x00000020
- 0x00040020, 0x00000005, 0x00000001, 0x00000004
- 0x0004003b, 0x00000005, 0x00000002, 0x00000001
- 0x00040020, 0x00000006, 0x00000003, 0x00000004
- 0x0004003b, 0x00000006, 0x00000003, 0x00000003
- 0x00020013, 0x00000007, 0x00030021, 0x00000008
- 0x00000007, 0x00050036, 0x00000007, 0x00000001
- 0x00000000, 0x00000008, 0x000200f8, 0x00000009
- 0x0004003d, 0x00000004, 0x0000000a, 0x00000002
- 0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
- 0x00010038)";
- EnsureError(kHex);
- }
- TEST_F(HexToText, NonHexCharacter) {
- // Note: a 6 is replaced with G in this stream
- constexpr char kHex[] = R"(0x07230203, 0x00010600, 0x00070000, 0x0000000b
- 0x00000000, 0x00020011, 0x00000001, 0x0003000e
- 0x00000000, 0x00000001, 0x0007000f, 0x00000000
- 0x00000001, 0x6e69616d, 0x00000000, 0x00000002
- 0x00000003, 0x00060005, 0x00000002, 0x636e6166
- 0x74615f79, 0x62697274, 0x00657475, 0x00060005
- 0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
- 0x00000074, 0x00040047, 0x00000002, 0x0000001e
- 0x00000004, 0x00040047, 0x00000003, 0x0000001e
- 0x00000002, 0x0003001G, 0x00000004, 0x00000020
- 0x00040020, 0x00000005, 0x00000001, 0x00000004
- 0x0004003b, 0x00000005, 0x00000002, 0x00000001
- 0x00040020, 0x00000006, 0x00000003, 0x00000004
- 0x0004003b, 0x00000006, 0x00000003, 0x00000003
- 0x00020013, 0x00000007, 0x00030021, 0x00000008
- 0x00000007, 0x00050036, 0x00000007, 0x00000001
- 0x00000000, 0x00000008, 0x000200f8, 0x00000009
- 0x0004003d, 0x00000004, 0x0000000a, 0x00000002
- 0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
- 0x00010038)";
- EnsureError(kHex);
- }
- TEST_F(HexToText, MissingExpectedPrefix) {
- constexpr char kHex[] = R"(0x07230203, 0x00010600, 0x00070000, 0x0000000b
- 0x00000000, 0x00020011, 0x00000001, 0x0003000e
- 0x00000000, 0x00000001, 0x0007000f, 0x00000000
- 0x00000001, 0x6e69616d, 0x00000000, 0x00000002
- 0x00000003, 0x00060005, 0x00000002, 0x636e6166
- 0x74615f79, 0x62697274, 0x00657475, 0x00060005
- 0x00000003, 0x66657375, 0x6f5f6c75, 0x75707475
- 0x00000074, 0x00040047, 0x00000002, 0x0000001e
- 0x00000004, 0x00040047, 0x00000003, 0x0000001e
- 0x00000002, 0x00030016, 0x00000004, 0x00000020
- 0x00040020, 0x00000005, 00000001, 0x00000004
- 0x0004003b, 0x00000005, 0x00000002, 0x00000001
- 0x00040020, 0x00000006, 0x00000003, 0x00000004
- 0x0004003b, 0x00000006, 0x00000003, 0x00000003
- 0x00020013, 0x00000007, 0x00030021, 0x00000008
- 0x00000007, 0x00050036, 0x00000007, 0x00000001
- 0x00000000, 0x00000008, 0x000200f8, 0x00000009
- 0x0004003d, 0x00000004, 0x0000000a, 0x00000002
- 0x0003003e, 0x00000003, 0x0000000a, 0x000100fd
- 0x00010038)";
- EnsureError(kHex);
- }
- TEST_F(HexToText, UnexpectedPrefix) {
- constexpr char kHex[] = R"(07230203, 00010600, 00070000, 0000000b
- 00000000, 00020011, 00000001, 0003000e
- 00000000, 00000001, 0007000f, 00000000
- 00000001, 6e69616d, 00000000, 00000002
- 00000003, 00060005, 00000002, 636e6166
- 74615f79, 62697274, 00657475, 00060005
- 00000003, 66657375, 6f5f6c75, 75707475
- 00000074, 00040047, 00000002, 0000001e
- 00000004, 00040047, 00000003, 0000001e
- 00000002, 00030016, 00000004, 00000020
- 00040020, 00000005, 0x00000001, 00000004
- 0004003b, 00000005, 00000002, 00000001
- 00040020, 00000006, 00000003, 00000004
- 0004003b, 00000006, 00000003, 00000003
- 00020013, 00000007, 00030021, 00000008
- 00000007, 00050036, 00000007, 00000001
- 00000000, 00000008, 000200f8, 00000009
- 0004003d, 00000004, 0000000a, 00000002
- 0003003e, 00000003, 0000000a, 000100fd
- 00010038)";
- EnsureError(kHex);
- }
- } // namespace
- } // namespace spvtools
|