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