• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#
2# Copyright (C) 2022 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16import io
17
18import unittest
19from typing import Dict
20
21from . import opcodes
22from . import command_printer
23
24reverse_opcodes: Dict[str, int] = {v: k for k, v in opcodes.opcodes.items()}
25
26
27class ComandPrinterOutputTestCase(unittest.TestCase):
28    """
29    Tests individual aspects of the command printer logic.
30    """
31
32    def get_printer(self, hex_data: str, timestamp_ms=0):
33        """Helper function to return the command printer"""
34        out = io.StringIO()
35        buf = bytes.fromhex(hex_data)
36        cmd_printer = command_printer.CommandPrinter(
37            0, len(buf), buf, timestamp_ms, 0, 0, out)
38        return cmd_printer, out
39
40    def test_raises_if_not_all_bytes_decoded(self):
41        # Make a command printer with 5 bytes
42        cmd_printer, output = self.get_printer("01 02 03 04 05")
43        # Decode 4 of them
44        cmd_printer.write_int("foobar", size=4, indent=0)
45        self.assertRaises(BufferError, cmd_printer.check_no_more_bytes)
46
47    def test_decode_int(self):
48        cmd_printer, output = self.get_printer("02 00 00 00")
49        r = cmd_printer.write_int("foobar", size=4, indent=0)
50        cmd_printer.check_no_more_bytes()
51        self.assertEqual(r, 2)
52        self.assertEqual(output.getvalue(), "foobar: 2\n")
53
54    def test_decode_optional_int(self):
55        cmd_printer, output = self.get_printer("00 00 00 00 00 00 00 01 08")
56        r = cmd_printer.write_int("i", size=1, indent=0, optional=True)
57        cmd_printer.check_no_more_bytes()
58        self.assertEqual(r, 8)
59        self.assertEqual(output.getvalue(), "i: 8\n")
60
61    def test_decode_missing_int(self):
62        cmd_printer, output = self.get_printer("00 00 00 00 00 00 00 00")
63        r = cmd_printer.write_int("i", size=1, indent=0, optional=True)
64        cmd_printer.check_no_more_bytes()
65        self.assertEqual(r, None)
66        self.assertEqual(output.getvalue(), "i: (null)\n")
67
68    def test_decode_optional_repeated_int(self):
69        cmd_printer, output = self.get_printer("00 00 00 00 00 00 00 01 02 00 03 00")
70        cmd_printer.write_int("i", size=2, indent=0, optional=True, count=2)
71        cmd_printer.check_no_more_bytes()
72        self.assertEqual(output.getvalue(), "i: [0x2, 0x3]\n")
73
74    def test_decode_float(self):
75        cmd_printer, output = self.get_printer("00 00 00 3f")
76        cmd_printer.write_float("foo", indent=0)
77        cmd_printer.check_no_more_bytes()
78        self.assertEqual(output.getvalue(), "foo: 0.5\n")
79
80    def test_decode_repeated_float(self):
81        cmd_printer, output = self.get_printer("00 00 00 3f  00 00 80 3f")
82        cmd_printer.write_float("foo", indent=0, count=2)
83        cmd_printer.check_no_more_bytes()
84        self.assertEqual(output.getvalue(), "foo: [0.5, 1.0]\n")
85
86    def test_decode_null_terminated_string(self):
87        cmd_printer, output = self.get_printer("77 6f 72 6c 64 00")
88        cmd_printer.write_string("hello", indent=1, size=None)
89        cmd_printer.check_no_more_bytes()
90        self.assertEqual(output.getvalue(), '  hello: "world"\n')
91
92    def test_decode_fixed_size_string(self):
93        cmd_printer, output = self.get_printer("77 6f 72 6c 64 00 00 00")
94        cmd_printer.write_string("hello", indent=1, size=8)
95        cmd_printer.check_no_more_bytes()
96        self.assertEqual(output.getvalue(), '  hello: "world"\n')
97
98    def test_decode_enum(self):
99        enum = {1000156007: "FOOBAR"}
100        cmd_printer, output = self.get_printer("67 2B 9D 3B")
101        cmd_printer.write_enum("foo", enum, indent=0)
102        cmd_printer.check_no_more_bytes()
103        self.assertEqual(output.getvalue(), 'foo: FOOBAR (1000156007)\n')
104
105    def test_decode_unknown_enum(self):
106        cmd_printer, output = self.get_printer("67 2B 9D 3B")
107        cmd_printer.write_enum("foo", {}, indent=0)
108        cmd_printer.check_no_more_bytes()
109        self.assertEqual(output.getvalue(), 'foo:  (1000156007)\n')
110
111    def test_decode_flags(self):
112        enum = {1: "FOO", 2: "BAR", 4: "BAZ"}
113        cmd_printer, output = self.get_printer("03 00 00 00")
114        cmd_printer.write_flags("foo", enum, indent=0)
115        cmd_printer.check_no_more_bytes()
116        self.assertEqual(output.getvalue(), 'foo: FOO | BAR (0x3)\n')
117
118    def test_decode_unknown_flags(self):
119        enum = {1: "FOO", 2: "BAR", 4: "BAZ"}
120        cmd_printer, output = self.get_printer("0A 00 00 00")
121        cmd_printer.write_flags("foo", enum, indent=0)
122        cmd_printer.check_no_more_bytes()
123        self.assertEqual(output.getvalue(), 'foo: 0x8 | BAR (0xa)\n')
124
125    def test_decode_all_flags(self):
126        enum = {1: "FOO", 2: "BAR", 4: "BAZ"}
127        cmd_printer, output = self.get_printer("ff ff ff ff")
128        cmd_printer.write_flags("foo", enum, indent=0)
129        cmd_printer.check_no_more_bytes()
130        self.assertEqual(output.getvalue(), 'foo: (all flags) (0xffffffff)\n')
131
132    def test_decode_zero_timestamp(self):
133        cmd_printer, output = self.get_printer("", 0)
134        cmd_printer.write_timestamp(indent=0)
135        cmd_printer.check_no_more_bytes()
136        self.assertEqual(output.getvalue(), "") # Print nothing
137
138    def test_decode_zero_timestamp(self):
139        cmd_printer, output = self.get_printer("", 100)
140        cmd_printer.write_timestamp(indent=0)
141        cmd_printer.check_no_more_bytes()
142        self.assertEqual(output.getvalue(), "Recorded at: 1969-12-31 16:00:00.000100\n")
143
144
145class SuccessfullyDecodesCommandTestCase(unittest.TestCase):
146    """
147    This test suite checks that we're able to successfully decode each command (but doesn't check
148    the exact output.)
149    Each command that we pretty print should have at least one test here (unless the command takes
150    no arguments).
151
152    Please keep the test methods sorted in alphabetical order.
153    """
154
155    def run_test(self, opcode_str: str, cmd_data_hex: str):
156        opcode = reverse_opcodes[opcode_str]
157        cmd_data = bytes.fromhex(cmd_data_hex)
158        cmd_printer = command_printer.CommandPrinter(opcode, len(cmd_data), cmd_data, 0, 0, 0)
159        cmd_printer.print_cmd()
160
161    def test_OP_vkAcquireImageANDROID(self):
162        self.run_test("OP_vkAcquireImageANDROID", """
163        e2 00 00 00 b8 08 00 00 02 00 03 00 e5 08 00 00
164        02 00 06 00 ff ff ff ff f3 08 00 00 02 00 17 00
165        00 00 00 00 00 00 00 00
166        """)
167
168    @unittest.skip("Needs support for struct extensions")
169    def test_OP_vkAllocateMemory(self):
170        self.run_test("OP_vkAllocateMemory", """
171        d7 01 00 00 02 00 00 00 02 00 03 00 05 00 00 00
172        00 00 00 18 e8 a9 a0 3b e8 a9 a0 3b 00 00 00 00
173        0d 00 00 00 00 90 7e 00 00 00 00 00 07 00 00 00
174        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
175        """)
176
177    def test_OP_vkBeginCommandBufferAsyncGOOGLE(self):
178        self.run_test("OP_vkBeginCommandBufferAsyncGOOGLE", """
179        2a 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
180        00 00 00 00
181        """)
182
183    def test_OP_vkBindBufferMemory(self):
184        self.run_test("OP_vkBindBufferMemory", """
185        cc 00 00 00 b8 08 00 00 02 00 03 00 e3 08 00 00
186        03 00 05 00 e4 08 00 00 02 00 07 00 00 00 00 00
187        00 00 00 00
188        """)
189
190    def test_OP_vkBindImageMemory(self):
191        self.run_test("OP_vkBindImageMemory", """
192        de 00 00 00 b8 08 00 00 02 00 03 00 f1 08 00 00
193        02 00 06 00 f2 08 00 00 02 00 07 00 00 00 00 00
194        00 00 00 00
195        """)
196
197    def test_OP_vkCmdBeginRenderPass(self):
198        self.run_test("OP_vkCmdBeginRenderPass", """
199        2b 00 00 00 00 00 00 00 65 0a 00 00 02 00 11 00
200        e7 09 00 00 03 00 12 00 00 00 00 00 00 00 00 00
201        c4 01 00 00 80 00 00 00 02 00 00 00 00 00 79 bd
202        2d fe 70 70 00 00 00 00 00 00 00 00 00 00 00 00
203        00 00 00 00 00 00 80 3f 00 00 00 00 00 00 00 00
204        00 00 00 00 00 00 00 00
205        """)
206
207    def test_OP_vkCmdBindDescriptorSets(self):
208        self.run_test("OP_vkCmdBindDescriptorSets", """
209        00 00 00 00 c8 09 00 00 03 00 13 00 01 00 00 00
210        01 00 00 00 41 09 00 00 03 00 0d 00 02 00 00 00
211        00 03 00 00 00 00 00 00
212        """)
213
214    def test_OP_vkCmdBindIndexBuffer(self):
215        self.run_test("OP_vkCmdBindIndexBuffer", """
216        a4 09 00 00 04 00 05 00 00 80 00 00 00 00 00 00
217        00 00 00 00
218        """)
219
220    def test_OP_vkCmdBindPipeline(self):
221        self.run_test("OP_vkCmdBindPipeline", """
222        00 00 00 00 ba 09 00 00 02 00 15 00
223        """)
224
225    def test_OP_vkCmdBindVertexBuffers(self):
226        self.run_test("OP_vkCmdBindVertexBuffers", """
227        00 00 00 00 03 00 00 00 a4 09 00 00 04 00 05 00
228        a4 09 00 00 04 00 05 00 a4 09 00 00 04 00 05 00
229        00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
230        0c 00 00 00 00 00 00 00
231        """)
232
233    def test_OP_vkCmdClearAttachments(self):
234        self.run_test("OP_vkCmdClearAttachments", """
235        01 00 00 00 06 00 00 00 00 00 00 00 00 00 80 3f
236        00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
237        00 00 00 00 00 00 00 00 80 07 00 00 38 04 00 00
238        00 00 00 00 01 00 00 00
239        """)
240
241    def test_OP_vkCmdClearColorImage(self):
242        self.run_test("OP_vkCmdClearColorImage", """
243        e5 08 00 00 02 00 06 00 07 00 00 00 00 00 00 00
244        00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
245        01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
246        01 00 00 00
247        """)
248
249    def test_OP_vkCmdCopyBufferToImage(self):
250        self.run_test("OP_vkCmdCopyBufferToImage", """
251        9f 09 00 00 02 00 05 00 a1 09 00 00 02 00 06 00
252        07 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
253        40 0b 00 00 00 0a 00 00 01 00 00 00 00 00 00 00
254        00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
255        00 00 00 00 40 0b 00 00 00 0a 00 00 01 00 00 00
256        """)
257
258    def test_OP_vkCmdCopyImageToBuffer(self):
259        self.run_test("OP_vkCmdCopyImageToBuffer", """
260        99 09 00 00 09 00 06 00 06 00 00 00 98 09 00 00
261        07 00 05 00 01 00 00 00 00 00 00 00 00 00 00 00
262        20 00 00 00 20 00 00 00 01 00 00 00 00 00 00 00
263        00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
264        00 00 00 00 20 00 00 00 20 00 00 00 01 00 00 00
265        """)
266
267    def test_OP_vkCmdDraw(self):
268        self.run_test("OP_vkCmdDraw", """
269        06 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
270        """)
271
272    def test_OP_vkCmdDrawIndexed(self):
273        self.run_test("OP_vkCmdDrawIndexed", """
274        6c 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
275        00 00 00 00
276        """)
277
278    def test_OP_vkCmdPipelineBarrier(self):
279        self.run_test("OP_vkCmdPipelineBarrier", """
280        01 04 00 00 80 04 00 00 00 00 00 00 01 00 00 00
281        2e 00 00 00 00 00 00 00 00 01 00 00 a0 01 00 00
282        00 00 00 00 03 00 00 00 2d 00 00 00 00 00 00 00
283        00 01 00 00 20 00 00 00 02 00 00 00 05 00 00 00
284        00 00 00 00 00 00 00 00 d2 11 00 00 04 00 06 00
285        01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
286        01 00 00 00 2d 00 00 00 00 00 00 00 00 01 00 00
287        20 00 00 00 02 00 00 00 05 00 00 00 00 00 00 00
288        00 00 00 00 ac 15 00 00 02 00 06 00 01 00 00 00
289        00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00
290        2d 00 00 00 00 00 00 00 00 01 00 00 20 00 00 00
291        02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00
292        9d 16 00 00 02 00 06 00 01 00 00 00 00 00 00 00
293        01 00 00 00 00 00 00 00 01 00 00 00
294        """)
295
296    def test_OP_vkCmdSetScissor(self):
297        self.run_test("OP_vkCmdSetScissor", """
298        00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
299        40 0b 00 00 00 0a 00 00
300        """)
301
302    def test_OP_vkCmdSetViewport(self):
303        self.run_test("OP_vkCmdSetViewport", """
304        00 00 00 00 01 00 00 00 00 00 00 00 00 00 20 45
305        00 00 34 45 00 00 20 c5 00 00 00 00 00 00 80 3f
306        """)
307
308    def test_OP_vkCollectDescriptorPoolIdsGOOGLE(self):
309        self.run_test("OP_vkCollectDescriptorPoolIdsGOOGLE", """
310        c5 00 00 00 b8 08 00 00 02 00 03 00 c1 08 00 00
311        02 00 0c 00 10 00 00 00 00 00 79 bc 3d fd b6 40
312        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
313        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
314        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
315        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
316        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
317        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
318        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
319        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
320        """)
321
322    def test_OP_vkCreateBufferWithRequirementsGOOGLE(self):
323        self.run_test("OP_vkCreateBufferWithRequirementsGOOGLE", """
324        2b 00 00 00 b8 08 00 00 02 00 03 00 0c 00 00 00
325        00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00
326        03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
327        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
328        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
329        00 00 00 00 00 00 00 00
330        """)
331
332    def test_OP_vkCreateDescriptorPool(self):
333        self.run_test("OP_vkCreateDescriptorPool", """
334        e1 00 00 00 b7 15 00 00 03 00 03 00 21 00 00 00
335        00 00 00 00 00 00 00 00 10 00 00 00 02 00 00 00
336        08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00
337        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
338        """)
339
340    def test_OP_vkCreateDescriptorSetLayout(self):
341        self.run_test("OP_vkCreateDescriptorSetLayout", """
342        c3 00 00 00 b8 08 00 00 02 00 03 00 20 00 00 00
343        00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
344        08 00 00 00 01 00 00 00 3f 00 00 00 00 00 00 00
345        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
346        00 00 00 00
347        """)
348
349    def test_OP_vkCreateFence(self):
350        self.run_test("OP_vkCreateFence", """
351        e3 00 00 00 b8 08 00 00 02 00 03 00 08 00 00 00
352        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
353        00 00 00 00 00 00 00 00
354        """)
355
356    def test_OP_vkCreateFramebuffer(self):
357        self.run_test("OP_vkCreateFramebuffer", """
358        83 02 00 00 fb 08 00 00 02 00 03 00 25 00 00 00
359        00 00 00 00 00 00 00 00 65 0a 00 00 02 00 11 00
360        02 00 00 00 e8 09 00 00 03 00 09 00 e9 09 00 00
361        03 00 09 00 c4 01 00 00 80 00 00 00 01 00 00 00
362        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
363        """)
364
365    @unittest.skip("Needs support for stream features hasRasterization / hasTessellation")
366    def test_OP_vkCreateGraphicsPipelines(self):
367        self.run_test("OP_vkCreateGraphicsPipelines", """
368        3b 01 00 00 fb 08 00 00 02 00 03 00 02 09 00 00
369        02 00 14 00 01 00 00 00 00 00 00 01 00 00 00 00
370        1c 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00
371        12 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
372        b7 09 00 00 02 00 0a 00 00 00 00 04 6d 61 69 6e
373        00 00 79 bd 2d fd a3 60 05 00 00 00 00 00 00 00
374        00 00 00 00 00 00 00 00 00 00 00 04 01 00 00 00
375        04 00 00 00 00 00 00 00 00 00 00 04 02 00 00 00
376        08 00 00 00 00 00 00 00 00 00 00 04 03 00 00 00
377        0c 00 00 00 00 00 00 00 00 00 00 04 04 00 00 00
378        10 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00
379        00 00 00 14 00 00 00 00 00 00 00 00 00 00 80 3f
380        00 00 80 3f 00 00 00 00 12 00 00 00 00 00 00 00
381        00 00 00 00 10 00 00 00 b8 09 00 00 02 00 0a 00
382        00 00 00 04 6d 61 69 6e 00 00 79 bd 2d fd a3 f0
383        05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
384        00 00 00 04 01 00 00 00 04 00 00 00 00 00 00 00
385        00 00 00 04 02 00 00 00 08 00 00 00 00 00 00 00
386        00 00 00 04 03 00 00 00 0c 00 00 00 00 00 00 00
387        00 00 00 04 04 00 00 00 10 00 00 00 00 00 00 00
388        00 00 00 04 00 00 00 00 00 00 00 14 00 00 00 00
389        00 00 00 00 00 00 80 3f 00 00 80 3f 00 00 00 00
390        00 00 79 bd 2d fd a4 78 13 00 00 00 00 00 00 00
391        00 00 00 00 02 00 00 00 00 00 00 00 08 00 00 00
392        00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
393        02 00 00 00 00 00 00 00 00 00 00 00 67 00 00 00
394        00 00 00 00 01 00 00 00 01 00 00 00 67 00 00 00
395        00 00 00 00 00 00 79 bd 2d fd a4 e0 14 00 00 00
396        00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00
397        00 00 79 bd 2d fd a5 00 00 00 79 bd 2d fd a5 18
398        16 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
399        00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
400        00 00 00 00 00 00 79 bd 2d fd a5 48 17 00 00 00
401        00 00 00 20 b9 bd 9e 3b b9 bd 9e 3b 00 00 00 18
402        31 aa 9e 3b 31 aa 9e 3b 00 00 00 18 62 37 9b 3b
403        62 37 9b 3b 00 00 00 00 00 00 00 00 00 00 00 00
404        01 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00
405        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
406        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
407        00 00 00 00 00 00 00 00 00 00 00 00 80 3f 00 00
408        79 bd 2d fd a5 d8 18 00 00 00 00 00 00 00 00 00
409        00 00 01 00 00 00 00 00 00 00 00 00 80 3f 00 00
410        79 bd 2d fd a6 08 ff ff ff ff 00 00 00 00 00 00
411        00 00 00 00 79 bd 2d fd a6 10 19 00 00 00 00 00
412        00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00
413        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
414        00 00 00 00 00 00 07 00 00 00 ff 00 00 00 00 00
415        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
416        00 00 07 00 00 00 ff 00 00 00 00 00 00 00 00 00
417        00 00 00 00 00 00 00 00 00 00 00 00 79 bd 2d fd
418        a6 78 1a 00 00 00 00 00 00 00 00 00 00 00 00 00
419        00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00
420        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
421        00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00
422        00 00 00 00 00 00 00 00 00 00 00 00 79 bb ee 02
423        ea 20 1b 00 00 00 00 00 00 00 00 00 00 00 02 00
424        00 00 00 00 00 00 01 00 00 00 6b 09 00 00 02 00
425        13 00 b9 09 00 00 03 00 11 00 00 00 00 00 00 00
426        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
427        00 00 00 00 00 00 00 00 00 00
428        """)
429
430    def test_OP_vkCreateImageView(self):
431        self.run_test("OP_vkCreateImageView", """
432        3c 01 00 00 fb 08 00 00 02 00 03 00 0f 00 00 00
433        00 00 00 00 00 00 00 00 06 09 00 00 02 00 06 00
434        01 00 00 00 25 00 00 00 00 00 00 00 00 00 00 00
435        00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
436        01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
437        00 00 00 00 00 00 00 00 00 00 00 00
438        """)
439
440    @unittest.skip("Needs support for struct extensions")
441    def test_OP_vkCreateImageWithRequirementsGOOGLE(self):
442        self.run_test("OP_vkCreateImageWithRequirementsGOOGLE", """
443        d0 00 00 00 b8 08 00 00 02 00 03 00 0e 00 00 00
444        00 00 00 38 10 f1 9a 3b 10 f1 9a 3b 00 00 00 00
445        00 00 79 bd 2d fd df e8 0d 00 00 00 80 07 00 00
446        01 00 00 00 33 0b 00 00 06 09 00 00 00 00 00 00
447        66 02 00 00 00 00 00 00 00 00 00 00 01 00 00 00
448        25 00 00 00 80 07 00 00 38 04 00 00 01 00 00 00
449        01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00
450        97 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
451        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
452        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
453        00 00 00 00 00 00 00 00 00 00 00 00
454        """)
455
456    def test_OP_vkCreatePipelineCache(self):
457        self.run_test("OP_vkCreatePipelineCache", """
458        38 01 00 00 fb 08 00 00 02 00 03 00 11 00 00 00
459        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
460        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
461        """)
462
463    def test_OP_vkCreateRenderPass(self):
464        self.run_test("OP_vkCreateRenderPass", """
465        3a 01 00 00 fb 08 00 00 02 00 03 00 26 00 00 00
466        00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
467        25 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
468        00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00
469        01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
470        01 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00
471        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
472        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
473        00 00 00 00
474        """)
475
476    def test_OP_vkCreateSampler(self):
477        self.run_test("OP_vkCreateSampler", """
478        eb 00 00 00 b7 15 00 00 03 00 03 00 1f 00 00 00
479        00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00
480        00 00 00 00 02 00 00 00 02 00 00 00 00 00 00 00
481        00 00 00 00 00 00 00 00 00 00 80 3f 00 00 00 00
482        03 00 00 00 00 00 00 00 00 00 80 3e 01 00 00 00
483        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
484        00 00 00 00
485        """)
486
487    def test_OP_vkCreateSemaphore(self):
488        self.run_test("OP_vkCreateSemaphore", """
489        d3 00 00 00 b8 08 00 00 02 00 03 00 09 00 00 00
490        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
491        00 00 00 00 00 00 00 00
492        """)
493
494    def test_OP_vkDestroyBuffer(self):
495        self.run_test("OP_vkDestroyBuffer", """
496        2a 00 00 00 b8 08 00 00 02 00 03 00 c0 08 00 00
497        02 00 05 00 00 00 00 00 00 00 00 00
498        """)
499
500    def test_OP_vkDestroyCommandPool(self):
501        self.run_test("OP_vkDestroyCommandPool", """
502        fb 05 00 00 b1 0a 00 00 05 00 03 00 a3 0a 00 00
503        06 00 21 00 00 00 00 00 00 00 00 00
504        """)
505
506    def test_OP_vkDestroyDescriptorPool(self):
507        self.run_test("OP_vkDestroyDescriptorPool", """
508        8b 01 00 00 fb 08 00 00 02 00 03 00 44 09 00 00
509        02 00 0c 00 00 00 00 00 00 00 00 00
510        """)
511
512    def test_OP_vkDestroyDescriptorSetLayout(self):
513        self.run_test("OP_vkDestroyDescriptorSetLayout", """
514        a3 01 00 00 fb 08 00 00 02 00 03 00 69 09 00 00
515        02 00 0b 00 00 00 00 00 00 00 00 00
516        """)
517
518    def test_OP_vkDestroyDevice(self):
519        self.run_test("OP_vkDestroyDevice", """
520        00 06 00 00 b1 0a 00 00 05 00 03 00 00 00 00 00
521        00 00 00 00
522        """)
523
524    def test_OP_vkDestroyFence(self):
525        self.run_test("OP_vkDestroyFence", """
526        fc 05 00 00 b1 0a 00 00 05 00 03 00 b2 0a 00 00
527        05 00 16 00 00 00 00 00 00 00 00 00
528        """)
529
530    def test_OP_vkDestroyFramebuffer(self):
531        self.run_test("OP_vkDestroyFramebuffer", """
532        61 01 00 00 fb 08 00 00 02 00 03 00 bc 09 00 00
533        02 00 12 00 00 00 00 00 00 00 00 00
534        """)
535
536    def test_OP_vkDestroyImage(self):
537        self.run_test("OP_vkDestroyImage", """
538        ee 00 00 00 b8 08 00 00 02 00 03 00 f1 08 00 00
539        02 00 06 00 00 00 00 00 00 00 00 00
540        """)
541
542    def test_OP_vkDestroyImageView(self):
543        self.run_test("OP_vkDestroyImageView", """
544        60 01 00 00 fb 08 00 00 02 00 03 00 bb 09 00 00
545        02 00 09 00 00 00 00 00 00 00 00 00
546        """)
547
548    def test_OP_vkDestroyInstance(self):
549        self.run_test("OP_vkDestroyInstance", """
550        01 06 00 00 e7 08 00 00 07 00 01 00 00 00 00 00
551        00 00 00 00
552        """)
553
554    def test_OP_vkDestroyPipeline(self):
555        self.run_test("OP_vkDestroyPipeline", """
556        cd 05 00 00 b1 0a 00 00 05 00 03 00 8a 0a 00 00
557        05 00 15 00 00 00 00 00 00 00 00 00
558        """)
559
560    def test_OP_vkDestroyPipelineCache(self):
561        self.run_test("OP_vkDestroyPipelineCache", """
562        39 01 00 00 fb 08 00 00 02 00 03 00 b9 09 00 00
563        02 00 14 00 00 00 00 00 00 00 00 00
564        """)
565
566    def test_OP_vkDestroyPipelineLayout(self):
567        self.run_test("OP_vkDestroyPipelineLayout", """
568        a2 01 00 00 fb 08 00 00 02 00 03 00 6b 09 00 00
569        02 00 13 00 00 00 00 00 00 00 00 00
570        """)
571
572    def test_OP_vkDestroyRenderPass(self):
573        self.run_test("OP_vkDestroyRenderPass", """
574        9f 01 00 00 fb 08 00 00 02 00 03 00 c2 09 00 00
575        02 00 11 00 00 00 00 00 00 00 00 00
576        """)
577
578    def test_OP_vkDestroySemaphore(self):
579        self.run_test("OP_vkDestroySemaphore", """
580        f3 00 00 00 b8 08 00 00 02 00 03 00 f3 08 00 00
581        02 00 17 00 00 00 00 00 00 00 00 00
582        """)
583
584    def test_OP_vkDestroyShaderModule(self):
585        self.run_test("OP_vkDestroyShaderModule", """
586        7e 01 00 00 fb 08 00 00 02 00 03 00 b7 09 00 00
587        02 00 0a 00 00 00 00 00 00 00 00 00
588        """)
589
590    def test_OP_vkFreeCommandBuffers(self):
591        self.run_test("OP_vkFreeCommandBuffers", """
592        f9 05 00 00 b1 0a 00 00 05 00 03 00 a3 0a 00 00
593        06 00 21 00 01 00 00 00 00 00 79 bb dd fe 4a b0
594        ec 08 00 00 07 00 22 00
595        """)
596
597    def test_OP_vkFreeMemory(self):
598        self.run_test("OP_vkFreeMemory", """
599        ef 00 00 00 b8 08 00 00 02 00 03 00 f2 08 00 00
600        02 00 07 00 00 00 00 00 00 00 00 00
601        """)
602
603    def test_OP_vkFreeMemorySyncGOOGLE(self):
604        self.run_test("OP_vkFreeMemorySyncGOOGLE", """
605        ff 05 00 00 b1 0a 00 00 05 00 03 00 74 0a 00 00
606        06 00 07 00 00 00 00 00 00 00 00 00
607        """)
608
609    def test_OP_vkGetFenceStatus(self):
610        self.run_test("OP_vkGetFenceStatus", """
611        e6 00 00 00 b8 08 00 00 02 00 03 00 f6 08 00 00
612        02 00 16 00
613        """)
614
615    def test_OP_vkGetMemoryHostAddressInfoGOOGLE(self):
616        self.run_test("OP_vkGetMemoryHostAddressInfoGOOGLE", """
617        01 01 00 00 5a 0c 00 00 05 00 03 00 5a 11 00 00
618        02 00 07 00 00 00 00 00 bd d3 07 f0 00 00 00 00
619        00 00 00 00 00 00 00 00 bd d3 07 f8 00 00 00 00
620        00 00 00 00 00 00 00 00 bd d3 08 00 00 00 00 00
621        00 00 00 00
622        """)
623
624    def test_OP_vkGetPhysicalDeviceFormatProperties(self):
625        self.run_test("OP_vkGetPhysicalDeviceFormatProperties", """
626        2f 00 00 00 b7 08 00 00 02 00 02 00 7c 00 00 00
627        00 00 00 00 00 00 00 00 ff ff ff ff
628        """)
629
630    def test_OP_vkGetPhysicalDeviceProperties2KHR(self):
631        self.run_test("OP_vkGetPhysicalDeviceProperties2KHR", """
632        cd 00 00 00 b7 08 00 00 02 00 02 00 79 b0 9b 3b
633        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
634        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
635        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
636        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
637        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
638        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
639        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
640        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
641        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
642        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
643        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
644        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
645        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
646        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
647        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
648        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
649        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
650        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
651        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
652        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
653        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
654        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
655        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
656        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
657        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
658        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
659        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
660        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
661        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
662        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
663        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
664        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
665        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
666        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
667        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
668        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
669        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
670        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
671        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
672        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
673        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
674        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
675        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
676        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
677        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
678        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
679        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
680        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
681        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
682        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
683        00 00 00 00 00 00 00 00
684        """)
685
686    def test_OP_vkGetSwapchainGrallocUsageANDROID(self):
687        self.run_test("OP_vkGetSwapchainGrallocUsageANDROID", """
688        cf 00 00 00 b8 08 00 00 02 00 03 00 25 00 00 00
689        97 00 00 00 00 00 00 00
690        """)
691
692    def test_OP_vkQueueCommitDescriptorSetUpdatesGOOGLE(self):
693        self.run_test("OP_vkQueueCommitDescriptorSetUpdatesGOOGLE", """
694        bd 02 00 00 04 00 00 00 02 00 04 00 04 00 00 00
695        0b 00 00 00 02 00 0c 00 79 01 00 00 02 00 0c 00
696        de 00 00 00 02 00 0c 00 8a 01 00 00 02 00 0c 00
697        07 00 00 00 0a 00 00 00 05 00 0b 00 31 00 00 00
698        02 00 0b 00 31 00 00 00 02 00 0b 00 44 01 00 00
699        02 00 0b 00 44 01 00 00 02 00 0b 00 44 01 00 00
700        02 00 0b 00 44 01 00 00 02 00 0b 00 1b 00 00 00
701        02 00 0d 00 89 01 00 00 02 00 0d 00 ee 00 00 00
702        02 00 0d 00 9a 01 00 00 02 00 0d 00 98 01 00 00
703        02 00 0d 00 99 01 00 00 02 00 0d 00 97 01 00 00
704        02 00 0d 00 00 00 00 00 01 00 00 00 02 00 00 00
705        03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00
706        01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00
707        01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00
708        01 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00
709        07 00 00 00 08 00 00 00 09 00 00 00 23 00 00 00
710        00 00 00 00 1b 00 00 00 02 00 0d 00 00 00 00 00
711        00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
712        00 00 00 00 00 00 74 3c ce b3 aa 50 bd 16 00 00
713        03 00 05 00 00 00 00 00 00 00 00 00 50 00 00 00
714        00 00 00 00 00 00 00 00 00 00 00 00 23 00 00 00
715        00 00 00 00 89 01 00 00 02 00 0d 00 00 00 00 00
716        00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
717        00 00 00 00 00 00 74 3c ce b3 aa 68 a8 16 00 00
718        03 00 05 00 00 00 00 00 00 00 00 00 00 01 00 00
719        00 00 00 00 00 00 00 00 00 00 00 00 23 00 00 00
720        00 00 00 00 89 01 00 00 02 00 0d 00 01 00 00 00
721        00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
722        00 00 00 00 00 00 74 3c ce b3 aa 80 2d 00 00 00
723        03 00 05 00 00 00 00 00 00 00 00 00 10 00 00 00
724        00 00 00 00 00 00 00 00 00 00 00 00 23 00 00 00
725        00 00 00 00 ee 00 00 00 02 00 0d 00 00 00 00 00
726        00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
727        00 00 00 00 00 00 74 3c ce b3 aa 98 a8 16 00 00
728        03 00 05 00 00 00 00 00 00 00 00 00 00 01 00 00
729        00 00 00 00 00 00 00 00 00 00 00 00 23 00 00 00
730        00 00 00 00 ee 00 00 00 02 00 0d 00 01 00 00 00
731        00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
732        00 00 00 00 00 00 74 3c ce b3 aa b0 a8 16 00 00
733        03 00 05 00 00 00 00 00 00 00 00 00 00 01 00 00
734        00 00 00 00 00 00 00 00 00 00 00 00 23 00 00 00
735        00 00 00 00 9a 01 00 00 02 00 0d 00 00 00 00 00
736        00 00 00 00 01 00 00 00 01 00 00 00 00 00 74 3c
737        ce b3 aa c8 c1 16 00 00 02 00 0e 00 be 16 00 00
738        02 00 09 00 05 00 00 00 00 00 00 00 00 00 00 00
739        00 00 00 00 00 00 00 00 23 00 00 00 00 00 00 00
740        98 01 00 00 02 00 0d 00 00 00 00 00 00 00 00 00
741        01 00 00 00 01 00 00 00 00 00 74 3c ce b3 aa e0
742        c1 16 00 00 02 00 0e 00 c9 16 00 00 02 00 09 00
743        05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
744        00 00 00 00 23 00 00 00 00 00 00 00 99 01 00 00
745        02 00 0d 00 00 00 00 00 00 00 00 00 01 00 00 00
746        01 00 00 00 00 00 74 3c ce b3 aa f8 c8 16 00 00
747        02 00 0e 00 c6 16 00 00 02 00 09 00 05 00 00 00
748        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
749        23 00 00 00 00 00 00 00 97 01 00 00 02 00 0d 00
750        00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00
751        00 00 74 3c ce b3 ab 10 c1 16 00 00 02 00 0e 00
752        cc 16 00 00 02 00 09 00 05 00 00 00 00 00 00 00
753        00 00 00 00 00 00 00 00 00 00 00 00
754        """)
755
756    def test_OP_vkQueueFlushCommandsGOOGLE(self):
757        self.run_test("OP_vkQueueFlushCommandsGOOGLE", """
758        e4 00 00 00 b9 08 00 00 02 00 04 00 be 08 00 00
759        02 00 22 00 18 01 00 00 00 00 00 00
760        """)
761
762    def test_OP_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(self):
763        self.run_test("OP_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE", """
764        e7 00 00 00 b9 08 00 00 02 00 04 00 01 00 00 00
765        00 00 79 bd 0d fe c9 20 e8 08 00 00 02 00 17 00
766        e5 08 00 00 02 00 06 00
767        """)
768
769    def test_OP_vkQueueSubmitAsyncGOOGLE(self):
770        self.run_test("OP_vkQueueSubmitAsyncGOOGLE", """
771        c0 02 00 00 04 00 00 00 02 00 04 00 01 00 00 00
772        04 00 00 00 00 00 00 00 03 00 00 00 c0 16 00 00
773        02 00 17 00 cb 16 00 00 02 00 17 00 ce 16 00 00
774        02 00 17 00 00 00 01 00 00 00 01 00 00 00 01 00
775        01 00 00 00 08 00 00 00 02 00 22 00 00 00 00 00
776        d1 16 00 00 02 00 16 00
777        """)
778
779    def test_OP_vkQueueWaitIdle(self):
780        self.run_test("OP_vkQueueWaitIdle", """
781        f3 05 00 00 8f 09 00 00 06 00 04 00
782        """)
783
784    def test_OP_vkResetFences(self):
785        self.run_test("OP_vkResetFences", """
786        4f 01 00 00 fb 08 00 00 02 00 03 00 01 00 00 00
787        c3 09 00 00 02 00 16 00
788        """)
789
790    def test_OP_vkWaitForFences(self):
791        self.run_test("OP_vkWaitForFences", """
792        ed 00 00 00 b8 08 00 00 02 00 03 00 01 00 00 00
793        03 09 00 00 05 00 16 00 01 00 00 00 00 b0 8e f0
794        1b 00 00 00
795        """)
796
797
798if __name__ == '__main__':
799    unittest.main()
800