1 // Copyright (C) 2018 The Android Open Source Project
2 // Copyright (C) 2018 Google Inc.
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
16 // Autogenerated module VkEncoder
17 //
18 // (impl) generated by scripts/genvk.py -registry ../../vulkan/registry/vk.xml -registryGfxstream
19 // xml/vk_gfxstream.xml cereal -o /tmp/
20 //
21 // Please do not modify directly;
22 // re-run mesa3d/src/gfxstream/codegen/generate-gfxstream-vulkan.sh,
23 // or directly from Python by defining:
24 // VULKAN_REGISTRY_XML_DIR : Directory containing vk.xml
25 // VULKAN_REGISTRY_SCRIPTS_DIR : Directory containing genvk.py
26 // CEREAL_OUTPUT_DIR: Where to put the generated sources.
27 //
28 // python3 $VULKAN_REGISTRY_SCRIPTS_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o
29 // $CEREAL_OUTPUT_DIR
30 //
31
32 #include "VkEncoder.h"
33
34 #include <memory>
35 #include <optional>
36 #include <string>
37 #include <unordered_map>
38 #include <vector>
39
40 #include "AlignedBuf.h"
41 #include "BumpPool.h"
42 #include "ResourceTracker.h"
43 #include "Resources.h"
44 #include "Validation.h"
45 #include "VulkanStreamGuest.h"
46 #include "gfxstream/guest/IOStream.h"
47 #include "goldfish_vk_counting_guest.h"
48 #include "goldfish_vk_deepcopy_guest.h"
49 #include "goldfish_vk_marshaling_guest.h"
50 #include "goldfish_vk_private_defs.h"
51 #include "goldfish_vk_reserved_marshaling_guest.h"
52 #include "goldfish_vk_transform_guest.h"
53
54 namespace gfxstream {
55 namespace vk {
56
57 using namespace gfxstream::vk;
58
59 using gfxstream::aemu::BumpPool;
60
61 #include "VkEncoder.cpp.inl"
62
63 #define VALIDATE_RET(retType, success, validate) \
64 retType goldfish_vk_validateResult = validate; \
65 if (goldfish_vk_validateResult != success) return goldfish_vk_validateResult;
66
67 #define VALIDATE_VOID(validate) \
68 VkResult goldfish_vk_validateResult = validate; \
69 if (goldfish_vk_validateResult != VK_SUCCESS) return;
70
71 #ifdef VK_VERSION_1_0
vkCreateInstance(const VkInstanceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkInstance * pInstance,uint32_t doLock)72 VkResult VkEncoder::vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo,
73 const VkAllocationCallbacks* pAllocator, VkInstance* pInstance,
74 uint32_t doLock) {
75 (void)doLock;
76 bool queueSubmitWithCommandsEnabled =
77 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
78 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
79 auto stream = mImpl->stream();
80 auto pool = mImpl->pool();
81 VkInstanceCreateInfo* local_pCreateInfo;
82 VkAllocationCallbacks* local_pAllocator;
83 local_pCreateInfo = nullptr;
84 if (pCreateInfo) {
85 local_pCreateInfo = (VkInstanceCreateInfo*)pool->alloc(sizeof(const VkInstanceCreateInfo));
86 deepcopy_VkInstanceCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
87 (VkInstanceCreateInfo*)(local_pCreateInfo));
88 }
89 local_pAllocator = nullptr;
90 if (pAllocator) {
91 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
92 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
93 (VkAllocationCallbacks*)(local_pAllocator));
94 }
95 local_pAllocator = nullptr;
96 if (local_pCreateInfo) {
97 transform_tohost_VkInstanceCreateInfo(sResourceTracker,
98 (VkInstanceCreateInfo*)(local_pCreateInfo));
99 }
100 if (local_pAllocator) {
101 transform_tohost_VkAllocationCallbacks(sResourceTracker,
102 (VkAllocationCallbacks*)(local_pAllocator));
103 }
104 size_t count = 0;
105 size_t* countPtr = &count;
106 {
107 count_VkInstanceCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
108 (VkInstanceCreateInfo*)(local_pCreateInfo), countPtr);
109 // WARNING PTR CHECK
110 *countPtr += 8;
111 if (local_pAllocator) {
112 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
113 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
114 }
115 uint64_t cgen_var_0;
116 *countPtr += 8;
117 }
118 uint32_t packetSize_vkCreateInstance = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
119 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateInstance);
120 uint8_t* packetBeginPtr = streamPtr;
121 uint8_t** streamPtrPtr = &streamPtr;
122 uint32_t opcode_vkCreateInstance = OP_vkCreateInstance;
123 uint32_t seqno;
124 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
125 memcpy(streamPtr, &opcode_vkCreateInstance, sizeof(uint32_t));
126 streamPtr += sizeof(uint32_t);
127 memcpy(streamPtr, &packetSize_vkCreateInstance, sizeof(uint32_t));
128 streamPtr += sizeof(uint32_t);
129 if (queueSubmitWithCommandsEnabled) {
130 memcpy(streamPtr, &seqno, sizeof(uint32_t));
131 streamPtr += sizeof(uint32_t);
132 }
133 reservedmarshal_VkInstanceCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
134 (VkInstanceCreateInfo*)(local_pCreateInfo), streamPtrPtr);
135 // WARNING PTR CHECK
136 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)local_pAllocator;
137 memcpy((*streamPtrPtr), &cgen_var_0, 8);
138 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
139 *streamPtrPtr += 8;
140 if (local_pAllocator) {
141 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
142 (VkAllocationCallbacks*)(local_pAllocator),
143 streamPtrPtr);
144 }
145 /* is handle, possibly out */;
146 uint64_t cgen_var_1;
147 *&cgen_var_1 = (uint64_t)((*pInstance));
148 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 8);
149 *streamPtrPtr += 8;
150 /* is handle, possibly out */;
151 stream->setHandleMapping(sResourceTracker->createMapping());
152 uint64_t cgen_var_2;
153 stream->read((uint64_t*)&cgen_var_2, 8);
154 stream->handleMapping()->mapHandles_u64_VkInstance(&cgen_var_2, (VkInstance*)pInstance, 1);
155 stream->unsetHandleMapping();
156 VkResult vkCreateInstance_VkResult_return = (VkResult)0;
157 stream->read(&vkCreateInstance_VkResult_return, sizeof(VkResult));
158 sResourceTracker->on_vkCreateInstance(this, vkCreateInstance_VkResult_return, pCreateInfo,
159 pAllocator, pInstance);
160 ++encodeCount;
161 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
162 pool->freeAll();
163 stream->clearPool();
164 }
165 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
166 return vkCreateInstance_VkResult_return;
167 }
168
vkDestroyInstance(VkInstance instance,const VkAllocationCallbacks * pAllocator,uint32_t doLock)169 void VkEncoder::vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks* pAllocator,
170 uint32_t doLock) {
171 (void)doLock;
172 bool queueSubmitWithCommandsEnabled =
173 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
174 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
175 auto stream = mImpl->stream();
176 auto pool = mImpl->pool();
177 VkInstance local_instance;
178 VkAllocationCallbacks* local_pAllocator;
179 local_instance = instance;
180 local_pAllocator = nullptr;
181 if (pAllocator) {
182 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
183 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
184 (VkAllocationCallbacks*)(local_pAllocator));
185 }
186 local_pAllocator = nullptr;
187 if (local_pAllocator) {
188 transform_tohost_VkAllocationCallbacks(sResourceTracker,
189 (VkAllocationCallbacks*)(local_pAllocator));
190 }
191 size_t count = 0;
192 size_t* countPtr = &count;
193 {
194 uint64_t cgen_var_0;
195 *countPtr += 1 * 8;
196 // WARNING PTR CHECK
197 *countPtr += 8;
198 if (local_pAllocator) {
199 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
200 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
201 }
202 }
203 uint32_t packetSize_vkDestroyInstance =
204 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
205 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyInstance);
206 uint8_t* packetBeginPtr = streamPtr;
207 uint8_t** streamPtrPtr = &streamPtr;
208 uint32_t opcode_vkDestroyInstance = OP_vkDestroyInstance;
209 uint32_t seqno;
210 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
211 memcpy(streamPtr, &opcode_vkDestroyInstance, sizeof(uint32_t));
212 streamPtr += sizeof(uint32_t);
213 memcpy(streamPtr, &packetSize_vkDestroyInstance, sizeof(uint32_t));
214 streamPtr += sizeof(uint32_t);
215 if (queueSubmitWithCommandsEnabled) {
216 memcpy(streamPtr, &seqno, sizeof(uint32_t));
217 streamPtr += sizeof(uint32_t);
218 }
219 uint64_t cgen_var_0;
220 *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
221 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
222 *streamPtrPtr += 1 * 8;
223 // WARNING PTR CHECK
224 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
225 memcpy((*streamPtrPtr), &cgen_var_1, 8);
226 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
227 *streamPtrPtr += 8;
228 if (local_pAllocator) {
229 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
230 (VkAllocationCallbacks*)(local_pAllocator),
231 streamPtrPtr);
232 }
233 sResourceTracker->destroyMapping()->mapHandles_VkInstance((VkInstance*)&instance);
234 stream->flush();
235 ++encodeCount;
236 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
237 pool->freeAll();
238 stream->clearPool();
239 }
240 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
241 }
242
vkEnumeratePhysicalDevices(VkInstance instance,uint32_t * pPhysicalDeviceCount,VkPhysicalDevice * pPhysicalDevices,uint32_t doLock)243 VkResult VkEncoder::vkEnumeratePhysicalDevices(VkInstance instance, uint32_t* pPhysicalDeviceCount,
244 VkPhysicalDevice* pPhysicalDevices,
245 uint32_t doLock) {
246 (void)doLock;
247 bool queueSubmitWithCommandsEnabled =
248 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
249 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
250 auto stream = mImpl->stream();
251 auto pool = mImpl->pool();
252 VkInstance local_instance;
253 local_instance = instance;
254 size_t count = 0;
255 size_t* countPtr = &count;
256 {
257 uint64_t cgen_var_0;
258 *countPtr += 1 * 8;
259 // WARNING PTR CHECK
260 *countPtr += 8;
261 if (pPhysicalDeviceCount) {
262 *countPtr += sizeof(uint32_t);
263 }
264 // WARNING PTR CHECK
265 *countPtr += 8;
266 if (pPhysicalDevices) {
267 if ((*(pPhysicalDeviceCount))) {
268 *countPtr += (*(pPhysicalDeviceCount)) * 8;
269 }
270 }
271 }
272 uint32_t packetSize_vkEnumeratePhysicalDevices =
273 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
274 uint8_t* streamPtr = stream->reserve(packetSize_vkEnumeratePhysicalDevices);
275 uint8_t* packetBeginPtr = streamPtr;
276 uint8_t** streamPtrPtr = &streamPtr;
277 uint32_t opcode_vkEnumeratePhysicalDevices = OP_vkEnumeratePhysicalDevices;
278 uint32_t seqno;
279 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
280 memcpy(streamPtr, &opcode_vkEnumeratePhysicalDevices, sizeof(uint32_t));
281 streamPtr += sizeof(uint32_t);
282 memcpy(streamPtr, &packetSize_vkEnumeratePhysicalDevices, sizeof(uint32_t));
283 streamPtr += sizeof(uint32_t);
284 if (queueSubmitWithCommandsEnabled) {
285 memcpy(streamPtr, &seqno, sizeof(uint32_t));
286 streamPtr += sizeof(uint32_t);
287 }
288 uint64_t cgen_var_0;
289 *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
290 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
291 *streamPtrPtr += 1 * 8;
292 // WARNING PTR CHECK
293 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pPhysicalDeviceCount;
294 memcpy((*streamPtrPtr), &cgen_var_1, 8);
295 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
296 *streamPtrPtr += 8;
297 if (pPhysicalDeviceCount) {
298 memcpy(*streamPtrPtr, (uint32_t*)pPhysicalDeviceCount, sizeof(uint32_t));
299 *streamPtrPtr += sizeof(uint32_t);
300 }
301 /* is handle, possibly out */;
302 // WARNING PTR CHECK
303 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pPhysicalDevices;
304 memcpy((*streamPtrPtr), &cgen_var_2, 8);
305 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
306 *streamPtrPtr += 8;
307 if (pPhysicalDevices) {
308 if ((*(pPhysicalDeviceCount))) {
309 uint8_t* cgen_var_2_0_ptr = (uint8_t*)(*streamPtrPtr);
310 if (pPhysicalDeviceCount) {
311 for (uint32_t k = 0; k < (*(pPhysicalDeviceCount)); ++k) {
312 uint64_t tmpval = (uint64_t)(pPhysicalDevices[k]);
313 memcpy(cgen_var_2_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
314 }
315 }
316 *streamPtrPtr += 8 * (*(pPhysicalDeviceCount));
317 }
318 }
319 /* is handle, possibly out */;
320 // WARNING PTR CHECK
321 uint32_t* check_pPhysicalDeviceCount;
322 check_pPhysicalDeviceCount = (uint32_t*)(uintptr_t)stream->getBe64();
323 if (pPhysicalDeviceCount) {
324 if (!(check_pPhysicalDeviceCount)) {
325 fprintf(stderr, "fatal: pPhysicalDeviceCount inconsistent between guest and host\n");
326 }
327 stream->read((uint32_t*)pPhysicalDeviceCount, sizeof(uint32_t));
328 }
329 stream->setHandleMapping(sResourceTracker->createMapping());
330 // WARNING PTR CHECK
331 VkPhysicalDevice* check_pPhysicalDevices;
332 check_pPhysicalDevices = (VkPhysicalDevice*)(uintptr_t)stream->getBe64();
333 if (pPhysicalDevices) {
334 if (!(check_pPhysicalDevices)) {
335 fprintf(stderr, "fatal: pPhysicalDevices inconsistent between guest and host\n");
336 }
337 if ((*(pPhysicalDeviceCount))) {
338 uint64_t* cgen_var_4_0;
339 stream->alloc((void**)&cgen_var_4_0, (*(pPhysicalDeviceCount)) * 8);
340 stream->read((uint64_t*)cgen_var_4_0, (*(pPhysicalDeviceCount)) * 8);
341 stream->handleMapping()->mapHandles_u64_VkPhysicalDevice(
342 cgen_var_4_0, (VkPhysicalDevice*)pPhysicalDevices, (*(pPhysicalDeviceCount)));
343 }
344 }
345 stream->unsetHandleMapping();
346 VkResult vkEnumeratePhysicalDevices_VkResult_return = (VkResult)0;
347 stream->read(&vkEnumeratePhysicalDevices_VkResult_return, sizeof(VkResult));
348 ++encodeCount;
349 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
350 pool->freeAll();
351 stream->clearPool();
352 }
353 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
354 return vkEnumeratePhysicalDevices_VkResult_return;
355 }
356
vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures * pFeatures,uint32_t doLock)357 void VkEncoder::vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice,
358 VkPhysicalDeviceFeatures* pFeatures, uint32_t doLock) {
359 (void)doLock;
360 bool queueSubmitWithCommandsEnabled =
361 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
362 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
363 auto stream = mImpl->stream();
364 auto pool = mImpl->pool();
365 VkPhysicalDevice local_physicalDevice;
366 local_physicalDevice = physicalDevice;
367 size_t count = 0;
368 size_t* countPtr = &count;
369 {
370 uint64_t cgen_var_0;
371 *countPtr += 1 * 8;
372 count_VkPhysicalDeviceFeatures(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
373 (VkPhysicalDeviceFeatures*)(pFeatures), countPtr);
374 }
375 uint32_t packetSize_vkGetPhysicalDeviceFeatures =
376 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
377 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFeatures);
378 uint8_t* packetBeginPtr = streamPtr;
379 uint8_t** streamPtrPtr = &streamPtr;
380 uint32_t opcode_vkGetPhysicalDeviceFeatures = OP_vkGetPhysicalDeviceFeatures;
381 uint32_t seqno;
382 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
383 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceFeatures, sizeof(uint32_t));
384 streamPtr += sizeof(uint32_t);
385 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceFeatures, sizeof(uint32_t));
386 streamPtr += sizeof(uint32_t);
387 if (queueSubmitWithCommandsEnabled) {
388 memcpy(streamPtr, &seqno, sizeof(uint32_t));
389 streamPtr += sizeof(uint32_t);
390 }
391 uint64_t cgen_var_0;
392 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
393 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
394 *streamPtrPtr += 1 * 8;
395 reservedmarshal_VkPhysicalDeviceFeatures(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
396 (VkPhysicalDeviceFeatures*)(pFeatures), streamPtrPtr);
397 unmarshal_VkPhysicalDeviceFeatures(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
398 (VkPhysicalDeviceFeatures*)(pFeatures));
399 if (pFeatures) {
400 transform_fromhost_VkPhysicalDeviceFeatures(sResourceTracker,
401 (VkPhysicalDeviceFeatures*)(pFeatures));
402 }
403 ++encodeCount;
404 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
405 pool->freeAll();
406 stream->clearPool();
407 }
408 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
409 }
410
vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties * pFormatProperties,uint32_t doLock)411 void VkEncoder::vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice,
412 VkFormat format,
413 VkFormatProperties* pFormatProperties,
414 uint32_t doLock) {
415 (void)doLock;
416 bool queueSubmitWithCommandsEnabled =
417 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
418 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
419 auto stream = mImpl->stream();
420 auto pool = mImpl->pool();
421 VkPhysicalDevice local_physicalDevice;
422 VkFormat local_format;
423 local_physicalDevice = physicalDevice;
424 local_format = format;
425 size_t count = 0;
426 size_t* countPtr = &count;
427 {
428 uint64_t cgen_var_0;
429 *countPtr += 1 * 8;
430 *countPtr += sizeof(VkFormat);
431 count_VkFormatProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
432 (VkFormatProperties*)(pFormatProperties), countPtr);
433 }
434 uint32_t packetSize_vkGetPhysicalDeviceFormatProperties =
435 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
436 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFormatProperties);
437 uint8_t* packetBeginPtr = streamPtr;
438 uint8_t** streamPtrPtr = &streamPtr;
439 uint32_t opcode_vkGetPhysicalDeviceFormatProperties = OP_vkGetPhysicalDeviceFormatProperties;
440 uint32_t seqno;
441 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
442 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceFormatProperties, sizeof(uint32_t));
443 streamPtr += sizeof(uint32_t);
444 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceFormatProperties, sizeof(uint32_t));
445 streamPtr += sizeof(uint32_t);
446 if (queueSubmitWithCommandsEnabled) {
447 memcpy(streamPtr, &seqno, sizeof(uint32_t));
448 streamPtr += sizeof(uint32_t);
449 }
450 uint64_t cgen_var_0;
451 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
452 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
453 *streamPtrPtr += 1 * 8;
454 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
455 *streamPtrPtr += sizeof(VkFormat);
456 reservedmarshal_VkFormatProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
457 (VkFormatProperties*)(pFormatProperties), streamPtrPtr);
458 unmarshal_VkFormatProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
459 (VkFormatProperties*)(pFormatProperties));
460 if (pFormatProperties) {
461 transform_fromhost_VkFormatProperties(sResourceTracker,
462 (VkFormatProperties*)(pFormatProperties));
463 }
464 ++encodeCount;
465 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
466 pool->freeAll();
467 stream->clearPool();
468 }
469 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
470 }
471
vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkImageTiling tiling,VkImageUsageFlags usage,VkImageCreateFlags flags,VkImageFormatProperties * pImageFormatProperties,uint32_t doLock)472 VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties(
473 VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling,
474 VkImageUsageFlags usage, VkImageCreateFlags flags,
475 VkImageFormatProperties* pImageFormatProperties, uint32_t doLock) {
476 (void)doLock;
477 bool queueSubmitWithCommandsEnabled =
478 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
479 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
480 auto stream = mImpl->stream();
481 auto pool = mImpl->pool();
482 VkPhysicalDevice local_physicalDevice;
483 VkFormat local_format;
484 VkImageType local_type;
485 VkImageTiling local_tiling;
486 VkImageUsageFlags local_usage;
487 VkImageCreateFlags local_flags;
488 local_physicalDevice = physicalDevice;
489 local_format = format;
490 local_type = type;
491 local_tiling = tiling;
492 local_usage = usage;
493 local_flags = flags;
494 size_t count = 0;
495 size_t* countPtr = &count;
496 {
497 uint64_t cgen_var_0;
498 *countPtr += 1 * 8;
499 *countPtr += sizeof(VkFormat);
500 *countPtr += sizeof(VkImageType);
501 *countPtr += sizeof(VkImageTiling);
502 *countPtr += sizeof(VkImageUsageFlags);
503 *countPtr += sizeof(VkImageCreateFlags);
504 count_VkImageFormatProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
505 (VkImageFormatProperties*)(pImageFormatProperties), countPtr);
506 }
507 uint32_t packetSize_vkGetPhysicalDeviceImageFormatProperties =
508 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
509 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceImageFormatProperties);
510 uint8_t* packetBeginPtr = streamPtr;
511 uint8_t** streamPtrPtr = &streamPtr;
512 uint32_t opcode_vkGetPhysicalDeviceImageFormatProperties =
513 OP_vkGetPhysicalDeviceImageFormatProperties;
514 uint32_t seqno;
515 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
516 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceImageFormatProperties, sizeof(uint32_t));
517 streamPtr += sizeof(uint32_t);
518 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceImageFormatProperties, sizeof(uint32_t));
519 streamPtr += sizeof(uint32_t);
520 if (queueSubmitWithCommandsEnabled) {
521 memcpy(streamPtr, &seqno, sizeof(uint32_t));
522 streamPtr += sizeof(uint32_t);
523 }
524 uint64_t cgen_var_0;
525 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
526 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
527 *streamPtrPtr += 1 * 8;
528 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
529 *streamPtrPtr += sizeof(VkFormat);
530 memcpy(*streamPtrPtr, (VkImageType*)&local_type, sizeof(VkImageType));
531 *streamPtrPtr += sizeof(VkImageType);
532 memcpy(*streamPtrPtr, (VkImageTiling*)&local_tiling, sizeof(VkImageTiling));
533 *streamPtrPtr += sizeof(VkImageTiling);
534 memcpy(*streamPtrPtr, (VkImageUsageFlags*)&local_usage, sizeof(VkImageUsageFlags));
535 *streamPtrPtr += sizeof(VkImageUsageFlags);
536 memcpy(*streamPtrPtr, (VkImageCreateFlags*)&local_flags, sizeof(VkImageCreateFlags));
537 *streamPtrPtr += sizeof(VkImageCreateFlags);
538 reservedmarshal_VkImageFormatProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
539 (VkImageFormatProperties*)(pImageFormatProperties),
540 streamPtrPtr);
541 unmarshal_VkImageFormatProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
542 (VkImageFormatProperties*)(pImageFormatProperties));
543 if (pImageFormatProperties) {
544 transform_fromhost_VkImageFormatProperties(
545 sResourceTracker, (VkImageFormatProperties*)(pImageFormatProperties));
546 }
547 VkResult vkGetPhysicalDeviceImageFormatProperties_VkResult_return = (VkResult)0;
548 stream->read(&vkGetPhysicalDeviceImageFormatProperties_VkResult_return, sizeof(VkResult));
549 ++encodeCount;
550 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
551 pool->freeAll();
552 stream->clearPool();
553 }
554 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
555 return vkGetPhysicalDeviceImageFormatProperties_VkResult_return;
556 }
557
vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties * pProperties,uint32_t doLock)558 void VkEncoder::vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,
559 VkPhysicalDeviceProperties* pProperties,
560 uint32_t doLock) {
561 (void)doLock;
562 bool queueSubmitWithCommandsEnabled =
563 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
564 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
565 auto stream = mImpl->stream();
566 auto pool = mImpl->pool();
567 VkPhysicalDevice local_physicalDevice;
568 local_physicalDevice = physicalDevice;
569 size_t count = 0;
570 size_t* countPtr = &count;
571 {
572 uint64_t cgen_var_0;
573 *countPtr += 1 * 8;
574 count_VkPhysicalDeviceProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
575 (VkPhysicalDeviceProperties*)(pProperties), countPtr);
576 }
577 uint32_t packetSize_vkGetPhysicalDeviceProperties =
578 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
579 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceProperties);
580 uint8_t* packetBeginPtr = streamPtr;
581 uint8_t** streamPtrPtr = &streamPtr;
582 uint32_t opcode_vkGetPhysicalDeviceProperties = OP_vkGetPhysicalDeviceProperties;
583 uint32_t seqno;
584 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
585 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceProperties, sizeof(uint32_t));
586 streamPtr += sizeof(uint32_t);
587 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceProperties, sizeof(uint32_t));
588 streamPtr += sizeof(uint32_t);
589 if (queueSubmitWithCommandsEnabled) {
590 memcpy(streamPtr, &seqno, sizeof(uint32_t));
591 streamPtr += sizeof(uint32_t);
592 }
593 uint64_t cgen_var_0;
594 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
595 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
596 *streamPtrPtr += 1 * 8;
597 reservedmarshal_VkPhysicalDeviceProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
598 (VkPhysicalDeviceProperties*)(pProperties),
599 streamPtrPtr);
600 unmarshal_VkPhysicalDeviceProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
601 (VkPhysicalDeviceProperties*)(pProperties));
602 if (pProperties) {
603 transform_fromhost_VkPhysicalDeviceProperties(sResourceTracker,
604 (VkPhysicalDeviceProperties*)(pProperties));
605 }
606 sResourceTracker->on_vkGetPhysicalDeviceProperties(this, physicalDevice, pProperties);
607 ++encodeCount;
608 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
609 pool->freeAll();
610 stream->clearPool();
611 }
612 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
613 }
614
vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties * pQueueFamilyProperties,uint32_t doLock)615 void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties(
616 VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount,
617 VkQueueFamilyProperties* pQueueFamilyProperties, uint32_t doLock) {
618 (void)doLock;
619 bool queueSubmitWithCommandsEnabled =
620 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
621 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
622 auto stream = mImpl->stream();
623 auto pool = mImpl->pool();
624 VkPhysicalDevice local_physicalDevice;
625 local_physicalDevice = physicalDevice;
626 size_t count = 0;
627 size_t* countPtr = &count;
628 {
629 uint64_t cgen_var_0;
630 *countPtr += 1 * 8;
631 // WARNING PTR CHECK
632 *countPtr += 8;
633 if (pQueueFamilyPropertyCount) {
634 *countPtr += sizeof(uint32_t);
635 }
636 // WARNING PTR CHECK
637 *countPtr += 8;
638 if (pQueueFamilyProperties) {
639 if (pQueueFamilyPropertyCount) {
640 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
641 count_VkQueueFamilyProperties(
642 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
643 (VkQueueFamilyProperties*)(pQueueFamilyProperties + i), countPtr);
644 }
645 }
646 }
647 }
648 uint32_t packetSize_vkGetPhysicalDeviceQueueFamilyProperties =
649 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
650 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceQueueFamilyProperties);
651 uint8_t* packetBeginPtr = streamPtr;
652 uint8_t** streamPtrPtr = &streamPtr;
653 uint32_t opcode_vkGetPhysicalDeviceQueueFamilyProperties =
654 OP_vkGetPhysicalDeviceQueueFamilyProperties;
655 uint32_t seqno;
656 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
657 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceQueueFamilyProperties, sizeof(uint32_t));
658 streamPtr += sizeof(uint32_t);
659 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceQueueFamilyProperties, sizeof(uint32_t));
660 streamPtr += sizeof(uint32_t);
661 if (queueSubmitWithCommandsEnabled) {
662 memcpy(streamPtr, &seqno, sizeof(uint32_t));
663 streamPtr += sizeof(uint32_t);
664 }
665 uint64_t cgen_var_0;
666 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
667 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
668 *streamPtrPtr += 1 * 8;
669 // WARNING PTR CHECK
670 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
671 memcpy((*streamPtrPtr), &cgen_var_1, 8);
672 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
673 *streamPtrPtr += 8;
674 if (pQueueFamilyPropertyCount) {
675 memcpy(*streamPtrPtr, (uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
676 *streamPtrPtr += sizeof(uint32_t);
677 }
678 // WARNING PTR CHECK
679 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
680 memcpy((*streamPtrPtr), &cgen_var_2, 8);
681 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
682 *streamPtrPtr += 8;
683 if (pQueueFamilyProperties) {
684 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
685 reservedmarshal_VkQueueFamilyProperties(
686 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
687 (VkQueueFamilyProperties*)(pQueueFamilyProperties + i), streamPtrPtr);
688 }
689 }
690 // WARNING PTR CHECK
691 uint32_t* check_pQueueFamilyPropertyCount;
692 check_pQueueFamilyPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
693 if (pQueueFamilyPropertyCount) {
694 if (!(check_pQueueFamilyPropertyCount)) {
695 fprintf(stderr,
696 "fatal: pQueueFamilyPropertyCount inconsistent between guest and host\n");
697 }
698 stream->read((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
699 }
700 // WARNING PTR CHECK
701 VkQueueFamilyProperties* check_pQueueFamilyProperties;
702 check_pQueueFamilyProperties = (VkQueueFamilyProperties*)(uintptr_t)stream->getBe64();
703 if (pQueueFamilyProperties) {
704 if (!(check_pQueueFamilyProperties)) {
705 fprintf(stderr, "fatal: pQueueFamilyProperties inconsistent between guest and host\n");
706 }
707 if (pQueueFamilyPropertyCount) {
708 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
709 unmarshal_VkQueueFamilyProperties(
710 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
711 (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
712 }
713 }
714 }
715 if (pQueueFamilyPropertyCount) {
716 if (pQueueFamilyProperties) {
717 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
718 transform_fromhost_VkQueueFamilyProperties(
719 sResourceTracker, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
720 }
721 }
722 }
723 ++encodeCount;
724 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
725 pool->freeAll();
726 stream->clearPool();
727 }
728 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
729 }
730
vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties * pMemoryProperties,uint32_t doLock)731 void VkEncoder::vkGetPhysicalDeviceMemoryProperties(
732 VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties,
733 uint32_t doLock) {
734 (void)doLock;
735 bool queueSubmitWithCommandsEnabled =
736 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
737 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
738 auto stream = mImpl->stream();
739 auto pool = mImpl->pool();
740 VkPhysicalDevice local_physicalDevice;
741 local_physicalDevice = physicalDevice;
742 size_t count = 0;
743 size_t* countPtr = &count;
744 {
745 uint64_t cgen_var_0;
746 *countPtr += 1 * 8;
747 count_VkPhysicalDeviceMemoryProperties(
748 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
749 (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties), countPtr);
750 }
751 uint32_t packetSize_vkGetPhysicalDeviceMemoryProperties =
752 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
753 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceMemoryProperties);
754 uint8_t* packetBeginPtr = streamPtr;
755 uint8_t** streamPtrPtr = &streamPtr;
756 uint32_t opcode_vkGetPhysicalDeviceMemoryProperties = OP_vkGetPhysicalDeviceMemoryProperties;
757 uint32_t seqno;
758 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
759 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceMemoryProperties, sizeof(uint32_t));
760 streamPtr += sizeof(uint32_t);
761 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceMemoryProperties, sizeof(uint32_t));
762 streamPtr += sizeof(uint32_t);
763 if (queueSubmitWithCommandsEnabled) {
764 memcpy(streamPtr, &seqno, sizeof(uint32_t));
765 streamPtr += sizeof(uint32_t);
766 }
767 uint64_t cgen_var_0;
768 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
769 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
770 *streamPtrPtr += 1 * 8;
771 reservedmarshal_VkPhysicalDeviceMemoryProperties(
772 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties),
773 streamPtrPtr);
774 unmarshal_VkPhysicalDeviceMemoryProperties(
775 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
776 if (pMemoryProperties) {
777 transform_fromhost_VkPhysicalDeviceMemoryProperties(
778 sResourceTracker, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
779 }
780 ++encodeCount;
781 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
782 pool->freeAll();
783 stream->clearPool();
784 }
785 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
786 }
787
vkGetInstanceProcAddr(VkInstance instance,const char * pName,uint32_t doLock)788 PFN_vkVoidFunction VkEncoder::vkGetInstanceProcAddr(VkInstance instance, const char* pName,
789 uint32_t doLock) {
790 (void)doLock;
791 bool queueSubmitWithCommandsEnabled =
792 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
793 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
794 auto stream = mImpl->stream();
795 auto pool = mImpl->pool();
796 VkInstance local_instance;
797 char* local_pName;
798 local_instance = instance;
799 // Avoiding deepcopy for pName
800 local_pName = (char*)pName;
801 size_t count = 0;
802 size_t* countPtr = &count;
803 {
804 uint64_t cgen_var_0;
805 *countPtr += 1 * 8;
806 *countPtr += sizeof(uint32_t) + (local_pName ? strlen(local_pName) : 0);
807 }
808 uint32_t packetSize_vkGetInstanceProcAddr =
809 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
810 uint8_t* streamPtr = stream->reserve(packetSize_vkGetInstanceProcAddr);
811 uint8_t* packetBeginPtr = streamPtr;
812 uint8_t** streamPtrPtr = &streamPtr;
813 uint32_t opcode_vkGetInstanceProcAddr = OP_vkGetInstanceProcAddr;
814 uint32_t seqno;
815 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
816 memcpy(streamPtr, &opcode_vkGetInstanceProcAddr, sizeof(uint32_t));
817 streamPtr += sizeof(uint32_t);
818 memcpy(streamPtr, &packetSize_vkGetInstanceProcAddr, sizeof(uint32_t));
819 streamPtr += sizeof(uint32_t);
820 if (queueSubmitWithCommandsEnabled) {
821 memcpy(streamPtr, &seqno, sizeof(uint32_t));
822 streamPtr += sizeof(uint32_t);
823 }
824 uint64_t cgen_var_0;
825 *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
826 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
827 *streamPtrPtr += 1 * 8;
828 {
829 uint32_t l = local_pName ? strlen(local_pName) : 0;
830 memcpy(*streamPtrPtr, (uint32_t*)&l, sizeof(uint32_t));
831 gfxstream::aemu::Stream::toBe32((uint8_t*)*streamPtrPtr);
832 *streamPtrPtr += sizeof(uint32_t);
833 memcpy(*streamPtrPtr, (char*)local_pName, l);
834 *streamPtrPtr += l;
835 }
836 PFN_vkVoidFunction vkGetInstanceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
837 stream->read(&vkGetInstanceProcAddr_PFN_vkVoidFunction_return, sizeof(PFN_vkVoidFunction));
838 ++encodeCount;
839 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
840 pool->freeAll();
841 stream->clearPool();
842 }
843 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
844 return vkGetInstanceProcAddr_PFN_vkVoidFunction_return;
845 }
846
vkGetDeviceProcAddr(VkDevice device,const char * pName,uint32_t doLock)847 PFN_vkVoidFunction VkEncoder::vkGetDeviceProcAddr(VkDevice device, const char* pName,
848 uint32_t doLock) {
849 (void)doLock;
850 bool queueSubmitWithCommandsEnabled =
851 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
852 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
853 auto stream = mImpl->stream();
854 auto pool = mImpl->pool();
855 VkDevice local_device;
856 char* local_pName;
857 local_device = device;
858 // Avoiding deepcopy for pName
859 local_pName = (char*)pName;
860 size_t count = 0;
861 size_t* countPtr = &count;
862 {
863 uint64_t cgen_var_0;
864 *countPtr += 1 * 8;
865 *countPtr += sizeof(uint32_t) + (local_pName ? strlen(local_pName) : 0);
866 }
867 uint32_t packetSize_vkGetDeviceProcAddr =
868 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
869 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceProcAddr);
870 uint8_t* packetBeginPtr = streamPtr;
871 uint8_t** streamPtrPtr = &streamPtr;
872 uint32_t opcode_vkGetDeviceProcAddr = OP_vkGetDeviceProcAddr;
873 uint32_t seqno;
874 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
875 memcpy(streamPtr, &opcode_vkGetDeviceProcAddr, sizeof(uint32_t));
876 streamPtr += sizeof(uint32_t);
877 memcpy(streamPtr, &packetSize_vkGetDeviceProcAddr, sizeof(uint32_t));
878 streamPtr += sizeof(uint32_t);
879 if (queueSubmitWithCommandsEnabled) {
880 memcpy(streamPtr, &seqno, sizeof(uint32_t));
881 streamPtr += sizeof(uint32_t);
882 }
883 uint64_t cgen_var_0;
884 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
885 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
886 *streamPtrPtr += 1 * 8;
887 {
888 uint32_t l = local_pName ? strlen(local_pName) : 0;
889 memcpy(*streamPtrPtr, (uint32_t*)&l, sizeof(uint32_t));
890 gfxstream::aemu::Stream::toBe32((uint8_t*)*streamPtrPtr);
891 *streamPtrPtr += sizeof(uint32_t);
892 memcpy(*streamPtrPtr, (char*)local_pName, l);
893 *streamPtrPtr += l;
894 }
895 PFN_vkVoidFunction vkGetDeviceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
896 stream->read(&vkGetDeviceProcAddr_PFN_vkVoidFunction_return, sizeof(PFN_vkVoidFunction));
897 ++encodeCount;
898 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
899 pool->freeAll();
900 stream->clearPool();
901 }
902 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
903 return vkGetDeviceProcAddr_PFN_vkVoidFunction_return;
904 }
905
vkCreateDevice(VkPhysicalDevice physicalDevice,const VkDeviceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDevice * pDevice,uint32_t doLock)906 VkResult VkEncoder::vkCreateDevice(VkPhysicalDevice physicalDevice,
907 const VkDeviceCreateInfo* pCreateInfo,
908 const VkAllocationCallbacks* pAllocator, VkDevice* pDevice,
909 uint32_t doLock) {
910 (void)doLock;
911 bool queueSubmitWithCommandsEnabled =
912 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
913 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
914 auto stream = mImpl->stream();
915 auto pool = mImpl->pool();
916 VkPhysicalDevice local_physicalDevice;
917 VkDeviceCreateInfo* local_pCreateInfo;
918 VkAllocationCallbacks* local_pAllocator;
919 local_physicalDevice = physicalDevice;
920 local_pCreateInfo = nullptr;
921 if (pCreateInfo) {
922 local_pCreateInfo = (VkDeviceCreateInfo*)pool->alloc(sizeof(const VkDeviceCreateInfo));
923 deepcopy_VkDeviceCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
924 (VkDeviceCreateInfo*)(local_pCreateInfo));
925 }
926 local_pAllocator = nullptr;
927 if (pAllocator) {
928 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
929 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
930 (VkAllocationCallbacks*)(local_pAllocator));
931 }
932 local_pAllocator = nullptr;
933 if (local_pCreateInfo) {
934 transform_tohost_VkDeviceCreateInfo(sResourceTracker,
935 (VkDeviceCreateInfo*)(local_pCreateInfo));
936 }
937 if (local_pAllocator) {
938 transform_tohost_VkAllocationCallbacks(sResourceTracker,
939 (VkAllocationCallbacks*)(local_pAllocator));
940 }
941 size_t count = 0;
942 size_t* countPtr = &count;
943 {
944 uint64_t cgen_var_0;
945 *countPtr += 1 * 8;
946 count_VkDeviceCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
947 (VkDeviceCreateInfo*)(local_pCreateInfo), countPtr);
948 // WARNING PTR CHECK
949 *countPtr += 8;
950 if (local_pAllocator) {
951 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
952 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
953 }
954 uint64_t cgen_var_1;
955 *countPtr += 8;
956 }
957 uint32_t packetSize_vkCreateDevice = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
958 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateDevice);
959 uint8_t* packetBeginPtr = streamPtr;
960 uint8_t** streamPtrPtr = &streamPtr;
961 uint32_t opcode_vkCreateDevice = OP_vkCreateDevice;
962 uint32_t seqno;
963 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
964 memcpy(streamPtr, &opcode_vkCreateDevice, sizeof(uint32_t));
965 streamPtr += sizeof(uint32_t);
966 memcpy(streamPtr, &packetSize_vkCreateDevice, sizeof(uint32_t));
967 streamPtr += sizeof(uint32_t);
968 if (queueSubmitWithCommandsEnabled) {
969 memcpy(streamPtr, &seqno, sizeof(uint32_t));
970 streamPtr += sizeof(uint32_t);
971 }
972 uint64_t cgen_var_0;
973 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
974 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
975 *streamPtrPtr += 1 * 8;
976 reservedmarshal_VkDeviceCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
977 (VkDeviceCreateInfo*)(local_pCreateInfo), streamPtrPtr);
978 // WARNING PTR CHECK
979 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
980 memcpy((*streamPtrPtr), &cgen_var_1, 8);
981 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
982 *streamPtrPtr += 8;
983 if (local_pAllocator) {
984 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
985 (VkAllocationCallbacks*)(local_pAllocator),
986 streamPtrPtr);
987 }
988 /* is handle, possibly out */;
989 uint64_t cgen_var_2;
990 *&cgen_var_2 = (uint64_t)((*pDevice));
991 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
992 *streamPtrPtr += 8;
993 /* is handle, possibly out */;
994 stream->setHandleMapping(sResourceTracker->createMapping());
995 uint64_t cgen_var_3;
996 stream->read((uint64_t*)&cgen_var_3, 8);
997 stream->handleMapping()->mapHandles_u64_VkDevice(&cgen_var_3, (VkDevice*)pDevice, 1);
998 stream->unsetHandleMapping();
999 VkResult vkCreateDevice_VkResult_return = (VkResult)0;
1000 stream->read(&vkCreateDevice_VkResult_return, sizeof(VkResult));
1001 sResourceTracker->on_vkCreateDevice(this, vkCreateDevice_VkResult_return, physicalDevice,
1002 pCreateInfo, pAllocator, pDevice);
1003 ++encodeCount;
1004 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
1005 pool->freeAll();
1006 stream->clearPool();
1007 }
1008 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
1009 return vkCreateDevice_VkResult_return;
1010 }
1011
vkDestroyDevice(VkDevice device,const VkAllocationCallbacks * pAllocator,uint32_t doLock)1012 void VkEncoder::vkDestroyDevice(VkDevice device, const VkAllocationCallbacks* pAllocator,
1013 uint32_t doLock) {
1014 (void)doLock;
1015 bool queueSubmitWithCommandsEnabled =
1016 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
1017 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
1018 sResourceTracker->on_vkDestroyDevice_pre(this, device, pAllocator);
1019 auto stream = mImpl->stream();
1020 auto pool = mImpl->pool();
1021 VkDevice local_device;
1022 VkAllocationCallbacks* local_pAllocator;
1023 local_device = device;
1024 local_pAllocator = nullptr;
1025 if (pAllocator) {
1026 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
1027 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
1028 (VkAllocationCallbacks*)(local_pAllocator));
1029 }
1030 local_pAllocator = nullptr;
1031 if (local_pAllocator) {
1032 transform_tohost_VkAllocationCallbacks(sResourceTracker,
1033 (VkAllocationCallbacks*)(local_pAllocator));
1034 }
1035 size_t count = 0;
1036 size_t* countPtr = &count;
1037 {
1038 uint64_t cgen_var_0;
1039 *countPtr += 1 * 8;
1040 // WARNING PTR CHECK
1041 *countPtr += 8;
1042 if (local_pAllocator) {
1043 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
1044 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
1045 }
1046 }
1047 uint32_t packetSize_vkDestroyDevice = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
1048 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyDevice);
1049 uint8_t* packetBeginPtr = streamPtr;
1050 uint8_t** streamPtrPtr = &streamPtr;
1051 uint32_t opcode_vkDestroyDevice = OP_vkDestroyDevice;
1052 uint32_t seqno;
1053 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
1054 memcpy(streamPtr, &opcode_vkDestroyDevice, sizeof(uint32_t));
1055 streamPtr += sizeof(uint32_t);
1056 memcpy(streamPtr, &packetSize_vkDestroyDevice, sizeof(uint32_t));
1057 streamPtr += sizeof(uint32_t);
1058 if (queueSubmitWithCommandsEnabled) {
1059 memcpy(streamPtr, &seqno, sizeof(uint32_t));
1060 streamPtr += sizeof(uint32_t);
1061 }
1062 uint64_t cgen_var_0;
1063 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
1064 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
1065 *streamPtrPtr += 1 * 8;
1066 // WARNING PTR CHECK
1067 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
1068 memcpy((*streamPtrPtr), &cgen_var_1, 8);
1069 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1070 *streamPtrPtr += 8;
1071 if (local_pAllocator) {
1072 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1073 (VkAllocationCallbacks*)(local_pAllocator),
1074 streamPtrPtr);
1075 }
1076 sResourceTracker->destroyMapping()->mapHandles_VkDevice((VkDevice*)&device);
1077 stream->flush();
1078 ++encodeCount;
1079 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
1080 pool->freeAll();
1081 stream->clearPool();
1082 }
1083 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
1084 }
1085
vkEnumerateInstanceExtensionProperties(const char * pLayerName,uint32_t * pPropertyCount,VkExtensionProperties * pProperties,uint32_t doLock)1086 VkResult VkEncoder::vkEnumerateInstanceExtensionProperties(const char* pLayerName,
1087 uint32_t* pPropertyCount,
1088 VkExtensionProperties* pProperties,
1089 uint32_t doLock) {
1090 (void)doLock;
1091 bool queueSubmitWithCommandsEnabled =
1092 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
1093 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
1094 auto stream = mImpl->stream();
1095 auto pool = mImpl->pool();
1096 char* local_pLayerName;
1097 // Avoiding deepcopy for pLayerName
1098 local_pLayerName = (char*)pLayerName;
1099 size_t count = 0;
1100 size_t* countPtr = &count;
1101 {
1102 if (sFeatureBits & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT) {
1103 // WARNING PTR CHECK
1104 *countPtr += 8;
1105 if (local_pLayerName) {
1106 *countPtr += sizeof(uint32_t) + (local_pLayerName ? strlen(local_pLayerName) : 0);
1107 }
1108 } else {
1109 *countPtr += sizeof(uint32_t) + (local_pLayerName ? strlen(local_pLayerName) : 0);
1110 }
1111 // WARNING PTR CHECK
1112 *countPtr += 8;
1113 if (pPropertyCount) {
1114 *countPtr += sizeof(uint32_t);
1115 }
1116 // WARNING PTR CHECK
1117 *countPtr += 8;
1118 if (pProperties) {
1119 if (pPropertyCount) {
1120 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1121 count_VkExtensionProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
1122 (VkExtensionProperties*)(pProperties + i),
1123 countPtr);
1124 }
1125 }
1126 }
1127 }
1128 uint32_t packetSize_vkEnumerateInstanceExtensionProperties =
1129 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
1130 uint8_t* streamPtr = stream->reserve(packetSize_vkEnumerateInstanceExtensionProperties);
1131 uint8_t* packetBeginPtr = streamPtr;
1132 uint8_t** streamPtrPtr = &streamPtr;
1133 uint32_t opcode_vkEnumerateInstanceExtensionProperties =
1134 OP_vkEnumerateInstanceExtensionProperties;
1135 uint32_t seqno;
1136 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
1137 memcpy(streamPtr, &opcode_vkEnumerateInstanceExtensionProperties, sizeof(uint32_t));
1138 streamPtr += sizeof(uint32_t);
1139 memcpy(streamPtr, &packetSize_vkEnumerateInstanceExtensionProperties, sizeof(uint32_t));
1140 streamPtr += sizeof(uint32_t);
1141 if (queueSubmitWithCommandsEnabled) {
1142 memcpy(streamPtr, &seqno, sizeof(uint32_t));
1143 streamPtr += sizeof(uint32_t);
1144 }
1145 if (stream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT) {
1146 // WARNING PTR CHECK
1147 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)local_pLayerName;
1148 memcpy((*streamPtrPtr), &cgen_var_0, 8);
1149 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1150 *streamPtrPtr += 8;
1151 if (local_pLayerName) {
1152 {
1153 uint32_t l = local_pLayerName ? strlen(local_pLayerName) : 0;
1154 memcpy(*streamPtrPtr, (uint32_t*)&l, sizeof(uint32_t));
1155 gfxstream::aemu::Stream::toBe32((uint8_t*)*streamPtrPtr);
1156 *streamPtrPtr += sizeof(uint32_t);
1157 memcpy(*streamPtrPtr, (char*)local_pLayerName, l);
1158 *streamPtrPtr += l;
1159 }
1160 }
1161 } else {
1162 {
1163 uint32_t l = local_pLayerName ? strlen(local_pLayerName) : 0;
1164 memcpy(*streamPtrPtr, (uint32_t*)&l, sizeof(uint32_t));
1165 gfxstream::aemu::Stream::toBe32((uint8_t*)*streamPtrPtr);
1166 *streamPtrPtr += sizeof(uint32_t);
1167 memcpy(*streamPtrPtr, (char*)local_pLayerName, l);
1168 *streamPtrPtr += l;
1169 }
1170 }
1171 // WARNING PTR CHECK
1172 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)pPropertyCount;
1173 memcpy((*streamPtrPtr), &cgen_var_0, 8);
1174 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1175 *streamPtrPtr += 8;
1176 if (pPropertyCount) {
1177 memcpy(*streamPtrPtr, (uint32_t*)pPropertyCount, sizeof(uint32_t));
1178 *streamPtrPtr += sizeof(uint32_t);
1179 }
1180 // WARNING PTR CHECK
1181 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pProperties;
1182 memcpy((*streamPtrPtr), &cgen_var_1, 8);
1183 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1184 *streamPtrPtr += 8;
1185 if (pProperties) {
1186 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1187 reservedmarshal_VkExtensionProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1188 (VkExtensionProperties*)(pProperties + i),
1189 streamPtrPtr);
1190 }
1191 }
1192 // WARNING PTR CHECK
1193 uint32_t* check_pPropertyCount;
1194 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
1195 if (pPropertyCount) {
1196 if (!(check_pPropertyCount)) {
1197 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
1198 }
1199 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
1200 }
1201 // WARNING PTR CHECK
1202 VkExtensionProperties* check_pProperties;
1203 check_pProperties = (VkExtensionProperties*)(uintptr_t)stream->getBe64();
1204 if (pProperties) {
1205 if (!(check_pProperties)) {
1206 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
1207 }
1208 if (pPropertyCount) {
1209 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1210 unmarshal_VkExtensionProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1211 (VkExtensionProperties*)(pProperties + i));
1212 }
1213 }
1214 }
1215 if (pPropertyCount) {
1216 if (pProperties) {
1217 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1218 transform_fromhost_VkExtensionProperties(sResourceTracker,
1219 (VkExtensionProperties*)(pProperties + i));
1220 }
1221 }
1222 }
1223 VkResult vkEnumerateInstanceExtensionProperties_VkResult_return = (VkResult)0;
1224 stream->read(&vkEnumerateInstanceExtensionProperties_VkResult_return, sizeof(VkResult));
1225 ++encodeCount;
1226 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
1227 pool->freeAll();
1228 stream->clearPool();
1229 }
1230 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
1231 return vkEnumerateInstanceExtensionProperties_VkResult_return;
1232 }
1233
vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,const char * pLayerName,uint32_t * pPropertyCount,VkExtensionProperties * pProperties,uint32_t doLock)1234 VkResult VkEncoder::vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,
1235 const char* pLayerName,
1236 uint32_t* pPropertyCount,
1237 VkExtensionProperties* pProperties,
1238 uint32_t doLock) {
1239 (void)doLock;
1240 bool queueSubmitWithCommandsEnabled =
1241 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
1242 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
1243 auto stream = mImpl->stream();
1244 auto pool = mImpl->pool();
1245 VkPhysicalDevice local_physicalDevice;
1246 char* local_pLayerName;
1247 local_physicalDevice = physicalDevice;
1248 // Avoiding deepcopy for pLayerName
1249 local_pLayerName = (char*)pLayerName;
1250 size_t count = 0;
1251 size_t* countPtr = &count;
1252 {
1253 uint64_t cgen_var_0;
1254 *countPtr += 1 * 8;
1255 if (sFeatureBits & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT) {
1256 // WARNING PTR CHECK
1257 *countPtr += 8;
1258 if (local_pLayerName) {
1259 *countPtr += sizeof(uint32_t) + (local_pLayerName ? strlen(local_pLayerName) : 0);
1260 }
1261 } else {
1262 *countPtr += sizeof(uint32_t) + (local_pLayerName ? strlen(local_pLayerName) : 0);
1263 }
1264 // WARNING PTR CHECK
1265 *countPtr += 8;
1266 if (pPropertyCount) {
1267 *countPtr += sizeof(uint32_t);
1268 }
1269 // WARNING PTR CHECK
1270 *countPtr += 8;
1271 if (pProperties) {
1272 if (pPropertyCount) {
1273 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1274 count_VkExtensionProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
1275 (VkExtensionProperties*)(pProperties + i),
1276 countPtr);
1277 }
1278 }
1279 }
1280 }
1281 uint32_t packetSize_vkEnumerateDeviceExtensionProperties =
1282 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
1283 uint8_t* streamPtr = stream->reserve(packetSize_vkEnumerateDeviceExtensionProperties);
1284 uint8_t* packetBeginPtr = streamPtr;
1285 uint8_t** streamPtrPtr = &streamPtr;
1286 uint32_t opcode_vkEnumerateDeviceExtensionProperties = OP_vkEnumerateDeviceExtensionProperties;
1287 uint32_t seqno;
1288 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
1289 memcpy(streamPtr, &opcode_vkEnumerateDeviceExtensionProperties, sizeof(uint32_t));
1290 streamPtr += sizeof(uint32_t);
1291 memcpy(streamPtr, &packetSize_vkEnumerateDeviceExtensionProperties, sizeof(uint32_t));
1292 streamPtr += sizeof(uint32_t);
1293 if (queueSubmitWithCommandsEnabled) {
1294 memcpy(streamPtr, &seqno, sizeof(uint32_t));
1295 streamPtr += sizeof(uint32_t);
1296 }
1297 uint64_t cgen_var_0;
1298 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
1299 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
1300 *streamPtrPtr += 1 * 8;
1301 if (stream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT) {
1302 // WARNING PTR CHECK
1303 uint64_t cgen_var_0_0 = (uint64_t)(uintptr_t)local_pLayerName;
1304 memcpy((*streamPtrPtr), &cgen_var_0_0, 8);
1305 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1306 *streamPtrPtr += 8;
1307 if (local_pLayerName) {
1308 {
1309 uint32_t l = local_pLayerName ? strlen(local_pLayerName) : 0;
1310 memcpy(*streamPtrPtr, (uint32_t*)&l, sizeof(uint32_t));
1311 gfxstream::aemu::Stream::toBe32((uint8_t*)*streamPtrPtr);
1312 *streamPtrPtr += sizeof(uint32_t);
1313 memcpy(*streamPtrPtr, (char*)local_pLayerName, l);
1314 *streamPtrPtr += l;
1315 }
1316 }
1317 } else {
1318 {
1319 uint32_t l = local_pLayerName ? strlen(local_pLayerName) : 0;
1320 memcpy(*streamPtrPtr, (uint32_t*)&l, sizeof(uint32_t));
1321 gfxstream::aemu::Stream::toBe32((uint8_t*)*streamPtrPtr);
1322 *streamPtrPtr += sizeof(uint32_t);
1323 memcpy(*streamPtrPtr, (char*)local_pLayerName, l);
1324 *streamPtrPtr += l;
1325 }
1326 }
1327 // WARNING PTR CHECK
1328 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pPropertyCount;
1329 memcpy((*streamPtrPtr), &cgen_var_1, 8);
1330 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1331 *streamPtrPtr += 8;
1332 if (pPropertyCount) {
1333 memcpy(*streamPtrPtr, (uint32_t*)pPropertyCount, sizeof(uint32_t));
1334 *streamPtrPtr += sizeof(uint32_t);
1335 }
1336 // WARNING PTR CHECK
1337 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pProperties;
1338 memcpy((*streamPtrPtr), &cgen_var_2, 8);
1339 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1340 *streamPtrPtr += 8;
1341 if (pProperties) {
1342 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1343 reservedmarshal_VkExtensionProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1344 (VkExtensionProperties*)(pProperties + i),
1345 streamPtrPtr);
1346 }
1347 }
1348 // WARNING PTR CHECK
1349 uint32_t* check_pPropertyCount;
1350 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
1351 if (pPropertyCount) {
1352 if (!(check_pPropertyCount)) {
1353 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
1354 }
1355 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
1356 }
1357 // WARNING PTR CHECK
1358 VkExtensionProperties* check_pProperties;
1359 check_pProperties = (VkExtensionProperties*)(uintptr_t)stream->getBe64();
1360 if (pProperties) {
1361 if (!(check_pProperties)) {
1362 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
1363 }
1364 if (pPropertyCount) {
1365 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1366 unmarshal_VkExtensionProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1367 (VkExtensionProperties*)(pProperties + i));
1368 }
1369 }
1370 }
1371 if (pPropertyCount) {
1372 if (pProperties) {
1373 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1374 transform_fromhost_VkExtensionProperties(sResourceTracker,
1375 (VkExtensionProperties*)(pProperties + i));
1376 }
1377 }
1378 }
1379 VkResult vkEnumerateDeviceExtensionProperties_VkResult_return = (VkResult)0;
1380 stream->read(&vkEnumerateDeviceExtensionProperties_VkResult_return, sizeof(VkResult));
1381 ++encodeCount;
1382 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
1383 pool->freeAll();
1384 stream->clearPool();
1385 }
1386 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
1387 return vkEnumerateDeviceExtensionProperties_VkResult_return;
1388 }
1389
vkEnumerateInstanceLayerProperties(uint32_t * pPropertyCount,VkLayerProperties * pProperties,uint32_t doLock)1390 VkResult VkEncoder::vkEnumerateInstanceLayerProperties(uint32_t* pPropertyCount,
1391 VkLayerProperties* pProperties,
1392 uint32_t doLock) {
1393 (void)doLock;
1394 bool queueSubmitWithCommandsEnabled =
1395 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
1396 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
1397 auto stream = mImpl->stream();
1398 auto pool = mImpl->pool();
1399 size_t count = 0;
1400 size_t* countPtr = &count;
1401 {
1402 // WARNING PTR CHECK
1403 *countPtr += 8;
1404 if (pPropertyCount) {
1405 *countPtr += sizeof(uint32_t);
1406 }
1407 // WARNING PTR CHECK
1408 *countPtr += 8;
1409 if (pProperties) {
1410 if (pPropertyCount) {
1411 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1412 count_VkLayerProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
1413 (VkLayerProperties*)(pProperties + i), countPtr);
1414 }
1415 }
1416 }
1417 }
1418 uint32_t packetSize_vkEnumerateInstanceLayerProperties =
1419 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
1420 uint8_t* streamPtr = stream->reserve(packetSize_vkEnumerateInstanceLayerProperties);
1421 uint8_t* packetBeginPtr = streamPtr;
1422 uint8_t** streamPtrPtr = &streamPtr;
1423 uint32_t opcode_vkEnumerateInstanceLayerProperties = OP_vkEnumerateInstanceLayerProperties;
1424 uint32_t seqno;
1425 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
1426 memcpy(streamPtr, &opcode_vkEnumerateInstanceLayerProperties, sizeof(uint32_t));
1427 streamPtr += sizeof(uint32_t);
1428 memcpy(streamPtr, &packetSize_vkEnumerateInstanceLayerProperties, sizeof(uint32_t));
1429 streamPtr += sizeof(uint32_t);
1430 if (queueSubmitWithCommandsEnabled) {
1431 memcpy(streamPtr, &seqno, sizeof(uint32_t));
1432 streamPtr += sizeof(uint32_t);
1433 }
1434 // WARNING PTR CHECK
1435 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)pPropertyCount;
1436 memcpy((*streamPtrPtr), &cgen_var_0, 8);
1437 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1438 *streamPtrPtr += 8;
1439 if (pPropertyCount) {
1440 memcpy(*streamPtrPtr, (uint32_t*)pPropertyCount, sizeof(uint32_t));
1441 *streamPtrPtr += sizeof(uint32_t);
1442 }
1443 // WARNING PTR CHECK
1444 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pProperties;
1445 memcpy((*streamPtrPtr), &cgen_var_1, 8);
1446 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1447 *streamPtrPtr += 8;
1448 if (pProperties) {
1449 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1450 reservedmarshal_VkLayerProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1451 (VkLayerProperties*)(pProperties + i), streamPtrPtr);
1452 }
1453 }
1454 // WARNING PTR CHECK
1455 uint32_t* check_pPropertyCount;
1456 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
1457 if (pPropertyCount) {
1458 if (!(check_pPropertyCount)) {
1459 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
1460 }
1461 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
1462 }
1463 // WARNING PTR CHECK
1464 VkLayerProperties* check_pProperties;
1465 check_pProperties = (VkLayerProperties*)(uintptr_t)stream->getBe64();
1466 if (pProperties) {
1467 if (!(check_pProperties)) {
1468 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
1469 }
1470 if (pPropertyCount) {
1471 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1472 unmarshal_VkLayerProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1473 (VkLayerProperties*)(pProperties + i));
1474 }
1475 }
1476 }
1477 if (pPropertyCount) {
1478 if (pProperties) {
1479 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1480 transform_fromhost_VkLayerProperties(sResourceTracker,
1481 (VkLayerProperties*)(pProperties + i));
1482 }
1483 }
1484 }
1485 VkResult vkEnumerateInstanceLayerProperties_VkResult_return = (VkResult)0;
1486 stream->read(&vkEnumerateInstanceLayerProperties_VkResult_return, sizeof(VkResult));
1487 ++encodeCount;
1488 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
1489 pool->freeAll();
1490 stream->clearPool();
1491 }
1492 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
1493 return vkEnumerateInstanceLayerProperties_VkResult_return;
1494 }
1495
vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkLayerProperties * pProperties,uint32_t doLock)1496 VkResult VkEncoder::vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice,
1497 uint32_t* pPropertyCount,
1498 VkLayerProperties* pProperties,
1499 uint32_t doLock) {
1500 (void)doLock;
1501 bool queueSubmitWithCommandsEnabled =
1502 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
1503 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
1504 auto stream = mImpl->stream();
1505 auto pool = mImpl->pool();
1506 VkPhysicalDevice local_physicalDevice;
1507 local_physicalDevice = physicalDevice;
1508 size_t count = 0;
1509 size_t* countPtr = &count;
1510 {
1511 uint64_t cgen_var_0;
1512 *countPtr += 1 * 8;
1513 // WARNING PTR CHECK
1514 *countPtr += 8;
1515 if (pPropertyCount) {
1516 *countPtr += sizeof(uint32_t);
1517 }
1518 // WARNING PTR CHECK
1519 *countPtr += 8;
1520 if (pProperties) {
1521 if (pPropertyCount) {
1522 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1523 count_VkLayerProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
1524 (VkLayerProperties*)(pProperties + i), countPtr);
1525 }
1526 }
1527 }
1528 }
1529 uint32_t packetSize_vkEnumerateDeviceLayerProperties =
1530 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
1531 uint8_t* streamPtr = stream->reserve(packetSize_vkEnumerateDeviceLayerProperties);
1532 uint8_t* packetBeginPtr = streamPtr;
1533 uint8_t** streamPtrPtr = &streamPtr;
1534 uint32_t opcode_vkEnumerateDeviceLayerProperties = OP_vkEnumerateDeviceLayerProperties;
1535 uint32_t seqno;
1536 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
1537 memcpy(streamPtr, &opcode_vkEnumerateDeviceLayerProperties, sizeof(uint32_t));
1538 streamPtr += sizeof(uint32_t);
1539 memcpy(streamPtr, &packetSize_vkEnumerateDeviceLayerProperties, sizeof(uint32_t));
1540 streamPtr += sizeof(uint32_t);
1541 if (queueSubmitWithCommandsEnabled) {
1542 memcpy(streamPtr, &seqno, sizeof(uint32_t));
1543 streamPtr += sizeof(uint32_t);
1544 }
1545 uint64_t cgen_var_0;
1546 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
1547 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
1548 *streamPtrPtr += 1 * 8;
1549 // WARNING PTR CHECK
1550 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pPropertyCount;
1551 memcpy((*streamPtrPtr), &cgen_var_1, 8);
1552 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1553 *streamPtrPtr += 8;
1554 if (pPropertyCount) {
1555 memcpy(*streamPtrPtr, (uint32_t*)pPropertyCount, sizeof(uint32_t));
1556 *streamPtrPtr += sizeof(uint32_t);
1557 }
1558 // WARNING PTR CHECK
1559 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pProperties;
1560 memcpy((*streamPtrPtr), &cgen_var_2, 8);
1561 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1562 *streamPtrPtr += 8;
1563 if (pProperties) {
1564 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1565 reservedmarshal_VkLayerProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1566 (VkLayerProperties*)(pProperties + i), streamPtrPtr);
1567 }
1568 }
1569 // WARNING PTR CHECK
1570 uint32_t* check_pPropertyCount;
1571 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
1572 if (pPropertyCount) {
1573 if (!(check_pPropertyCount)) {
1574 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
1575 }
1576 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
1577 }
1578 // WARNING PTR CHECK
1579 VkLayerProperties* check_pProperties;
1580 check_pProperties = (VkLayerProperties*)(uintptr_t)stream->getBe64();
1581 if (pProperties) {
1582 if (!(check_pProperties)) {
1583 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
1584 }
1585 if (pPropertyCount) {
1586 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1587 unmarshal_VkLayerProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1588 (VkLayerProperties*)(pProperties + i));
1589 }
1590 }
1591 }
1592 if (pPropertyCount) {
1593 if (pProperties) {
1594 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
1595 transform_fromhost_VkLayerProperties(sResourceTracker,
1596 (VkLayerProperties*)(pProperties + i));
1597 }
1598 }
1599 }
1600 VkResult vkEnumerateDeviceLayerProperties_VkResult_return = (VkResult)0;
1601 stream->read(&vkEnumerateDeviceLayerProperties_VkResult_return, sizeof(VkResult));
1602 ++encodeCount;
1603 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
1604 pool->freeAll();
1605 stream->clearPool();
1606 }
1607 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
1608 return vkEnumerateDeviceLayerProperties_VkResult_return;
1609 }
1610
vkGetDeviceQueue(VkDevice device,uint32_t queueFamilyIndex,uint32_t queueIndex,VkQueue * pQueue,uint32_t doLock)1611 void VkEncoder::vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex,
1612 VkQueue* pQueue, uint32_t doLock) {
1613 (void)doLock;
1614 bool queueSubmitWithCommandsEnabled =
1615 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
1616 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
1617 auto stream = mImpl->stream();
1618 auto pool = mImpl->pool();
1619 VkDevice local_device;
1620 uint32_t local_queueFamilyIndex;
1621 uint32_t local_queueIndex;
1622 local_device = device;
1623 local_queueFamilyIndex = queueFamilyIndex;
1624 local_queueIndex = queueIndex;
1625 size_t count = 0;
1626 size_t* countPtr = &count;
1627 {
1628 uint64_t cgen_var_0;
1629 *countPtr += 1 * 8;
1630 *countPtr += sizeof(uint32_t);
1631 *countPtr += sizeof(uint32_t);
1632 uint64_t cgen_var_1;
1633 *countPtr += 8;
1634 }
1635 uint32_t packetSize_vkGetDeviceQueue = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
1636 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceQueue);
1637 uint8_t* packetBeginPtr = streamPtr;
1638 uint8_t** streamPtrPtr = &streamPtr;
1639 uint32_t opcode_vkGetDeviceQueue = OP_vkGetDeviceQueue;
1640 uint32_t seqno;
1641 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
1642 memcpy(streamPtr, &opcode_vkGetDeviceQueue, sizeof(uint32_t));
1643 streamPtr += sizeof(uint32_t);
1644 memcpy(streamPtr, &packetSize_vkGetDeviceQueue, sizeof(uint32_t));
1645 streamPtr += sizeof(uint32_t);
1646 if (queueSubmitWithCommandsEnabled) {
1647 memcpy(streamPtr, &seqno, sizeof(uint32_t));
1648 streamPtr += sizeof(uint32_t);
1649 }
1650 uint64_t cgen_var_0;
1651 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
1652 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
1653 *streamPtrPtr += 1 * 8;
1654 memcpy(*streamPtrPtr, (uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
1655 *streamPtrPtr += sizeof(uint32_t);
1656 memcpy(*streamPtrPtr, (uint32_t*)&local_queueIndex, sizeof(uint32_t));
1657 *streamPtrPtr += sizeof(uint32_t);
1658 /* is handle, possibly out */;
1659 uint64_t cgen_var_1;
1660 *&cgen_var_1 = (uint64_t)((*pQueue));
1661 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 8);
1662 *streamPtrPtr += 8;
1663 /* is handle, possibly out */;
1664 stream->setHandleMapping(sResourceTracker->createMapping());
1665 uint64_t cgen_var_2;
1666 stream->read((uint64_t*)&cgen_var_2, 8);
1667 stream->handleMapping()->mapHandles_u64_VkQueue(&cgen_var_2, (VkQueue*)pQueue, 1);
1668 stream->unsetHandleMapping();
1669 sResourceTracker->on_vkGetDeviceQueue(this, device, queueFamilyIndex, queueIndex, pQueue);
1670 ++encodeCount;
1671 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
1672 pool->freeAll();
1673 stream->clearPool();
1674 }
1675 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
1676 }
1677
vkQueueSubmit(VkQueue queue,uint32_t submitCount,const VkSubmitInfo * pSubmits,VkFence fence,uint32_t doLock)1678 VkResult VkEncoder::vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits,
1679 VkFence fence, uint32_t doLock) {
1680 (void)doLock;
1681 bool queueSubmitWithCommandsEnabled =
1682 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
1683 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
1684 auto stream = mImpl->stream();
1685 auto pool = mImpl->pool();
1686 VkQueue local_queue;
1687 uint32_t local_submitCount;
1688 VkSubmitInfo* local_pSubmits;
1689 VkFence local_fence;
1690 local_queue = queue;
1691 local_submitCount = submitCount;
1692 local_pSubmits = nullptr;
1693 if (pSubmits) {
1694 local_pSubmits = (VkSubmitInfo*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo));
1695 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
1696 deepcopy_VkSubmitInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubmits + i,
1697 (VkSubmitInfo*)(local_pSubmits + i));
1698 }
1699 }
1700 local_fence = fence;
1701 if (local_pSubmits) {
1702 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
1703 transform_tohost_VkSubmitInfo(sResourceTracker, (VkSubmitInfo*)(local_pSubmits + i));
1704 }
1705 }
1706 size_t count = 0;
1707 size_t* countPtr = &count;
1708 {
1709 uint64_t cgen_var_0;
1710 *countPtr += 1 * 8;
1711 *countPtr += sizeof(uint32_t);
1712 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
1713 count_VkSubmitInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
1714 (VkSubmitInfo*)(local_pSubmits + i), countPtr);
1715 }
1716 uint64_t cgen_var_1;
1717 *countPtr += 1 * 8;
1718 }
1719 uint32_t packetSize_vkQueueSubmit = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
1720 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSubmit);
1721 uint8_t* packetBeginPtr = streamPtr;
1722 uint8_t** streamPtrPtr = &streamPtr;
1723 uint32_t opcode_vkQueueSubmit = OP_vkQueueSubmit;
1724 uint32_t seqno;
1725 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
1726 memcpy(streamPtr, &opcode_vkQueueSubmit, sizeof(uint32_t));
1727 streamPtr += sizeof(uint32_t);
1728 memcpy(streamPtr, &packetSize_vkQueueSubmit, sizeof(uint32_t));
1729 streamPtr += sizeof(uint32_t);
1730 if (queueSubmitWithCommandsEnabled) {
1731 memcpy(streamPtr, &seqno, sizeof(uint32_t));
1732 streamPtr += sizeof(uint32_t);
1733 }
1734 uint64_t cgen_var_0;
1735 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
1736 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
1737 *streamPtrPtr += 1 * 8;
1738 memcpy(*streamPtrPtr, (uint32_t*)&local_submitCount, sizeof(uint32_t));
1739 *streamPtrPtr += sizeof(uint32_t);
1740 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
1741 reservedmarshal_VkSubmitInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1742 (VkSubmitInfo*)(local_pSubmits + i), streamPtrPtr);
1743 }
1744 uint64_t cgen_var_1;
1745 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
1746 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
1747 *streamPtrPtr += 1 * 8;
1748 VkResult vkQueueSubmit_VkResult_return = (VkResult)0;
1749 stream->read(&vkQueueSubmit_VkResult_return, sizeof(VkResult));
1750 ++encodeCount;
1751 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
1752 pool->freeAll();
1753 stream->clearPool();
1754 }
1755 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
1756 return vkQueueSubmit_VkResult_return;
1757 }
1758
vkQueueWaitIdle(VkQueue queue,uint32_t doLock)1759 VkResult VkEncoder::vkQueueWaitIdle(VkQueue queue, uint32_t doLock) {
1760 (void)doLock;
1761 bool queueSubmitWithCommandsEnabled =
1762 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
1763 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
1764 auto stream = mImpl->stream();
1765 auto pool = mImpl->pool();
1766 VkQueue local_queue;
1767 local_queue = queue;
1768 size_t count = 0;
1769 size_t* countPtr = &count;
1770 {
1771 uint64_t cgen_var_0;
1772 *countPtr += 1 * 8;
1773 }
1774 uint32_t packetSize_vkQueueWaitIdle = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
1775 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueWaitIdle);
1776 uint8_t* packetBeginPtr = streamPtr;
1777 uint8_t** streamPtrPtr = &streamPtr;
1778 uint32_t opcode_vkQueueWaitIdle = OP_vkQueueWaitIdle;
1779 uint32_t seqno;
1780 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
1781 memcpy(streamPtr, &opcode_vkQueueWaitIdle, sizeof(uint32_t));
1782 streamPtr += sizeof(uint32_t);
1783 memcpy(streamPtr, &packetSize_vkQueueWaitIdle, sizeof(uint32_t));
1784 streamPtr += sizeof(uint32_t);
1785 if (queueSubmitWithCommandsEnabled) {
1786 memcpy(streamPtr, &seqno, sizeof(uint32_t));
1787 streamPtr += sizeof(uint32_t);
1788 }
1789 uint64_t cgen_var_0;
1790 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
1791 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
1792 *streamPtrPtr += 1 * 8;
1793 VkResult vkQueueWaitIdle_VkResult_return = (VkResult)0;
1794 stream->read(&vkQueueWaitIdle_VkResult_return, sizeof(VkResult));
1795 ++encodeCount;
1796 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
1797 pool->freeAll();
1798 stream->clearPool();
1799 }
1800 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
1801 return vkQueueWaitIdle_VkResult_return;
1802 }
1803
vkDeviceWaitIdle(VkDevice device,uint32_t doLock)1804 VkResult VkEncoder::vkDeviceWaitIdle(VkDevice device, uint32_t doLock) {
1805 (void)doLock;
1806 bool queueSubmitWithCommandsEnabled =
1807 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
1808 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
1809 auto stream = mImpl->stream();
1810 auto pool = mImpl->pool();
1811 VkDevice local_device;
1812 local_device = device;
1813 size_t count = 0;
1814 size_t* countPtr = &count;
1815 {
1816 uint64_t cgen_var_0;
1817 *countPtr += 1 * 8;
1818 }
1819 uint32_t packetSize_vkDeviceWaitIdle = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
1820 uint8_t* streamPtr = stream->reserve(packetSize_vkDeviceWaitIdle);
1821 uint8_t* packetBeginPtr = streamPtr;
1822 uint8_t** streamPtrPtr = &streamPtr;
1823 uint32_t opcode_vkDeviceWaitIdle = OP_vkDeviceWaitIdle;
1824 uint32_t seqno;
1825 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
1826 memcpy(streamPtr, &opcode_vkDeviceWaitIdle, sizeof(uint32_t));
1827 streamPtr += sizeof(uint32_t);
1828 memcpy(streamPtr, &packetSize_vkDeviceWaitIdle, sizeof(uint32_t));
1829 streamPtr += sizeof(uint32_t);
1830 if (queueSubmitWithCommandsEnabled) {
1831 memcpy(streamPtr, &seqno, sizeof(uint32_t));
1832 streamPtr += sizeof(uint32_t);
1833 }
1834 uint64_t cgen_var_0;
1835 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
1836 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
1837 *streamPtrPtr += 1 * 8;
1838 VkResult vkDeviceWaitIdle_VkResult_return = (VkResult)0;
1839 stream->read(&vkDeviceWaitIdle_VkResult_return, sizeof(VkResult));
1840 ++encodeCount;
1841 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
1842 pool->freeAll();
1843 stream->clearPool();
1844 }
1845 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
1846 return vkDeviceWaitIdle_VkResult_return;
1847 }
1848
vkAllocateMemory(VkDevice device,const VkMemoryAllocateInfo * pAllocateInfo,const VkAllocationCallbacks * pAllocator,VkDeviceMemory * pMemory,uint32_t doLock)1849 VkResult VkEncoder::vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo,
1850 const VkAllocationCallbacks* pAllocator,
1851 VkDeviceMemory* pMemory, uint32_t doLock) {
1852 (void)doLock;
1853 bool queueSubmitWithCommandsEnabled =
1854 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
1855 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
1856 auto stream = mImpl->stream();
1857 auto pool = mImpl->pool();
1858 VkDevice local_device;
1859 VkMemoryAllocateInfo* local_pAllocateInfo;
1860 VkAllocationCallbacks* local_pAllocator;
1861 local_device = device;
1862 local_pAllocateInfo = nullptr;
1863 if (pAllocateInfo) {
1864 local_pAllocateInfo =
1865 (VkMemoryAllocateInfo*)pool->alloc(sizeof(const VkMemoryAllocateInfo));
1866 deepcopy_VkMemoryAllocateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocateInfo,
1867 (VkMemoryAllocateInfo*)(local_pAllocateInfo));
1868 }
1869 local_pAllocator = nullptr;
1870 if (pAllocator) {
1871 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
1872 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
1873 (VkAllocationCallbacks*)(local_pAllocator));
1874 }
1875 local_pAllocator = nullptr;
1876 if (local_pAllocateInfo) {
1877 transform_tohost_VkMemoryAllocateInfo(sResourceTracker,
1878 (VkMemoryAllocateInfo*)(local_pAllocateInfo));
1879 }
1880 if (local_pAllocator) {
1881 transform_tohost_VkAllocationCallbacks(sResourceTracker,
1882 (VkAllocationCallbacks*)(local_pAllocator));
1883 }
1884 size_t count = 0;
1885 size_t* countPtr = &count;
1886 {
1887 uint64_t cgen_var_0;
1888 *countPtr += 1 * 8;
1889 count_VkMemoryAllocateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
1890 (VkMemoryAllocateInfo*)(local_pAllocateInfo), countPtr);
1891 // WARNING PTR CHECK
1892 *countPtr += 8;
1893 if (local_pAllocator) {
1894 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
1895 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
1896 }
1897 uint64_t cgen_var_1;
1898 *countPtr += 8;
1899 }
1900 uint32_t packetSize_vkAllocateMemory = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
1901 uint8_t* streamPtr = stream->reserve(packetSize_vkAllocateMemory);
1902 uint8_t* packetBeginPtr = streamPtr;
1903 uint8_t** streamPtrPtr = &streamPtr;
1904 uint32_t opcode_vkAllocateMemory = OP_vkAllocateMemory;
1905 uint32_t seqno;
1906 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
1907 memcpy(streamPtr, &opcode_vkAllocateMemory, sizeof(uint32_t));
1908 streamPtr += sizeof(uint32_t);
1909 memcpy(streamPtr, &packetSize_vkAllocateMemory, sizeof(uint32_t));
1910 streamPtr += sizeof(uint32_t);
1911 if (queueSubmitWithCommandsEnabled) {
1912 memcpy(streamPtr, &seqno, sizeof(uint32_t));
1913 streamPtr += sizeof(uint32_t);
1914 }
1915 uint64_t cgen_var_0;
1916 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
1917 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
1918 *streamPtrPtr += 1 * 8;
1919 reservedmarshal_VkMemoryAllocateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1920 (VkMemoryAllocateInfo*)(local_pAllocateInfo),
1921 streamPtrPtr);
1922 // WARNING PTR CHECK
1923 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
1924 memcpy((*streamPtrPtr), &cgen_var_1, 8);
1925 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
1926 *streamPtrPtr += 8;
1927 if (local_pAllocator) {
1928 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
1929 (VkAllocationCallbacks*)(local_pAllocator),
1930 streamPtrPtr);
1931 }
1932 /* is handle, possibly out */;
1933 uint64_t cgen_var_2;
1934 *&cgen_var_2 = (uint64_t)((*pMemory));
1935 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
1936 *streamPtrPtr += 8;
1937 /* is handle, possibly out */;
1938 stream->setHandleMapping(sResourceTracker->createMapping());
1939 uint64_t cgen_var_3;
1940 stream->read((uint64_t*)&cgen_var_3, 8);
1941 stream->handleMapping()->mapHandles_u64_VkDeviceMemory(&cgen_var_3, (VkDeviceMemory*)pMemory,
1942 1);
1943 stream->unsetHandleMapping();
1944 VkResult vkAllocateMemory_VkResult_return = (VkResult)0;
1945 stream->read(&vkAllocateMemory_VkResult_return, sizeof(VkResult));
1946 ++encodeCount;
1947 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
1948 pool->freeAll();
1949 stream->clearPool();
1950 }
1951 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
1952 return vkAllocateMemory_VkResult_return;
1953 }
1954
vkFreeMemory(VkDevice device,VkDeviceMemory memory,const VkAllocationCallbacks * pAllocator,uint32_t doLock)1955 void VkEncoder::vkFreeMemory(VkDevice device, VkDeviceMemory memory,
1956 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
1957 (void)doLock;
1958 bool queueSubmitWithCommandsEnabled =
1959 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
1960 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
1961 auto stream = mImpl->stream();
1962 auto pool = mImpl->pool();
1963 VkDevice local_device;
1964 VkDeviceMemory local_memory;
1965 VkAllocationCallbacks* local_pAllocator;
1966 local_device = device;
1967 local_memory = memory;
1968 local_pAllocator = nullptr;
1969 if (pAllocator) {
1970 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
1971 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
1972 (VkAllocationCallbacks*)(local_pAllocator));
1973 }
1974 local_pAllocator = nullptr;
1975 sResourceTracker->deviceMemoryTransform_tohost(
1976 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0,
1977 (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
1978 size_t count = 0;
1979 size_t* countPtr = &count;
1980 {
1981 uint64_t cgen_var_0;
1982 *countPtr += 1 * 8;
1983 uint64_t cgen_var_1;
1984 *countPtr += 1 * 8;
1985 // WARNING PTR CHECK
1986 *countPtr += 8;
1987 if (local_pAllocator) {
1988 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
1989 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
1990 }
1991 }
1992 uint32_t packetSize_vkFreeMemory = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
1993 uint8_t* streamPtr = stream->reserve(packetSize_vkFreeMemory);
1994 uint8_t* packetBeginPtr = streamPtr;
1995 uint8_t** streamPtrPtr = &streamPtr;
1996 uint32_t opcode_vkFreeMemory = OP_vkFreeMemory;
1997 uint32_t seqno;
1998 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
1999 memcpy(streamPtr, &opcode_vkFreeMemory, sizeof(uint32_t));
2000 streamPtr += sizeof(uint32_t);
2001 memcpy(streamPtr, &packetSize_vkFreeMemory, sizeof(uint32_t));
2002 streamPtr += sizeof(uint32_t);
2003 if (queueSubmitWithCommandsEnabled) {
2004 memcpy(streamPtr, &seqno, sizeof(uint32_t));
2005 streamPtr += sizeof(uint32_t);
2006 }
2007 uint64_t cgen_var_0;
2008 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
2009 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
2010 *streamPtrPtr += 1 * 8;
2011 uint64_t cgen_var_1;
2012 *&cgen_var_1 = get_host_u64_VkDeviceMemory((*&local_memory));
2013 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
2014 *streamPtrPtr += 1 * 8;
2015 // WARNING PTR CHECK
2016 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
2017 memcpy((*streamPtrPtr), &cgen_var_2, 8);
2018 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
2019 *streamPtrPtr += 8;
2020 if (local_pAllocator) {
2021 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2022 (VkAllocationCallbacks*)(local_pAllocator),
2023 streamPtrPtr);
2024 }
2025 sResourceTracker->destroyMapping()->mapHandles_VkDeviceMemory((VkDeviceMemory*)&memory);
2026 stream->flush();
2027 ++encodeCount;
2028 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
2029 pool->freeAll();
2030 stream->clearPool();
2031 }
2032 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
2033 }
2034
vkMapMemory(VkDevice device,VkDeviceMemory memory,VkDeviceSize offset,VkDeviceSize size,VkMemoryMapFlags flags,void ** ppData,uint32_t doLock)2035 VkResult VkEncoder::vkMapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset,
2036 VkDeviceSize size, VkMemoryMapFlags flags, void** ppData,
2037 uint32_t doLock) {
2038 (void)doLock;
2039 VkResult vkMapMemory_VkResult_return = (VkResult)0;
2040 vkMapMemory_VkResult_return = sResourceTracker->on_vkMapMemory(this, VK_SUCCESS, device, memory,
2041 offset, size, flags, ppData);
2042 return vkMapMemory_VkResult_return;
2043 }
2044
vkUnmapMemory(VkDevice device,VkDeviceMemory memory,uint32_t doLock)2045 void VkEncoder::vkUnmapMemory(VkDevice device, VkDeviceMemory memory, uint32_t doLock) {
2046 (void)doLock;
2047 sResourceTracker->on_vkUnmapMemory(this, device, memory);
2048 }
2049
vkFlushMappedMemoryRanges(VkDevice device,uint32_t memoryRangeCount,const VkMappedMemoryRange * pMemoryRanges,uint32_t doLock)2050 VkResult VkEncoder::vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount,
2051 const VkMappedMemoryRange* pMemoryRanges,
2052 uint32_t doLock) {
2053 (void)doLock;
2054 bool queueSubmitWithCommandsEnabled =
2055 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
2056 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
2057 VALIDATE_RET(VkResult, VK_SUCCESS,
2058 mImpl->validation()->on_vkFlushMappedMemoryRanges(
2059 this, VK_SUCCESS, device, memoryRangeCount, pMemoryRanges));
2060 auto stream = mImpl->stream();
2061 auto pool = mImpl->pool();
2062 VkDevice local_device;
2063 uint32_t local_memoryRangeCount;
2064 VkMappedMemoryRange* local_pMemoryRanges;
2065 local_device = device;
2066 local_memoryRangeCount = memoryRangeCount;
2067 local_pMemoryRanges = nullptr;
2068 if (pMemoryRanges) {
2069 local_pMemoryRanges = (VkMappedMemoryRange*)pool->alloc(((memoryRangeCount)) *
2070 sizeof(const VkMappedMemoryRange));
2071 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
2072 deepcopy_VkMappedMemoryRange(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMemoryRanges + i,
2073 (VkMappedMemoryRange*)(local_pMemoryRanges + i));
2074 }
2075 }
2076 if (local_pMemoryRanges) {
2077 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
2078 transform_tohost_VkMappedMemoryRange(sResourceTracker,
2079 (VkMappedMemoryRange*)(local_pMemoryRanges + i));
2080 }
2081 }
2082 size_t count = 0;
2083 size_t* countPtr = &count;
2084 {
2085 uint64_t cgen_var_0;
2086 *countPtr += 1 * 8;
2087 *countPtr += sizeof(uint32_t);
2088 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
2089 count_VkMappedMemoryRange(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
2090 (VkMappedMemoryRange*)(local_pMemoryRanges + i), countPtr);
2091 }
2092 }
2093 uint32_t packetSize_vkFlushMappedMemoryRanges =
2094 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
2095 uint8_t* streamPtr = stream->reserve(packetSize_vkFlushMappedMemoryRanges);
2096 uint8_t* packetBeginPtr = streamPtr;
2097 uint8_t** streamPtrPtr = &streamPtr;
2098 uint32_t opcode_vkFlushMappedMemoryRanges = OP_vkFlushMappedMemoryRanges;
2099 uint32_t seqno;
2100 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
2101 memcpy(streamPtr, &opcode_vkFlushMappedMemoryRanges, sizeof(uint32_t));
2102 streamPtr += sizeof(uint32_t);
2103 memcpy(streamPtr, &packetSize_vkFlushMappedMemoryRanges, sizeof(uint32_t));
2104 streamPtr += sizeof(uint32_t);
2105 if (queueSubmitWithCommandsEnabled) {
2106 memcpy(streamPtr, &seqno, sizeof(uint32_t));
2107 streamPtr += sizeof(uint32_t);
2108 }
2109 uint64_t cgen_var_0;
2110 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
2111 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
2112 *streamPtrPtr += 1 * 8;
2113 memcpy(*streamPtrPtr, (uint32_t*)&local_memoryRangeCount, sizeof(uint32_t));
2114 *streamPtrPtr += sizeof(uint32_t);
2115 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
2116 reservedmarshal_VkMappedMemoryRange(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2117 (VkMappedMemoryRange*)(local_pMemoryRanges + i),
2118 streamPtrPtr);
2119 }
2120 if (!sResourceTracker->usingDirectMapping()) {
2121 for (uint32_t i = 0; i < memoryRangeCount; ++i) {
2122 auto range = pMemoryRanges[i];
2123 auto memory = pMemoryRanges[i].memory;
2124 auto size = pMemoryRanges[i].size;
2125 auto offset = pMemoryRanges[i].offset;
2126 uint64_t streamSize = 0;
2127 if (!memory) {
2128 stream->write(&streamSize, sizeof(uint64_t));
2129 continue;
2130 };
2131 auto hostPtr = sResourceTracker->getMappedPointer(memory);
2132 auto actualSize =
2133 size == VK_WHOLE_SIZE ? sResourceTracker->getMappedSize(memory) : size;
2134 if (!hostPtr) {
2135 stream->write(&streamSize, sizeof(uint64_t));
2136 continue;
2137 };
2138 streamSize = actualSize;
2139 stream->write(&streamSize, sizeof(uint64_t));
2140 uint8_t* targetRange = hostPtr + offset;
2141 stream->write(targetRange, actualSize);
2142 }
2143 }
2144 VkResult vkFlushMappedMemoryRanges_VkResult_return = (VkResult)0;
2145 stream->read(&vkFlushMappedMemoryRanges_VkResult_return, sizeof(VkResult));
2146 ++encodeCount;
2147 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
2148 pool->freeAll();
2149 stream->clearPool();
2150 }
2151 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
2152 return vkFlushMappedMemoryRanges_VkResult_return;
2153 }
2154
vkInvalidateMappedMemoryRanges(VkDevice device,uint32_t memoryRangeCount,const VkMappedMemoryRange * pMemoryRanges,uint32_t doLock)2155 VkResult VkEncoder::vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount,
2156 const VkMappedMemoryRange* pMemoryRanges,
2157 uint32_t doLock) {
2158 (void)doLock;
2159 bool queueSubmitWithCommandsEnabled =
2160 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
2161 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
2162 VALIDATE_RET(VkResult, VK_SUCCESS,
2163 mImpl->validation()->on_vkInvalidateMappedMemoryRanges(
2164 this, VK_SUCCESS, device, memoryRangeCount, pMemoryRanges));
2165 auto stream = mImpl->stream();
2166 auto pool = mImpl->pool();
2167 VkDevice local_device;
2168 uint32_t local_memoryRangeCount;
2169 VkMappedMemoryRange* local_pMemoryRanges;
2170 local_device = device;
2171 local_memoryRangeCount = memoryRangeCount;
2172 local_pMemoryRanges = nullptr;
2173 if (pMemoryRanges) {
2174 local_pMemoryRanges = (VkMappedMemoryRange*)pool->alloc(((memoryRangeCount)) *
2175 sizeof(const VkMappedMemoryRange));
2176 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
2177 deepcopy_VkMappedMemoryRange(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMemoryRanges + i,
2178 (VkMappedMemoryRange*)(local_pMemoryRanges + i));
2179 }
2180 }
2181 if (local_pMemoryRanges) {
2182 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
2183 transform_tohost_VkMappedMemoryRange(sResourceTracker,
2184 (VkMappedMemoryRange*)(local_pMemoryRanges + i));
2185 }
2186 }
2187 size_t count = 0;
2188 size_t* countPtr = &count;
2189 {
2190 uint64_t cgen_var_0;
2191 *countPtr += 1 * 8;
2192 *countPtr += sizeof(uint32_t);
2193 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
2194 count_VkMappedMemoryRange(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
2195 (VkMappedMemoryRange*)(local_pMemoryRanges + i), countPtr);
2196 }
2197 }
2198 uint32_t packetSize_vkInvalidateMappedMemoryRanges =
2199 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
2200 uint8_t* streamPtr = stream->reserve(packetSize_vkInvalidateMappedMemoryRanges);
2201 uint8_t* packetBeginPtr = streamPtr;
2202 uint8_t** streamPtrPtr = &streamPtr;
2203 uint32_t opcode_vkInvalidateMappedMemoryRanges = OP_vkInvalidateMappedMemoryRanges;
2204 uint32_t seqno;
2205 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
2206 memcpy(streamPtr, &opcode_vkInvalidateMappedMemoryRanges, sizeof(uint32_t));
2207 streamPtr += sizeof(uint32_t);
2208 memcpy(streamPtr, &packetSize_vkInvalidateMappedMemoryRanges, sizeof(uint32_t));
2209 streamPtr += sizeof(uint32_t);
2210 if (queueSubmitWithCommandsEnabled) {
2211 memcpy(streamPtr, &seqno, sizeof(uint32_t));
2212 streamPtr += sizeof(uint32_t);
2213 }
2214 uint64_t cgen_var_0;
2215 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
2216 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
2217 *streamPtrPtr += 1 * 8;
2218 memcpy(*streamPtrPtr, (uint32_t*)&local_memoryRangeCount, sizeof(uint32_t));
2219 *streamPtrPtr += sizeof(uint32_t);
2220 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i) {
2221 reservedmarshal_VkMappedMemoryRange(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2222 (VkMappedMemoryRange*)(local_pMemoryRanges + i),
2223 streamPtrPtr);
2224 }
2225 VkResult vkInvalidateMappedMemoryRanges_VkResult_return = (VkResult)0;
2226 stream->read(&vkInvalidateMappedMemoryRanges_VkResult_return, sizeof(VkResult));
2227 if (!sResourceTracker->usingDirectMapping()) {
2228 for (uint32_t i = 0; i < memoryRangeCount; ++i) {
2229 auto range = pMemoryRanges[i];
2230 auto memory = pMemoryRanges[i].memory;
2231 auto size = pMemoryRanges[i].size;
2232 auto offset = pMemoryRanges[i].offset;
2233 uint64_t streamSize = 0;
2234 if (!memory) {
2235 stream->read(&streamSize, sizeof(uint64_t));
2236 continue;
2237 };
2238 auto hostPtr = sResourceTracker->getMappedPointer(memory);
2239 auto actualSize =
2240 size == VK_WHOLE_SIZE ? sResourceTracker->getMappedSize(memory) : size;
2241 if (!hostPtr) {
2242 stream->read(&streamSize, sizeof(uint64_t));
2243 continue;
2244 };
2245 streamSize = actualSize;
2246 stream->read(&streamSize, sizeof(uint64_t));
2247 uint8_t* targetRange = hostPtr + offset;
2248 stream->read(targetRange, actualSize);
2249 }
2250 }
2251 ++encodeCount;
2252 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
2253 pool->freeAll();
2254 stream->clearPool();
2255 }
2256 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
2257 return vkInvalidateMappedMemoryRanges_VkResult_return;
2258 }
2259
vkGetDeviceMemoryCommitment(VkDevice device,VkDeviceMemory memory,VkDeviceSize * pCommittedMemoryInBytes,uint32_t doLock)2260 void VkEncoder::vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory,
2261 VkDeviceSize* pCommittedMemoryInBytes,
2262 uint32_t doLock) {
2263 (void)doLock;
2264 bool queueSubmitWithCommandsEnabled =
2265 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
2266 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
2267 auto stream = mImpl->stream();
2268 auto pool = mImpl->pool();
2269 VkDevice local_device;
2270 VkDeviceMemory local_memory;
2271 local_device = device;
2272 local_memory = memory;
2273 sResourceTracker->deviceMemoryTransform_tohost(
2274 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0,
2275 (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
2276 size_t count = 0;
2277 size_t* countPtr = &count;
2278 {
2279 uint64_t cgen_var_0;
2280 *countPtr += 1 * 8;
2281 uint64_t cgen_var_1;
2282 *countPtr += 1 * 8;
2283 *countPtr += sizeof(VkDeviceSize);
2284 }
2285 uint32_t packetSize_vkGetDeviceMemoryCommitment =
2286 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
2287 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceMemoryCommitment);
2288 uint8_t* packetBeginPtr = streamPtr;
2289 uint8_t** streamPtrPtr = &streamPtr;
2290 uint32_t opcode_vkGetDeviceMemoryCommitment = OP_vkGetDeviceMemoryCommitment;
2291 uint32_t seqno;
2292 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
2293 memcpy(streamPtr, &opcode_vkGetDeviceMemoryCommitment, sizeof(uint32_t));
2294 streamPtr += sizeof(uint32_t);
2295 memcpy(streamPtr, &packetSize_vkGetDeviceMemoryCommitment, sizeof(uint32_t));
2296 streamPtr += sizeof(uint32_t);
2297 if (queueSubmitWithCommandsEnabled) {
2298 memcpy(streamPtr, &seqno, sizeof(uint32_t));
2299 streamPtr += sizeof(uint32_t);
2300 }
2301 uint64_t cgen_var_0;
2302 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
2303 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
2304 *streamPtrPtr += 1 * 8;
2305 uint64_t cgen_var_1;
2306 *&cgen_var_1 = get_host_u64_VkDeviceMemory((*&local_memory));
2307 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
2308 *streamPtrPtr += 1 * 8;
2309 memcpy(*streamPtrPtr, (VkDeviceSize*)pCommittedMemoryInBytes, sizeof(VkDeviceSize));
2310 *streamPtrPtr += sizeof(VkDeviceSize);
2311 stream->read((VkDeviceSize*)pCommittedMemoryInBytes, sizeof(VkDeviceSize));
2312 ++encodeCount;
2313 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
2314 pool->freeAll();
2315 stream->clearPool();
2316 }
2317 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
2318 }
2319
vkBindBufferMemory(VkDevice device,VkBuffer buffer,VkDeviceMemory memory,VkDeviceSize memoryOffset,uint32_t doLock)2320 VkResult VkEncoder::vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory,
2321 VkDeviceSize memoryOffset, uint32_t doLock) {
2322 (void)doLock;
2323 bool queueSubmitWithCommandsEnabled =
2324 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
2325 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
2326 auto stream = mImpl->stream();
2327 auto pool = mImpl->pool();
2328 VkDevice local_device;
2329 VkBuffer local_buffer;
2330 VkDeviceMemory local_memory;
2331 VkDeviceSize local_memoryOffset;
2332 local_device = device;
2333 local_buffer = buffer;
2334 local_memory = memory;
2335 local_memoryOffset = memoryOffset;
2336 sResourceTracker->deviceMemoryTransform_tohost(
2337 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)&local_memoryOffset, 1,
2338 (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
2339 size_t count = 0;
2340 size_t* countPtr = &count;
2341 {
2342 uint64_t cgen_var_0;
2343 *countPtr += 1 * 8;
2344 uint64_t cgen_var_1;
2345 *countPtr += 1 * 8;
2346 uint64_t cgen_var_2;
2347 *countPtr += 1 * 8;
2348 *countPtr += sizeof(VkDeviceSize);
2349 }
2350 uint32_t packetSize_vkBindBufferMemory =
2351 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
2352 uint8_t* streamPtr = stream->reserve(packetSize_vkBindBufferMemory);
2353 uint8_t* packetBeginPtr = streamPtr;
2354 uint8_t** streamPtrPtr = &streamPtr;
2355 uint32_t opcode_vkBindBufferMemory = OP_vkBindBufferMemory;
2356 uint32_t seqno;
2357 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
2358 memcpy(streamPtr, &opcode_vkBindBufferMemory, sizeof(uint32_t));
2359 streamPtr += sizeof(uint32_t);
2360 memcpy(streamPtr, &packetSize_vkBindBufferMemory, sizeof(uint32_t));
2361 streamPtr += sizeof(uint32_t);
2362 if (queueSubmitWithCommandsEnabled) {
2363 memcpy(streamPtr, &seqno, sizeof(uint32_t));
2364 streamPtr += sizeof(uint32_t);
2365 }
2366 uint64_t cgen_var_0;
2367 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
2368 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
2369 *streamPtrPtr += 1 * 8;
2370 uint64_t cgen_var_1;
2371 *&cgen_var_1 = get_host_u64_VkBuffer((*&local_buffer));
2372 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
2373 *streamPtrPtr += 1 * 8;
2374 uint64_t cgen_var_2;
2375 *&cgen_var_2 = get_host_u64_VkDeviceMemory((*&local_memory));
2376 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
2377 *streamPtrPtr += 1 * 8;
2378 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_memoryOffset, sizeof(VkDeviceSize));
2379 *streamPtrPtr += sizeof(VkDeviceSize);
2380 VkResult vkBindBufferMemory_VkResult_return = (VkResult)0;
2381 stream->read(&vkBindBufferMemory_VkResult_return, sizeof(VkResult));
2382 ++encodeCount;
2383 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
2384 pool->freeAll();
2385 stream->clearPool();
2386 }
2387 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
2388 return vkBindBufferMemory_VkResult_return;
2389 }
2390
vkBindImageMemory(VkDevice device,VkImage image,VkDeviceMemory memory,VkDeviceSize memoryOffset,uint32_t doLock)2391 VkResult VkEncoder::vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory,
2392 VkDeviceSize memoryOffset, uint32_t doLock) {
2393 (void)doLock;
2394 bool queueSubmitWithCommandsEnabled =
2395 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
2396 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
2397 auto stream = mImpl->stream();
2398 auto pool = mImpl->pool();
2399 VkDevice local_device;
2400 VkImage local_image;
2401 VkDeviceMemory local_memory;
2402 VkDeviceSize local_memoryOffset;
2403 local_device = device;
2404 local_image = image;
2405 local_memory = memory;
2406 local_memoryOffset = memoryOffset;
2407 sResourceTracker->deviceMemoryTransform_tohost(
2408 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)&local_memoryOffset, 1,
2409 (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
2410 size_t count = 0;
2411 size_t* countPtr = &count;
2412 {
2413 uint64_t cgen_var_0;
2414 *countPtr += 1 * 8;
2415 uint64_t cgen_var_1;
2416 *countPtr += 1 * 8;
2417 uint64_t cgen_var_2;
2418 *countPtr += 1 * 8;
2419 *countPtr += sizeof(VkDeviceSize);
2420 }
2421 uint32_t packetSize_vkBindImageMemory =
2422 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
2423 uint8_t* streamPtr = stream->reserve(packetSize_vkBindImageMemory);
2424 uint8_t* packetBeginPtr = streamPtr;
2425 uint8_t** streamPtrPtr = &streamPtr;
2426 uint32_t opcode_vkBindImageMemory = OP_vkBindImageMemory;
2427 uint32_t seqno;
2428 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
2429 memcpy(streamPtr, &opcode_vkBindImageMemory, sizeof(uint32_t));
2430 streamPtr += sizeof(uint32_t);
2431 memcpy(streamPtr, &packetSize_vkBindImageMemory, sizeof(uint32_t));
2432 streamPtr += sizeof(uint32_t);
2433 if (queueSubmitWithCommandsEnabled) {
2434 memcpy(streamPtr, &seqno, sizeof(uint32_t));
2435 streamPtr += sizeof(uint32_t);
2436 }
2437 uint64_t cgen_var_0;
2438 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
2439 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
2440 *streamPtrPtr += 1 * 8;
2441 uint64_t cgen_var_1;
2442 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
2443 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
2444 *streamPtrPtr += 1 * 8;
2445 uint64_t cgen_var_2;
2446 *&cgen_var_2 = get_host_u64_VkDeviceMemory((*&local_memory));
2447 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
2448 *streamPtrPtr += 1 * 8;
2449 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_memoryOffset, sizeof(VkDeviceSize));
2450 *streamPtrPtr += sizeof(VkDeviceSize);
2451 VkResult vkBindImageMemory_VkResult_return = (VkResult)0;
2452 stream->read(&vkBindImageMemory_VkResult_return, sizeof(VkResult));
2453 ++encodeCount;
2454 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
2455 pool->freeAll();
2456 stream->clearPool();
2457 }
2458 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
2459 return vkBindImageMemory_VkResult_return;
2460 }
2461
vkGetBufferMemoryRequirements(VkDevice device,VkBuffer buffer,VkMemoryRequirements * pMemoryRequirements,uint32_t doLock)2462 void VkEncoder::vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer,
2463 VkMemoryRequirements* pMemoryRequirements,
2464 uint32_t doLock) {
2465 (void)doLock;
2466 bool queueSubmitWithCommandsEnabled =
2467 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
2468 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
2469 auto stream = mImpl->stream();
2470 auto pool = mImpl->pool();
2471 VkDevice local_device;
2472 VkBuffer local_buffer;
2473 local_device = device;
2474 local_buffer = buffer;
2475 size_t count = 0;
2476 size_t* countPtr = &count;
2477 {
2478 uint64_t cgen_var_0;
2479 *countPtr += 1 * 8;
2480 uint64_t cgen_var_1;
2481 *countPtr += 1 * 8;
2482 count_VkMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
2483 (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
2484 }
2485 uint32_t packetSize_vkGetBufferMemoryRequirements =
2486 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
2487 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferMemoryRequirements);
2488 uint8_t* packetBeginPtr = streamPtr;
2489 uint8_t** streamPtrPtr = &streamPtr;
2490 uint32_t opcode_vkGetBufferMemoryRequirements = OP_vkGetBufferMemoryRequirements;
2491 uint32_t seqno;
2492 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
2493 memcpy(streamPtr, &opcode_vkGetBufferMemoryRequirements, sizeof(uint32_t));
2494 streamPtr += sizeof(uint32_t);
2495 memcpy(streamPtr, &packetSize_vkGetBufferMemoryRequirements, sizeof(uint32_t));
2496 streamPtr += sizeof(uint32_t);
2497 if (queueSubmitWithCommandsEnabled) {
2498 memcpy(streamPtr, &seqno, sizeof(uint32_t));
2499 streamPtr += sizeof(uint32_t);
2500 }
2501 uint64_t cgen_var_0;
2502 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
2503 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
2504 *streamPtrPtr += 1 * 8;
2505 uint64_t cgen_var_1;
2506 *&cgen_var_1 = get_host_u64_VkBuffer((*&local_buffer));
2507 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
2508 *streamPtrPtr += 1 * 8;
2509 reservedmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2510 (VkMemoryRequirements*)(pMemoryRequirements),
2511 streamPtrPtr);
2512 unmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2513 (VkMemoryRequirements*)(pMemoryRequirements));
2514 if (pMemoryRequirements) {
2515 transform_fromhost_VkMemoryRequirements(sResourceTracker,
2516 (VkMemoryRequirements*)(pMemoryRequirements));
2517 }
2518 ++encodeCount;
2519 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
2520 pool->freeAll();
2521 stream->clearPool();
2522 }
2523 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
2524 }
2525
vkGetImageMemoryRequirements(VkDevice device,VkImage image,VkMemoryRequirements * pMemoryRequirements,uint32_t doLock)2526 void VkEncoder::vkGetImageMemoryRequirements(VkDevice device, VkImage image,
2527 VkMemoryRequirements* pMemoryRequirements,
2528 uint32_t doLock) {
2529 (void)doLock;
2530 bool queueSubmitWithCommandsEnabled =
2531 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
2532 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
2533 auto stream = mImpl->stream();
2534 auto pool = mImpl->pool();
2535 VkDevice local_device;
2536 VkImage local_image;
2537 local_device = device;
2538 local_image = image;
2539 size_t count = 0;
2540 size_t* countPtr = &count;
2541 {
2542 uint64_t cgen_var_0;
2543 *countPtr += 1 * 8;
2544 uint64_t cgen_var_1;
2545 *countPtr += 1 * 8;
2546 count_VkMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
2547 (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
2548 }
2549 uint32_t packetSize_vkGetImageMemoryRequirements =
2550 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
2551 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageMemoryRequirements);
2552 uint8_t* packetBeginPtr = streamPtr;
2553 uint8_t** streamPtrPtr = &streamPtr;
2554 uint32_t opcode_vkGetImageMemoryRequirements = OP_vkGetImageMemoryRequirements;
2555 uint32_t seqno;
2556 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
2557 memcpy(streamPtr, &opcode_vkGetImageMemoryRequirements, sizeof(uint32_t));
2558 streamPtr += sizeof(uint32_t);
2559 memcpy(streamPtr, &packetSize_vkGetImageMemoryRequirements, sizeof(uint32_t));
2560 streamPtr += sizeof(uint32_t);
2561 if (queueSubmitWithCommandsEnabled) {
2562 memcpy(streamPtr, &seqno, sizeof(uint32_t));
2563 streamPtr += sizeof(uint32_t);
2564 }
2565 uint64_t cgen_var_0;
2566 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
2567 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
2568 *streamPtrPtr += 1 * 8;
2569 uint64_t cgen_var_1;
2570 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
2571 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
2572 *streamPtrPtr += 1 * 8;
2573 reservedmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2574 (VkMemoryRequirements*)(pMemoryRequirements),
2575 streamPtrPtr);
2576 unmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2577 (VkMemoryRequirements*)(pMemoryRequirements));
2578 if (pMemoryRequirements) {
2579 transform_fromhost_VkMemoryRequirements(sResourceTracker,
2580 (VkMemoryRequirements*)(pMemoryRequirements));
2581 }
2582 ++encodeCount;
2583 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
2584 pool->freeAll();
2585 stream->clearPool();
2586 }
2587 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
2588 }
2589
vkGetImageSparseMemoryRequirements(VkDevice device,VkImage image,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements * pSparseMemoryRequirements,uint32_t doLock)2590 void VkEncoder::vkGetImageSparseMemoryRequirements(
2591 VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount,
2592 VkSparseImageMemoryRequirements* pSparseMemoryRequirements, uint32_t doLock) {
2593 (void)doLock;
2594 bool queueSubmitWithCommandsEnabled =
2595 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
2596 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
2597 auto stream = mImpl->stream();
2598 auto pool = mImpl->pool();
2599 VkDevice local_device;
2600 VkImage local_image;
2601 local_device = device;
2602 local_image = image;
2603 size_t count = 0;
2604 size_t* countPtr = &count;
2605 {
2606 uint64_t cgen_var_0;
2607 *countPtr += 1 * 8;
2608 uint64_t cgen_var_1;
2609 *countPtr += 1 * 8;
2610 // WARNING PTR CHECK
2611 *countPtr += 8;
2612 if (pSparseMemoryRequirementCount) {
2613 *countPtr += sizeof(uint32_t);
2614 }
2615 // WARNING PTR CHECK
2616 *countPtr += 8;
2617 if (pSparseMemoryRequirements) {
2618 if (pSparseMemoryRequirementCount) {
2619 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
2620 count_VkSparseImageMemoryRequirements(
2621 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
2622 (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i),
2623 countPtr);
2624 }
2625 }
2626 }
2627 }
2628 uint32_t packetSize_vkGetImageSparseMemoryRequirements =
2629 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
2630 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageSparseMemoryRequirements);
2631 uint8_t* packetBeginPtr = streamPtr;
2632 uint8_t** streamPtrPtr = &streamPtr;
2633 uint32_t opcode_vkGetImageSparseMemoryRequirements = OP_vkGetImageSparseMemoryRequirements;
2634 uint32_t seqno;
2635 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
2636 memcpy(streamPtr, &opcode_vkGetImageSparseMemoryRequirements, sizeof(uint32_t));
2637 streamPtr += sizeof(uint32_t);
2638 memcpy(streamPtr, &packetSize_vkGetImageSparseMemoryRequirements, sizeof(uint32_t));
2639 streamPtr += sizeof(uint32_t);
2640 if (queueSubmitWithCommandsEnabled) {
2641 memcpy(streamPtr, &seqno, sizeof(uint32_t));
2642 streamPtr += sizeof(uint32_t);
2643 }
2644 uint64_t cgen_var_0;
2645 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
2646 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
2647 *streamPtrPtr += 1 * 8;
2648 uint64_t cgen_var_1;
2649 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
2650 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
2651 *streamPtrPtr += 1 * 8;
2652 // WARNING PTR CHECK
2653 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
2654 memcpy((*streamPtrPtr), &cgen_var_2, 8);
2655 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
2656 *streamPtrPtr += 8;
2657 if (pSparseMemoryRequirementCount) {
2658 memcpy(*streamPtrPtr, (uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
2659 *streamPtrPtr += sizeof(uint32_t);
2660 }
2661 // WARNING PTR CHECK
2662 uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
2663 memcpy((*streamPtrPtr), &cgen_var_3, 8);
2664 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
2665 *streamPtrPtr += 8;
2666 if (pSparseMemoryRequirements) {
2667 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
2668 reservedmarshal_VkSparseImageMemoryRequirements(
2669 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2670 (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i), streamPtrPtr);
2671 }
2672 }
2673 // WARNING PTR CHECK
2674 uint32_t* check_pSparseMemoryRequirementCount;
2675 check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
2676 if (pSparseMemoryRequirementCount) {
2677 if (!(check_pSparseMemoryRequirementCount)) {
2678 fprintf(stderr,
2679 "fatal: pSparseMemoryRequirementCount inconsistent between guest and host\n");
2680 }
2681 stream->read((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
2682 }
2683 // WARNING PTR CHECK
2684 VkSparseImageMemoryRequirements* check_pSparseMemoryRequirements;
2685 check_pSparseMemoryRequirements =
2686 (VkSparseImageMemoryRequirements*)(uintptr_t)stream->getBe64();
2687 if (pSparseMemoryRequirements) {
2688 if (!(check_pSparseMemoryRequirements)) {
2689 fprintf(stderr,
2690 "fatal: pSparseMemoryRequirements inconsistent between guest and host\n");
2691 }
2692 if (pSparseMemoryRequirementCount) {
2693 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
2694 unmarshal_VkSparseImageMemoryRequirements(
2695 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2696 (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
2697 }
2698 }
2699 }
2700 if (pSparseMemoryRequirementCount) {
2701 if (pSparseMemoryRequirements) {
2702 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
2703 transform_fromhost_VkSparseImageMemoryRequirements(
2704 sResourceTracker,
2705 (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
2706 }
2707 }
2708 }
2709 ++encodeCount;
2710 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
2711 pool->freeAll();
2712 stream->clearPool();
2713 }
2714 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
2715 }
2716
vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkSampleCountFlagBits samples,VkImageUsageFlags usage,VkImageTiling tiling,uint32_t * pPropertyCount,VkSparseImageFormatProperties * pProperties,uint32_t doLock)2717 void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties(
2718 VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type,
2719 VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling,
2720 uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties, uint32_t doLock) {
2721 (void)doLock;
2722 bool queueSubmitWithCommandsEnabled =
2723 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
2724 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
2725 auto stream = mImpl->stream();
2726 auto pool = mImpl->pool();
2727 VkPhysicalDevice local_physicalDevice;
2728 VkFormat local_format;
2729 VkImageType local_type;
2730 VkSampleCountFlagBits local_samples;
2731 VkImageUsageFlags local_usage;
2732 VkImageTiling local_tiling;
2733 local_physicalDevice = physicalDevice;
2734 local_format = format;
2735 local_type = type;
2736 local_samples = samples;
2737 local_usage = usage;
2738 local_tiling = tiling;
2739 size_t count = 0;
2740 size_t* countPtr = &count;
2741 {
2742 uint64_t cgen_var_0;
2743 *countPtr += 1 * 8;
2744 *countPtr += sizeof(VkFormat);
2745 *countPtr += sizeof(VkImageType);
2746 *countPtr += sizeof(VkSampleCountFlagBits);
2747 *countPtr += sizeof(VkImageUsageFlags);
2748 *countPtr += sizeof(VkImageTiling);
2749 // WARNING PTR CHECK
2750 *countPtr += 8;
2751 if (pPropertyCount) {
2752 *countPtr += sizeof(uint32_t);
2753 }
2754 // WARNING PTR CHECK
2755 *countPtr += 8;
2756 if (pProperties) {
2757 if (pPropertyCount) {
2758 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
2759 count_VkSparseImageFormatProperties(
2760 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
2761 (VkSparseImageFormatProperties*)(pProperties + i), countPtr);
2762 }
2763 }
2764 }
2765 }
2766 uint32_t packetSize_vkGetPhysicalDeviceSparseImageFormatProperties =
2767 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
2768 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceSparseImageFormatProperties);
2769 uint8_t* packetBeginPtr = streamPtr;
2770 uint8_t** streamPtrPtr = &streamPtr;
2771 uint32_t opcode_vkGetPhysicalDeviceSparseImageFormatProperties =
2772 OP_vkGetPhysicalDeviceSparseImageFormatProperties;
2773 uint32_t seqno;
2774 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
2775 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceSparseImageFormatProperties, sizeof(uint32_t));
2776 streamPtr += sizeof(uint32_t);
2777 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceSparseImageFormatProperties, sizeof(uint32_t));
2778 streamPtr += sizeof(uint32_t);
2779 if (queueSubmitWithCommandsEnabled) {
2780 memcpy(streamPtr, &seqno, sizeof(uint32_t));
2781 streamPtr += sizeof(uint32_t);
2782 }
2783 uint64_t cgen_var_0;
2784 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
2785 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
2786 *streamPtrPtr += 1 * 8;
2787 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
2788 *streamPtrPtr += sizeof(VkFormat);
2789 memcpy(*streamPtrPtr, (VkImageType*)&local_type, sizeof(VkImageType));
2790 *streamPtrPtr += sizeof(VkImageType);
2791 memcpy(*streamPtrPtr, (VkSampleCountFlagBits*)&local_samples, sizeof(VkSampleCountFlagBits));
2792 *streamPtrPtr += sizeof(VkSampleCountFlagBits);
2793 memcpy(*streamPtrPtr, (VkImageUsageFlags*)&local_usage, sizeof(VkImageUsageFlags));
2794 *streamPtrPtr += sizeof(VkImageUsageFlags);
2795 memcpy(*streamPtrPtr, (VkImageTiling*)&local_tiling, sizeof(VkImageTiling));
2796 *streamPtrPtr += sizeof(VkImageTiling);
2797 // WARNING PTR CHECK
2798 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pPropertyCount;
2799 memcpy((*streamPtrPtr), &cgen_var_1, 8);
2800 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
2801 *streamPtrPtr += 8;
2802 if (pPropertyCount) {
2803 memcpy(*streamPtrPtr, (uint32_t*)pPropertyCount, sizeof(uint32_t));
2804 *streamPtrPtr += sizeof(uint32_t);
2805 }
2806 // WARNING PTR CHECK
2807 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pProperties;
2808 memcpy((*streamPtrPtr), &cgen_var_2, 8);
2809 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
2810 *streamPtrPtr += 8;
2811 if (pProperties) {
2812 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
2813 reservedmarshal_VkSparseImageFormatProperties(
2814 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2815 (VkSparseImageFormatProperties*)(pProperties + i), streamPtrPtr);
2816 }
2817 }
2818 // WARNING PTR CHECK
2819 uint32_t* check_pPropertyCount;
2820 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
2821 if (pPropertyCount) {
2822 if (!(check_pPropertyCount)) {
2823 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
2824 }
2825 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
2826 }
2827 // WARNING PTR CHECK
2828 VkSparseImageFormatProperties* check_pProperties;
2829 check_pProperties = (VkSparseImageFormatProperties*)(uintptr_t)stream->getBe64();
2830 if (pProperties) {
2831 if (!(check_pProperties)) {
2832 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
2833 }
2834 if (pPropertyCount) {
2835 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
2836 unmarshal_VkSparseImageFormatProperties(
2837 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2838 (VkSparseImageFormatProperties*)(pProperties + i));
2839 }
2840 }
2841 }
2842 if (pPropertyCount) {
2843 if (pProperties) {
2844 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
2845 transform_fromhost_VkSparseImageFormatProperties(
2846 sResourceTracker, (VkSparseImageFormatProperties*)(pProperties + i));
2847 }
2848 }
2849 }
2850 ++encodeCount;
2851 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
2852 pool->freeAll();
2853 stream->clearPool();
2854 }
2855 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
2856 }
2857
vkQueueBindSparse(VkQueue queue,uint32_t bindInfoCount,const VkBindSparseInfo * pBindInfo,VkFence fence,uint32_t doLock)2858 VkResult VkEncoder::vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount,
2859 const VkBindSparseInfo* pBindInfo, VkFence fence,
2860 uint32_t doLock) {
2861 (void)doLock;
2862 bool queueSubmitWithCommandsEnabled =
2863 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
2864 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
2865 auto stream = mImpl->stream();
2866 auto pool = mImpl->pool();
2867 VkQueue local_queue;
2868 uint32_t local_bindInfoCount;
2869 VkBindSparseInfo* local_pBindInfo;
2870 VkFence local_fence;
2871 local_queue = queue;
2872 local_bindInfoCount = bindInfoCount;
2873 local_pBindInfo = nullptr;
2874 if (pBindInfo) {
2875 local_pBindInfo =
2876 (VkBindSparseInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindSparseInfo));
2877 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
2878 deepcopy_VkBindSparseInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfo + i,
2879 (VkBindSparseInfo*)(local_pBindInfo + i));
2880 }
2881 }
2882 local_fence = fence;
2883 if (local_pBindInfo) {
2884 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
2885 transform_tohost_VkBindSparseInfo(sResourceTracker,
2886 (VkBindSparseInfo*)(local_pBindInfo + i));
2887 }
2888 }
2889 size_t count = 0;
2890 size_t* countPtr = &count;
2891 {
2892 uint64_t cgen_var_0;
2893 *countPtr += 1 * 8;
2894 *countPtr += sizeof(uint32_t);
2895 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
2896 count_VkBindSparseInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
2897 (VkBindSparseInfo*)(local_pBindInfo + i), countPtr);
2898 }
2899 uint64_t cgen_var_1;
2900 *countPtr += 1 * 8;
2901 }
2902 uint32_t packetSize_vkQueueBindSparse =
2903 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
2904 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueBindSparse);
2905 uint8_t* packetBeginPtr = streamPtr;
2906 uint8_t** streamPtrPtr = &streamPtr;
2907 uint32_t opcode_vkQueueBindSparse = OP_vkQueueBindSparse;
2908 uint32_t seqno;
2909 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
2910 memcpy(streamPtr, &opcode_vkQueueBindSparse, sizeof(uint32_t));
2911 streamPtr += sizeof(uint32_t);
2912 memcpy(streamPtr, &packetSize_vkQueueBindSparse, sizeof(uint32_t));
2913 streamPtr += sizeof(uint32_t);
2914 if (queueSubmitWithCommandsEnabled) {
2915 memcpy(streamPtr, &seqno, sizeof(uint32_t));
2916 streamPtr += sizeof(uint32_t);
2917 }
2918 uint64_t cgen_var_0;
2919 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
2920 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
2921 *streamPtrPtr += 1 * 8;
2922 memcpy(*streamPtrPtr, (uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
2923 *streamPtrPtr += sizeof(uint32_t);
2924 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
2925 reservedmarshal_VkBindSparseInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
2926 (VkBindSparseInfo*)(local_pBindInfo + i), streamPtrPtr);
2927 }
2928 uint64_t cgen_var_1;
2929 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
2930 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
2931 *streamPtrPtr += 1 * 8;
2932 VkResult vkQueueBindSparse_VkResult_return = (VkResult)0;
2933 stream->read(&vkQueueBindSparse_VkResult_return, sizeof(VkResult));
2934 ++encodeCount;
2935 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
2936 pool->freeAll();
2937 stream->clearPool();
2938 }
2939 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
2940 return vkQueueBindSparse_VkResult_return;
2941 }
2942
vkCreateFence(VkDevice device,const VkFenceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkFence * pFence,uint32_t doLock)2943 VkResult VkEncoder::vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo,
2944 const VkAllocationCallbacks* pAllocator, VkFence* pFence,
2945 uint32_t doLock) {
2946 (void)doLock;
2947 bool queueSubmitWithCommandsEnabled =
2948 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
2949 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
2950 auto stream = mImpl->stream();
2951 auto pool = mImpl->pool();
2952 VkDevice local_device;
2953 VkFenceCreateInfo* local_pCreateInfo;
2954 VkAllocationCallbacks* local_pAllocator;
2955 local_device = device;
2956 local_pCreateInfo = nullptr;
2957 if (pCreateInfo) {
2958 local_pCreateInfo = (VkFenceCreateInfo*)pool->alloc(sizeof(const VkFenceCreateInfo));
2959 deepcopy_VkFenceCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
2960 (VkFenceCreateInfo*)(local_pCreateInfo));
2961 }
2962 local_pAllocator = nullptr;
2963 if (pAllocator) {
2964 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
2965 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
2966 (VkAllocationCallbacks*)(local_pAllocator));
2967 }
2968 local_pAllocator = nullptr;
2969 if (local_pCreateInfo) {
2970 transform_tohost_VkFenceCreateInfo(sResourceTracker,
2971 (VkFenceCreateInfo*)(local_pCreateInfo));
2972 }
2973 if (local_pAllocator) {
2974 transform_tohost_VkAllocationCallbacks(sResourceTracker,
2975 (VkAllocationCallbacks*)(local_pAllocator));
2976 }
2977 size_t count = 0;
2978 size_t* countPtr = &count;
2979 {
2980 uint64_t cgen_var_0;
2981 *countPtr += 1 * 8;
2982 count_VkFenceCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
2983 (VkFenceCreateInfo*)(local_pCreateInfo), countPtr);
2984 // WARNING PTR CHECK
2985 *countPtr += 8;
2986 if (local_pAllocator) {
2987 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
2988 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
2989 }
2990 uint64_t cgen_var_1;
2991 *countPtr += 8;
2992 }
2993 uint32_t packetSize_vkCreateFence = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
2994 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateFence);
2995 uint8_t* packetBeginPtr = streamPtr;
2996 uint8_t** streamPtrPtr = &streamPtr;
2997 uint32_t opcode_vkCreateFence = OP_vkCreateFence;
2998 uint32_t seqno;
2999 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3000 memcpy(streamPtr, &opcode_vkCreateFence, sizeof(uint32_t));
3001 streamPtr += sizeof(uint32_t);
3002 memcpy(streamPtr, &packetSize_vkCreateFence, sizeof(uint32_t));
3003 streamPtr += sizeof(uint32_t);
3004 if (queueSubmitWithCommandsEnabled) {
3005 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3006 streamPtr += sizeof(uint32_t);
3007 }
3008 uint64_t cgen_var_0;
3009 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3010 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3011 *streamPtrPtr += 1 * 8;
3012 reservedmarshal_VkFenceCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
3013 (VkFenceCreateInfo*)(local_pCreateInfo), streamPtrPtr);
3014 // WARNING PTR CHECK
3015 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
3016 memcpy((*streamPtrPtr), &cgen_var_1, 8);
3017 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
3018 *streamPtrPtr += 8;
3019 if (local_pAllocator) {
3020 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
3021 (VkAllocationCallbacks*)(local_pAllocator),
3022 streamPtrPtr);
3023 }
3024 /* is handle, possibly out */;
3025 uint64_t cgen_var_2;
3026 *&cgen_var_2 = (uint64_t)((*pFence));
3027 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
3028 *streamPtrPtr += 8;
3029 /* is handle, possibly out */;
3030 stream->setHandleMapping(sResourceTracker->createMapping());
3031 uint64_t cgen_var_3;
3032 stream->read((uint64_t*)&cgen_var_3, 8);
3033 stream->handleMapping()->mapHandles_u64_VkFence(&cgen_var_3, (VkFence*)pFence, 1);
3034 stream->unsetHandleMapping();
3035 VkResult vkCreateFence_VkResult_return = (VkResult)0;
3036 stream->read(&vkCreateFence_VkResult_return, sizeof(VkResult));
3037 ++encodeCount;
3038 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3039 pool->freeAll();
3040 stream->clearPool();
3041 }
3042 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3043 return vkCreateFence_VkResult_return;
3044 }
3045
vkDestroyFence(VkDevice device,VkFence fence,const VkAllocationCallbacks * pAllocator,uint32_t doLock)3046 void VkEncoder::vkDestroyFence(VkDevice device, VkFence fence,
3047 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
3048 (void)doLock;
3049 bool queueSubmitWithCommandsEnabled =
3050 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3051 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3052 auto stream = mImpl->stream();
3053 auto pool = mImpl->pool();
3054 VkDevice local_device;
3055 VkFence local_fence;
3056 VkAllocationCallbacks* local_pAllocator;
3057 local_device = device;
3058 local_fence = fence;
3059 local_pAllocator = nullptr;
3060 if (pAllocator) {
3061 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3062 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
3063 (VkAllocationCallbacks*)(local_pAllocator));
3064 }
3065 local_pAllocator = nullptr;
3066 if (local_pAllocator) {
3067 transform_tohost_VkAllocationCallbacks(sResourceTracker,
3068 (VkAllocationCallbacks*)(local_pAllocator));
3069 }
3070 size_t count = 0;
3071 size_t* countPtr = &count;
3072 {
3073 uint64_t cgen_var_0;
3074 *countPtr += 1 * 8;
3075 uint64_t cgen_var_1;
3076 *countPtr += 1 * 8;
3077 // WARNING PTR CHECK
3078 *countPtr += 8;
3079 if (local_pAllocator) {
3080 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
3081 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
3082 }
3083 }
3084 uint32_t packetSize_vkDestroyFence = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3085 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyFence);
3086 uint8_t* packetBeginPtr = streamPtr;
3087 uint8_t** streamPtrPtr = &streamPtr;
3088 uint32_t opcode_vkDestroyFence = OP_vkDestroyFence;
3089 uint32_t seqno;
3090 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3091 memcpy(streamPtr, &opcode_vkDestroyFence, sizeof(uint32_t));
3092 streamPtr += sizeof(uint32_t);
3093 memcpy(streamPtr, &packetSize_vkDestroyFence, sizeof(uint32_t));
3094 streamPtr += sizeof(uint32_t);
3095 if (queueSubmitWithCommandsEnabled) {
3096 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3097 streamPtr += sizeof(uint32_t);
3098 }
3099 uint64_t cgen_var_0;
3100 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3101 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3102 *streamPtrPtr += 1 * 8;
3103 uint64_t cgen_var_1;
3104 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
3105 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
3106 *streamPtrPtr += 1 * 8;
3107 // WARNING PTR CHECK
3108 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
3109 memcpy((*streamPtrPtr), &cgen_var_2, 8);
3110 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
3111 *streamPtrPtr += 8;
3112 if (local_pAllocator) {
3113 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
3114 (VkAllocationCallbacks*)(local_pAllocator),
3115 streamPtrPtr);
3116 }
3117 sResourceTracker->destroyMapping()->mapHandles_VkFence((VkFence*)&fence);
3118 stream->flush();
3119 ++encodeCount;
3120 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3121 pool->freeAll();
3122 stream->clearPool();
3123 }
3124 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3125 }
3126
vkResetFences(VkDevice device,uint32_t fenceCount,const VkFence * pFences,uint32_t doLock)3127 VkResult VkEncoder::vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences,
3128 uint32_t doLock) {
3129 (void)doLock;
3130 bool queueSubmitWithCommandsEnabled =
3131 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3132 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3133 auto stream = mImpl->stream();
3134 auto pool = mImpl->pool();
3135 VkDevice local_device;
3136 uint32_t local_fenceCount;
3137 VkFence* local_pFences;
3138 local_device = device;
3139 local_fenceCount = fenceCount;
3140 // Avoiding deepcopy for pFences
3141 local_pFences = (VkFence*)pFences;
3142 size_t count = 0;
3143 size_t* countPtr = &count;
3144 {
3145 uint64_t cgen_var_0;
3146 *countPtr += 1 * 8;
3147 *countPtr += sizeof(uint32_t);
3148 if (((fenceCount))) {
3149 *countPtr += ((fenceCount)) * 8;
3150 }
3151 }
3152 uint32_t packetSize_vkResetFences = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3153 uint8_t* streamPtr = stream->reserve(packetSize_vkResetFences);
3154 uint8_t* packetBeginPtr = streamPtr;
3155 uint8_t** streamPtrPtr = &streamPtr;
3156 uint32_t opcode_vkResetFences = OP_vkResetFences;
3157 uint32_t seqno;
3158 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3159 memcpy(streamPtr, &opcode_vkResetFences, sizeof(uint32_t));
3160 streamPtr += sizeof(uint32_t);
3161 memcpy(streamPtr, &packetSize_vkResetFences, sizeof(uint32_t));
3162 streamPtr += sizeof(uint32_t);
3163 if (queueSubmitWithCommandsEnabled) {
3164 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3165 streamPtr += sizeof(uint32_t);
3166 }
3167 uint64_t cgen_var_0;
3168 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3169 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3170 *streamPtrPtr += 1 * 8;
3171 memcpy(*streamPtrPtr, (uint32_t*)&local_fenceCount, sizeof(uint32_t));
3172 *streamPtrPtr += sizeof(uint32_t);
3173 if (((fenceCount))) {
3174 uint8_t* cgen_var_1_ptr = (uint8_t*)(*streamPtrPtr);
3175 for (uint32_t k = 0; k < ((fenceCount)); ++k) {
3176 uint64_t tmpval = get_host_u64_VkFence(local_pFences[k]);
3177 memcpy(cgen_var_1_ptr + k * 8, &tmpval, sizeof(uint64_t));
3178 }
3179 *streamPtrPtr += 8 * ((fenceCount));
3180 }
3181 VkResult vkResetFences_VkResult_return = (VkResult)0;
3182 stream->read(&vkResetFences_VkResult_return, sizeof(VkResult));
3183 ++encodeCount;
3184 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3185 pool->freeAll();
3186 stream->clearPool();
3187 }
3188 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3189 return vkResetFences_VkResult_return;
3190 }
3191
vkGetFenceStatus(VkDevice device,VkFence fence,uint32_t doLock)3192 VkResult VkEncoder::vkGetFenceStatus(VkDevice device, VkFence fence, uint32_t doLock) {
3193 (void)doLock;
3194 bool queueSubmitWithCommandsEnabled =
3195 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3196 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3197 auto stream = mImpl->stream();
3198 auto pool = mImpl->pool();
3199 VkDevice local_device;
3200 VkFence local_fence;
3201 local_device = device;
3202 local_fence = fence;
3203 size_t count = 0;
3204 size_t* countPtr = &count;
3205 {
3206 uint64_t cgen_var_0;
3207 *countPtr += 1 * 8;
3208 uint64_t cgen_var_1;
3209 *countPtr += 1 * 8;
3210 }
3211 uint32_t packetSize_vkGetFenceStatus = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3212 uint8_t* streamPtr = stream->reserve(packetSize_vkGetFenceStatus);
3213 uint8_t* packetBeginPtr = streamPtr;
3214 uint8_t** streamPtrPtr = &streamPtr;
3215 uint32_t opcode_vkGetFenceStatus = OP_vkGetFenceStatus;
3216 uint32_t seqno;
3217 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3218 memcpy(streamPtr, &opcode_vkGetFenceStatus, sizeof(uint32_t));
3219 streamPtr += sizeof(uint32_t);
3220 memcpy(streamPtr, &packetSize_vkGetFenceStatus, sizeof(uint32_t));
3221 streamPtr += sizeof(uint32_t);
3222 if (queueSubmitWithCommandsEnabled) {
3223 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3224 streamPtr += sizeof(uint32_t);
3225 }
3226 uint64_t cgen_var_0;
3227 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3228 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3229 *streamPtrPtr += 1 * 8;
3230 uint64_t cgen_var_1;
3231 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
3232 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
3233 *streamPtrPtr += 1 * 8;
3234 VkResult vkGetFenceStatus_VkResult_return = (VkResult)0;
3235 stream->read(&vkGetFenceStatus_VkResult_return, sizeof(VkResult));
3236 ++encodeCount;
3237 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3238 pool->freeAll();
3239 stream->clearPool();
3240 }
3241 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3242 return vkGetFenceStatus_VkResult_return;
3243 }
3244
vkWaitForFences(VkDevice device,uint32_t fenceCount,const VkFence * pFences,VkBool32 waitAll,uint64_t timeout,uint32_t doLock)3245 VkResult VkEncoder::vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences,
3246 VkBool32 waitAll, uint64_t timeout, uint32_t doLock) {
3247 (void)doLock;
3248 bool queueSubmitWithCommandsEnabled =
3249 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3250 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3251 auto stream = mImpl->stream();
3252 auto pool = mImpl->pool();
3253 VkDevice local_device;
3254 uint32_t local_fenceCount;
3255 VkFence* local_pFences;
3256 VkBool32 local_waitAll;
3257 uint64_t local_timeout;
3258 local_device = device;
3259 local_fenceCount = fenceCount;
3260 // Avoiding deepcopy for pFences
3261 local_pFences = (VkFence*)pFences;
3262 local_waitAll = waitAll;
3263 local_timeout = timeout;
3264 size_t count = 0;
3265 size_t* countPtr = &count;
3266 {
3267 uint64_t cgen_var_0;
3268 *countPtr += 1 * 8;
3269 *countPtr += sizeof(uint32_t);
3270 if (((fenceCount))) {
3271 *countPtr += ((fenceCount)) * 8;
3272 }
3273 *countPtr += sizeof(VkBool32);
3274 *countPtr += sizeof(uint64_t);
3275 }
3276 uint32_t packetSize_vkWaitForFences = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3277 uint8_t* streamPtr = stream->reserve(packetSize_vkWaitForFences);
3278 uint8_t* packetBeginPtr = streamPtr;
3279 uint8_t** streamPtrPtr = &streamPtr;
3280 uint32_t opcode_vkWaitForFences = OP_vkWaitForFences;
3281 uint32_t seqno;
3282 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3283 memcpy(streamPtr, &opcode_vkWaitForFences, sizeof(uint32_t));
3284 streamPtr += sizeof(uint32_t);
3285 memcpy(streamPtr, &packetSize_vkWaitForFences, sizeof(uint32_t));
3286 streamPtr += sizeof(uint32_t);
3287 if (queueSubmitWithCommandsEnabled) {
3288 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3289 streamPtr += sizeof(uint32_t);
3290 }
3291 uint64_t cgen_var_0;
3292 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3293 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3294 *streamPtrPtr += 1 * 8;
3295 memcpy(*streamPtrPtr, (uint32_t*)&local_fenceCount, sizeof(uint32_t));
3296 *streamPtrPtr += sizeof(uint32_t);
3297 if (((fenceCount))) {
3298 uint8_t* cgen_var_1_ptr = (uint8_t*)(*streamPtrPtr);
3299 for (uint32_t k = 0; k < ((fenceCount)); ++k) {
3300 uint64_t tmpval = get_host_u64_VkFence(local_pFences[k]);
3301 memcpy(cgen_var_1_ptr + k * 8, &tmpval, sizeof(uint64_t));
3302 }
3303 *streamPtrPtr += 8 * ((fenceCount));
3304 }
3305 memcpy(*streamPtrPtr, (VkBool32*)&local_waitAll, sizeof(VkBool32));
3306 *streamPtrPtr += sizeof(VkBool32);
3307 memcpy(*streamPtrPtr, (uint64_t*)&local_timeout, sizeof(uint64_t));
3308 *streamPtrPtr += sizeof(uint64_t);
3309 VkResult vkWaitForFences_VkResult_return = (VkResult)0;
3310 stream->read(&vkWaitForFences_VkResult_return, sizeof(VkResult));
3311 ++encodeCount;
3312 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3313 pool->freeAll();
3314 stream->clearPool();
3315 }
3316 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3317 return vkWaitForFences_VkResult_return;
3318 }
3319
vkCreateSemaphore(VkDevice device,const VkSemaphoreCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSemaphore * pSemaphore,uint32_t doLock)3320 VkResult VkEncoder::vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo,
3321 const VkAllocationCallbacks* pAllocator,
3322 VkSemaphore* pSemaphore, uint32_t doLock) {
3323 (void)doLock;
3324 bool queueSubmitWithCommandsEnabled =
3325 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3326 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3327 auto stream = mImpl->stream();
3328 auto pool = mImpl->pool();
3329 VkDevice local_device;
3330 VkSemaphoreCreateInfo* local_pCreateInfo;
3331 VkAllocationCallbacks* local_pAllocator;
3332 local_device = device;
3333 local_pCreateInfo = nullptr;
3334 if (pCreateInfo) {
3335 local_pCreateInfo =
3336 (VkSemaphoreCreateInfo*)pool->alloc(sizeof(const VkSemaphoreCreateInfo));
3337 deepcopy_VkSemaphoreCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
3338 (VkSemaphoreCreateInfo*)(local_pCreateInfo));
3339 }
3340 local_pAllocator = nullptr;
3341 if (pAllocator) {
3342 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3343 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
3344 (VkAllocationCallbacks*)(local_pAllocator));
3345 }
3346 local_pAllocator = nullptr;
3347 if (local_pCreateInfo) {
3348 transform_tohost_VkSemaphoreCreateInfo(sResourceTracker,
3349 (VkSemaphoreCreateInfo*)(local_pCreateInfo));
3350 }
3351 if (local_pAllocator) {
3352 transform_tohost_VkAllocationCallbacks(sResourceTracker,
3353 (VkAllocationCallbacks*)(local_pAllocator));
3354 }
3355 size_t count = 0;
3356 size_t* countPtr = &count;
3357 {
3358 uint64_t cgen_var_0;
3359 *countPtr += 1 * 8;
3360 count_VkSemaphoreCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
3361 (VkSemaphoreCreateInfo*)(local_pCreateInfo), countPtr);
3362 // WARNING PTR CHECK
3363 *countPtr += 8;
3364 if (local_pAllocator) {
3365 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
3366 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
3367 }
3368 uint64_t cgen_var_1;
3369 *countPtr += 8;
3370 }
3371 uint32_t packetSize_vkCreateSemaphore =
3372 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3373 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateSemaphore);
3374 uint8_t* packetBeginPtr = streamPtr;
3375 uint8_t** streamPtrPtr = &streamPtr;
3376 uint32_t opcode_vkCreateSemaphore = OP_vkCreateSemaphore;
3377 uint32_t seqno;
3378 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3379 memcpy(streamPtr, &opcode_vkCreateSemaphore, sizeof(uint32_t));
3380 streamPtr += sizeof(uint32_t);
3381 memcpy(streamPtr, &packetSize_vkCreateSemaphore, sizeof(uint32_t));
3382 streamPtr += sizeof(uint32_t);
3383 if (queueSubmitWithCommandsEnabled) {
3384 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3385 streamPtr += sizeof(uint32_t);
3386 }
3387 uint64_t cgen_var_0;
3388 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3389 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3390 *streamPtrPtr += 1 * 8;
3391 reservedmarshal_VkSemaphoreCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
3392 (VkSemaphoreCreateInfo*)(local_pCreateInfo),
3393 streamPtrPtr);
3394 // WARNING PTR CHECK
3395 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
3396 memcpy((*streamPtrPtr), &cgen_var_1, 8);
3397 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
3398 *streamPtrPtr += 8;
3399 if (local_pAllocator) {
3400 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
3401 (VkAllocationCallbacks*)(local_pAllocator),
3402 streamPtrPtr);
3403 }
3404 /* is handle, possibly out */;
3405 uint64_t cgen_var_2;
3406 *&cgen_var_2 = (uint64_t)((*pSemaphore));
3407 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
3408 *streamPtrPtr += 8;
3409 /* is handle, possibly out */;
3410 stream->setHandleMapping(sResourceTracker->createMapping());
3411 uint64_t cgen_var_3;
3412 stream->read((uint64_t*)&cgen_var_3, 8);
3413 stream->handleMapping()->mapHandles_u64_VkSemaphore(&cgen_var_3, (VkSemaphore*)pSemaphore, 1);
3414 stream->unsetHandleMapping();
3415 VkResult vkCreateSemaphore_VkResult_return = (VkResult)0;
3416 stream->read(&vkCreateSemaphore_VkResult_return, sizeof(VkResult));
3417 ++encodeCount;
3418 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3419 pool->freeAll();
3420 stream->clearPool();
3421 }
3422 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3423 return vkCreateSemaphore_VkResult_return;
3424 }
3425
vkDestroySemaphore(VkDevice device,VkSemaphore semaphore,const VkAllocationCallbacks * pAllocator,uint32_t doLock)3426 void VkEncoder::vkDestroySemaphore(VkDevice device, VkSemaphore semaphore,
3427 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
3428 (void)doLock;
3429 bool queueSubmitWithCommandsEnabled =
3430 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3431 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3432 auto stream = mImpl->stream();
3433 auto pool = mImpl->pool();
3434 VkDevice local_device;
3435 VkSemaphore local_semaphore;
3436 VkAllocationCallbacks* local_pAllocator;
3437 local_device = device;
3438 local_semaphore = semaphore;
3439 local_pAllocator = nullptr;
3440 if (pAllocator) {
3441 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3442 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
3443 (VkAllocationCallbacks*)(local_pAllocator));
3444 }
3445 local_pAllocator = nullptr;
3446 if (local_pAllocator) {
3447 transform_tohost_VkAllocationCallbacks(sResourceTracker,
3448 (VkAllocationCallbacks*)(local_pAllocator));
3449 }
3450 size_t count = 0;
3451 size_t* countPtr = &count;
3452 {
3453 uint64_t cgen_var_0;
3454 *countPtr += 1 * 8;
3455 uint64_t cgen_var_1;
3456 *countPtr += 1 * 8;
3457 // WARNING PTR CHECK
3458 *countPtr += 8;
3459 if (local_pAllocator) {
3460 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
3461 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
3462 }
3463 }
3464 uint32_t packetSize_vkDestroySemaphore =
3465 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3466 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroySemaphore);
3467 uint8_t* packetBeginPtr = streamPtr;
3468 uint8_t** streamPtrPtr = &streamPtr;
3469 uint32_t opcode_vkDestroySemaphore = OP_vkDestroySemaphore;
3470 uint32_t seqno;
3471 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3472 memcpy(streamPtr, &opcode_vkDestroySemaphore, sizeof(uint32_t));
3473 streamPtr += sizeof(uint32_t);
3474 memcpy(streamPtr, &packetSize_vkDestroySemaphore, sizeof(uint32_t));
3475 streamPtr += sizeof(uint32_t);
3476 if (queueSubmitWithCommandsEnabled) {
3477 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3478 streamPtr += sizeof(uint32_t);
3479 }
3480 uint64_t cgen_var_0;
3481 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3482 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3483 *streamPtrPtr += 1 * 8;
3484 uint64_t cgen_var_1;
3485 *&cgen_var_1 = get_host_u64_VkSemaphore((*&local_semaphore));
3486 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
3487 *streamPtrPtr += 1 * 8;
3488 // WARNING PTR CHECK
3489 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
3490 memcpy((*streamPtrPtr), &cgen_var_2, 8);
3491 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
3492 *streamPtrPtr += 8;
3493 if (local_pAllocator) {
3494 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
3495 (VkAllocationCallbacks*)(local_pAllocator),
3496 streamPtrPtr);
3497 }
3498 sResourceTracker->destroyMapping()->mapHandles_VkSemaphore((VkSemaphore*)&semaphore);
3499 stream->flush();
3500 ++encodeCount;
3501 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3502 pool->freeAll();
3503 stream->clearPool();
3504 }
3505 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3506 }
3507
vkCreateEvent(VkDevice device,const VkEventCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkEvent * pEvent,uint32_t doLock)3508 VkResult VkEncoder::vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo,
3509 const VkAllocationCallbacks* pAllocator, VkEvent* pEvent,
3510 uint32_t doLock) {
3511 (void)doLock;
3512 bool queueSubmitWithCommandsEnabled =
3513 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3514 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3515 auto stream = mImpl->stream();
3516 auto pool = mImpl->pool();
3517 VkDevice local_device;
3518 VkEventCreateInfo* local_pCreateInfo;
3519 VkAllocationCallbacks* local_pAllocator;
3520 local_device = device;
3521 local_pCreateInfo = nullptr;
3522 if (pCreateInfo) {
3523 local_pCreateInfo = (VkEventCreateInfo*)pool->alloc(sizeof(const VkEventCreateInfo));
3524 deepcopy_VkEventCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
3525 (VkEventCreateInfo*)(local_pCreateInfo));
3526 }
3527 local_pAllocator = nullptr;
3528 if (pAllocator) {
3529 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3530 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
3531 (VkAllocationCallbacks*)(local_pAllocator));
3532 }
3533 local_pAllocator = nullptr;
3534 if (local_pCreateInfo) {
3535 transform_tohost_VkEventCreateInfo(sResourceTracker,
3536 (VkEventCreateInfo*)(local_pCreateInfo));
3537 }
3538 if (local_pAllocator) {
3539 transform_tohost_VkAllocationCallbacks(sResourceTracker,
3540 (VkAllocationCallbacks*)(local_pAllocator));
3541 }
3542 size_t count = 0;
3543 size_t* countPtr = &count;
3544 {
3545 uint64_t cgen_var_0;
3546 *countPtr += 1 * 8;
3547 count_VkEventCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
3548 (VkEventCreateInfo*)(local_pCreateInfo), countPtr);
3549 // WARNING PTR CHECK
3550 *countPtr += 8;
3551 if (local_pAllocator) {
3552 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
3553 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
3554 }
3555 uint64_t cgen_var_1;
3556 *countPtr += 8;
3557 }
3558 uint32_t packetSize_vkCreateEvent = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3559 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateEvent);
3560 uint8_t* packetBeginPtr = streamPtr;
3561 uint8_t** streamPtrPtr = &streamPtr;
3562 uint32_t opcode_vkCreateEvent = OP_vkCreateEvent;
3563 uint32_t seqno;
3564 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3565 memcpy(streamPtr, &opcode_vkCreateEvent, sizeof(uint32_t));
3566 streamPtr += sizeof(uint32_t);
3567 memcpy(streamPtr, &packetSize_vkCreateEvent, sizeof(uint32_t));
3568 streamPtr += sizeof(uint32_t);
3569 if (queueSubmitWithCommandsEnabled) {
3570 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3571 streamPtr += sizeof(uint32_t);
3572 }
3573 uint64_t cgen_var_0;
3574 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3575 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3576 *streamPtrPtr += 1 * 8;
3577 reservedmarshal_VkEventCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
3578 (VkEventCreateInfo*)(local_pCreateInfo), streamPtrPtr);
3579 // WARNING PTR CHECK
3580 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
3581 memcpy((*streamPtrPtr), &cgen_var_1, 8);
3582 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
3583 *streamPtrPtr += 8;
3584 if (local_pAllocator) {
3585 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
3586 (VkAllocationCallbacks*)(local_pAllocator),
3587 streamPtrPtr);
3588 }
3589 /* is handle, possibly out */;
3590 uint64_t cgen_var_2;
3591 *&cgen_var_2 = (uint64_t)((*pEvent));
3592 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
3593 *streamPtrPtr += 8;
3594 /* is handle, possibly out */;
3595 stream->setHandleMapping(sResourceTracker->createMapping());
3596 uint64_t cgen_var_3;
3597 stream->read((uint64_t*)&cgen_var_3, 8);
3598 stream->handleMapping()->mapHandles_u64_VkEvent(&cgen_var_3, (VkEvent*)pEvent, 1);
3599 stream->unsetHandleMapping();
3600 VkResult vkCreateEvent_VkResult_return = (VkResult)0;
3601 stream->read(&vkCreateEvent_VkResult_return, sizeof(VkResult));
3602 ++encodeCount;
3603 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3604 pool->freeAll();
3605 stream->clearPool();
3606 }
3607 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3608 return vkCreateEvent_VkResult_return;
3609 }
3610
vkDestroyEvent(VkDevice device,VkEvent event,const VkAllocationCallbacks * pAllocator,uint32_t doLock)3611 void VkEncoder::vkDestroyEvent(VkDevice device, VkEvent event,
3612 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
3613 (void)doLock;
3614 bool queueSubmitWithCommandsEnabled =
3615 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3616 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3617 auto stream = mImpl->stream();
3618 auto pool = mImpl->pool();
3619 VkDevice local_device;
3620 VkEvent local_event;
3621 VkAllocationCallbacks* local_pAllocator;
3622 local_device = device;
3623 local_event = event;
3624 local_pAllocator = nullptr;
3625 if (pAllocator) {
3626 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3627 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
3628 (VkAllocationCallbacks*)(local_pAllocator));
3629 }
3630 local_pAllocator = nullptr;
3631 if (local_pAllocator) {
3632 transform_tohost_VkAllocationCallbacks(sResourceTracker,
3633 (VkAllocationCallbacks*)(local_pAllocator));
3634 }
3635 size_t count = 0;
3636 size_t* countPtr = &count;
3637 {
3638 uint64_t cgen_var_0;
3639 *countPtr += 1 * 8;
3640 uint64_t cgen_var_1;
3641 *countPtr += 1 * 8;
3642 // WARNING PTR CHECK
3643 *countPtr += 8;
3644 if (local_pAllocator) {
3645 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
3646 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
3647 }
3648 }
3649 uint32_t packetSize_vkDestroyEvent = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3650 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyEvent);
3651 uint8_t* packetBeginPtr = streamPtr;
3652 uint8_t** streamPtrPtr = &streamPtr;
3653 uint32_t opcode_vkDestroyEvent = OP_vkDestroyEvent;
3654 uint32_t seqno;
3655 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3656 memcpy(streamPtr, &opcode_vkDestroyEvent, sizeof(uint32_t));
3657 streamPtr += sizeof(uint32_t);
3658 memcpy(streamPtr, &packetSize_vkDestroyEvent, sizeof(uint32_t));
3659 streamPtr += sizeof(uint32_t);
3660 if (queueSubmitWithCommandsEnabled) {
3661 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3662 streamPtr += sizeof(uint32_t);
3663 }
3664 uint64_t cgen_var_0;
3665 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3666 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3667 *streamPtrPtr += 1 * 8;
3668 uint64_t cgen_var_1;
3669 *&cgen_var_1 = get_host_u64_VkEvent((*&local_event));
3670 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
3671 *streamPtrPtr += 1 * 8;
3672 // WARNING PTR CHECK
3673 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
3674 memcpy((*streamPtrPtr), &cgen_var_2, 8);
3675 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
3676 *streamPtrPtr += 8;
3677 if (local_pAllocator) {
3678 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
3679 (VkAllocationCallbacks*)(local_pAllocator),
3680 streamPtrPtr);
3681 }
3682 sResourceTracker->destroyMapping()->mapHandles_VkEvent((VkEvent*)&event);
3683 stream->flush();
3684 ++encodeCount;
3685 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3686 pool->freeAll();
3687 stream->clearPool();
3688 }
3689 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3690 }
3691
vkGetEventStatus(VkDevice device,VkEvent event,uint32_t doLock)3692 VkResult VkEncoder::vkGetEventStatus(VkDevice device, VkEvent event, uint32_t doLock) {
3693 (void)doLock;
3694 bool queueSubmitWithCommandsEnabled =
3695 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3696 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3697 auto stream = mImpl->stream();
3698 auto pool = mImpl->pool();
3699 VkDevice local_device;
3700 VkEvent local_event;
3701 local_device = device;
3702 local_event = event;
3703 size_t count = 0;
3704 size_t* countPtr = &count;
3705 {
3706 uint64_t cgen_var_0;
3707 *countPtr += 1 * 8;
3708 uint64_t cgen_var_1;
3709 *countPtr += 1 * 8;
3710 }
3711 uint32_t packetSize_vkGetEventStatus = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3712 uint8_t* streamPtr = stream->reserve(packetSize_vkGetEventStatus);
3713 uint8_t* packetBeginPtr = streamPtr;
3714 uint8_t** streamPtrPtr = &streamPtr;
3715 uint32_t opcode_vkGetEventStatus = OP_vkGetEventStatus;
3716 uint32_t seqno;
3717 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3718 memcpy(streamPtr, &opcode_vkGetEventStatus, sizeof(uint32_t));
3719 streamPtr += sizeof(uint32_t);
3720 memcpy(streamPtr, &packetSize_vkGetEventStatus, sizeof(uint32_t));
3721 streamPtr += sizeof(uint32_t);
3722 if (queueSubmitWithCommandsEnabled) {
3723 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3724 streamPtr += sizeof(uint32_t);
3725 }
3726 uint64_t cgen_var_0;
3727 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3728 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3729 *streamPtrPtr += 1 * 8;
3730 uint64_t cgen_var_1;
3731 *&cgen_var_1 = get_host_u64_VkEvent((*&local_event));
3732 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
3733 *streamPtrPtr += 1 * 8;
3734 VkResult vkGetEventStatus_VkResult_return = (VkResult)0;
3735 stream->read(&vkGetEventStatus_VkResult_return, sizeof(VkResult));
3736 ++encodeCount;
3737 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3738 pool->freeAll();
3739 stream->clearPool();
3740 }
3741 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3742 return vkGetEventStatus_VkResult_return;
3743 }
3744
vkSetEvent(VkDevice device,VkEvent event,uint32_t doLock)3745 VkResult VkEncoder::vkSetEvent(VkDevice device, VkEvent event, uint32_t doLock) {
3746 (void)doLock;
3747 bool queueSubmitWithCommandsEnabled =
3748 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3749 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3750 auto stream = mImpl->stream();
3751 auto pool = mImpl->pool();
3752 VkDevice local_device;
3753 VkEvent local_event;
3754 local_device = device;
3755 local_event = event;
3756 size_t count = 0;
3757 size_t* countPtr = &count;
3758 {
3759 uint64_t cgen_var_0;
3760 *countPtr += 1 * 8;
3761 uint64_t cgen_var_1;
3762 *countPtr += 1 * 8;
3763 }
3764 uint32_t packetSize_vkSetEvent = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3765 uint8_t* streamPtr = stream->reserve(packetSize_vkSetEvent);
3766 uint8_t* packetBeginPtr = streamPtr;
3767 uint8_t** streamPtrPtr = &streamPtr;
3768 uint32_t opcode_vkSetEvent = OP_vkSetEvent;
3769 uint32_t seqno;
3770 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3771 memcpy(streamPtr, &opcode_vkSetEvent, sizeof(uint32_t));
3772 streamPtr += sizeof(uint32_t);
3773 memcpy(streamPtr, &packetSize_vkSetEvent, sizeof(uint32_t));
3774 streamPtr += sizeof(uint32_t);
3775 if (queueSubmitWithCommandsEnabled) {
3776 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3777 streamPtr += sizeof(uint32_t);
3778 }
3779 uint64_t cgen_var_0;
3780 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3781 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3782 *streamPtrPtr += 1 * 8;
3783 uint64_t cgen_var_1;
3784 *&cgen_var_1 = get_host_u64_VkEvent((*&local_event));
3785 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
3786 *streamPtrPtr += 1 * 8;
3787 VkResult vkSetEvent_VkResult_return = (VkResult)0;
3788 stream->read(&vkSetEvent_VkResult_return, sizeof(VkResult));
3789 ++encodeCount;
3790 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3791 pool->freeAll();
3792 stream->clearPool();
3793 }
3794 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3795 return vkSetEvent_VkResult_return;
3796 }
3797
vkResetEvent(VkDevice device,VkEvent event,uint32_t doLock)3798 VkResult VkEncoder::vkResetEvent(VkDevice device, VkEvent event, uint32_t doLock) {
3799 (void)doLock;
3800 bool queueSubmitWithCommandsEnabled =
3801 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3802 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3803 auto stream = mImpl->stream();
3804 auto pool = mImpl->pool();
3805 VkDevice local_device;
3806 VkEvent local_event;
3807 local_device = device;
3808 local_event = event;
3809 size_t count = 0;
3810 size_t* countPtr = &count;
3811 {
3812 uint64_t cgen_var_0;
3813 *countPtr += 1 * 8;
3814 uint64_t cgen_var_1;
3815 *countPtr += 1 * 8;
3816 }
3817 uint32_t packetSize_vkResetEvent = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3818 uint8_t* streamPtr = stream->reserve(packetSize_vkResetEvent);
3819 uint8_t* packetBeginPtr = streamPtr;
3820 uint8_t** streamPtrPtr = &streamPtr;
3821 uint32_t opcode_vkResetEvent = OP_vkResetEvent;
3822 uint32_t seqno;
3823 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3824 memcpy(streamPtr, &opcode_vkResetEvent, sizeof(uint32_t));
3825 streamPtr += sizeof(uint32_t);
3826 memcpy(streamPtr, &packetSize_vkResetEvent, sizeof(uint32_t));
3827 streamPtr += sizeof(uint32_t);
3828 if (queueSubmitWithCommandsEnabled) {
3829 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3830 streamPtr += sizeof(uint32_t);
3831 }
3832 uint64_t cgen_var_0;
3833 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3834 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3835 *streamPtrPtr += 1 * 8;
3836 uint64_t cgen_var_1;
3837 *&cgen_var_1 = get_host_u64_VkEvent((*&local_event));
3838 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
3839 *streamPtrPtr += 1 * 8;
3840 VkResult vkResetEvent_VkResult_return = (VkResult)0;
3841 stream->read(&vkResetEvent_VkResult_return, sizeof(VkResult));
3842 ++encodeCount;
3843 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3844 pool->freeAll();
3845 stream->clearPool();
3846 }
3847 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3848 return vkResetEvent_VkResult_return;
3849 }
3850
vkCreateQueryPool(VkDevice device,const VkQueryPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkQueryPool * pQueryPool,uint32_t doLock)3851 VkResult VkEncoder::vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo,
3852 const VkAllocationCallbacks* pAllocator,
3853 VkQueryPool* pQueryPool, uint32_t doLock) {
3854 (void)doLock;
3855 bool queueSubmitWithCommandsEnabled =
3856 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3857 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3858 auto stream = mImpl->stream();
3859 auto pool = mImpl->pool();
3860 VkDevice local_device;
3861 VkQueryPoolCreateInfo* local_pCreateInfo;
3862 VkAllocationCallbacks* local_pAllocator;
3863 local_device = device;
3864 local_pCreateInfo = nullptr;
3865 if (pCreateInfo) {
3866 local_pCreateInfo =
3867 (VkQueryPoolCreateInfo*)pool->alloc(sizeof(const VkQueryPoolCreateInfo));
3868 deepcopy_VkQueryPoolCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
3869 (VkQueryPoolCreateInfo*)(local_pCreateInfo));
3870 }
3871 local_pAllocator = nullptr;
3872 if (pAllocator) {
3873 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3874 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
3875 (VkAllocationCallbacks*)(local_pAllocator));
3876 }
3877 local_pAllocator = nullptr;
3878 if (local_pCreateInfo) {
3879 transform_tohost_VkQueryPoolCreateInfo(sResourceTracker,
3880 (VkQueryPoolCreateInfo*)(local_pCreateInfo));
3881 }
3882 if (local_pAllocator) {
3883 transform_tohost_VkAllocationCallbacks(sResourceTracker,
3884 (VkAllocationCallbacks*)(local_pAllocator));
3885 }
3886 size_t count = 0;
3887 size_t* countPtr = &count;
3888 {
3889 uint64_t cgen_var_0;
3890 *countPtr += 1 * 8;
3891 count_VkQueryPoolCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
3892 (VkQueryPoolCreateInfo*)(local_pCreateInfo), countPtr);
3893 // WARNING PTR CHECK
3894 *countPtr += 8;
3895 if (local_pAllocator) {
3896 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
3897 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
3898 }
3899 uint64_t cgen_var_1;
3900 *countPtr += 8;
3901 }
3902 uint32_t packetSize_vkCreateQueryPool =
3903 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3904 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateQueryPool);
3905 uint8_t* packetBeginPtr = streamPtr;
3906 uint8_t** streamPtrPtr = &streamPtr;
3907 uint32_t opcode_vkCreateQueryPool = OP_vkCreateQueryPool;
3908 uint32_t seqno;
3909 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
3910 memcpy(streamPtr, &opcode_vkCreateQueryPool, sizeof(uint32_t));
3911 streamPtr += sizeof(uint32_t);
3912 memcpy(streamPtr, &packetSize_vkCreateQueryPool, sizeof(uint32_t));
3913 streamPtr += sizeof(uint32_t);
3914 if (queueSubmitWithCommandsEnabled) {
3915 memcpy(streamPtr, &seqno, sizeof(uint32_t));
3916 streamPtr += sizeof(uint32_t);
3917 }
3918 uint64_t cgen_var_0;
3919 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
3920 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
3921 *streamPtrPtr += 1 * 8;
3922 reservedmarshal_VkQueryPoolCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
3923 (VkQueryPoolCreateInfo*)(local_pCreateInfo),
3924 streamPtrPtr);
3925 // WARNING PTR CHECK
3926 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
3927 memcpy((*streamPtrPtr), &cgen_var_1, 8);
3928 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
3929 *streamPtrPtr += 8;
3930 if (local_pAllocator) {
3931 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
3932 (VkAllocationCallbacks*)(local_pAllocator),
3933 streamPtrPtr);
3934 }
3935 /* is handle, possibly out */;
3936 uint64_t cgen_var_2;
3937 *&cgen_var_2 = (uint64_t)((*pQueryPool));
3938 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
3939 *streamPtrPtr += 8;
3940 /* is handle, possibly out */;
3941 stream->setHandleMapping(sResourceTracker->createMapping());
3942 uint64_t cgen_var_3;
3943 stream->read((uint64_t*)&cgen_var_3, 8);
3944 stream->handleMapping()->mapHandles_u64_VkQueryPool(&cgen_var_3, (VkQueryPool*)pQueryPool, 1);
3945 stream->unsetHandleMapping();
3946 VkResult vkCreateQueryPool_VkResult_return = (VkResult)0;
3947 stream->read(&vkCreateQueryPool_VkResult_return, sizeof(VkResult));
3948 ++encodeCount;
3949 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
3950 pool->freeAll();
3951 stream->clearPool();
3952 }
3953 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
3954 return vkCreateQueryPool_VkResult_return;
3955 }
3956
vkDestroyQueryPool(VkDevice device,VkQueryPool queryPool,const VkAllocationCallbacks * pAllocator,uint32_t doLock)3957 void VkEncoder::vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool,
3958 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
3959 (void)doLock;
3960 bool queueSubmitWithCommandsEnabled =
3961 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
3962 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
3963 auto stream = mImpl->stream();
3964 auto pool = mImpl->pool();
3965 VkDevice local_device;
3966 VkQueryPool local_queryPool;
3967 VkAllocationCallbacks* local_pAllocator;
3968 local_device = device;
3969 local_queryPool = queryPool;
3970 local_pAllocator = nullptr;
3971 if (pAllocator) {
3972 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3973 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
3974 (VkAllocationCallbacks*)(local_pAllocator));
3975 }
3976 local_pAllocator = nullptr;
3977 if (local_pAllocator) {
3978 transform_tohost_VkAllocationCallbacks(sResourceTracker,
3979 (VkAllocationCallbacks*)(local_pAllocator));
3980 }
3981 size_t count = 0;
3982 size_t* countPtr = &count;
3983 {
3984 uint64_t cgen_var_0;
3985 *countPtr += 1 * 8;
3986 uint64_t cgen_var_1;
3987 *countPtr += 1 * 8;
3988 // WARNING PTR CHECK
3989 *countPtr += 8;
3990 if (local_pAllocator) {
3991 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
3992 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
3993 }
3994 }
3995 uint32_t packetSize_vkDestroyQueryPool =
3996 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
3997 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyQueryPool);
3998 uint8_t* packetBeginPtr = streamPtr;
3999 uint8_t** streamPtrPtr = &streamPtr;
4000 uint32_t opcode_vkDestroyQueryPool = OP_vkDestroyQueryPool;
4001 uint32_t seqno;
4002 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
4003 memcpy(streamPtr, &opcode_vkDestroyQueryPool, sizeof(uint32_t));
4004 streamPtr += sizeof(uint32_t);
4005 memcpy(streamPtr, &packetSize_vkDestroyQueryPool, sizeof(uint32_t));
4006 streamPtr += sizeof(uint32_t);
4007 if (queueSubmitWithCommandsEnabled) {
4008 memcpy(streamPtr, &seqno, sizeof(uint32_t));
4009 streamPtr += sizeof(uint32_t);
4010 }
4011 uint64_t cgen_var_0;
4012 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
4013 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
4014 *streamPtrPtr += 1 * 8;
4015 uint64_t cgen_var_1;
4016 *&cgen_var_1 = get_host_u64_VkQueryPool((*&local_queryPool));
4017 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
4018 *streamPtrPtr += 1 * 8;
4019 // WARNING PTR CHECK
4020 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
4021 memcpy((*streamPtrPtr), &cgen_var_2, 8);
4022 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
4023 *streamPtrPtr += 8;
4024 if (local_pAllocator) {
4025 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4026 (VkAllocationCallbacks*)(local_pAllocator),
4027 streamPtrPtr);
4028 }
4029 sResourceTracker->destroyMapping()->mapHandles_VkQueryPool((VkQueryPool*)&queryPool);
4030 stream->flush();
4031 ++encodeCount;
4032 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
4033 pool->freeAll();
4034 stream->clearPool();
4035 }
4036 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
4037 }
4038
vkGetQueryPoolResults(VkDevice device,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,size_t dataSize,void * pData,VkDeviceSize stride,VkQueryResultFlags flags,uint32_t doLock)4039 VkResult VkEncoder::vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool,
4040 uint32_t firstQuery, uint32_t queryCount, size_t dataSize,
4041 void* pData, VkDeviceSize stride,
4042 VkQueryResultFlags flags, uint32_t doLock) {
4043 (void)doLock;
4044 bool queueSubmitWithCommandsEnabled =
4045 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
4046 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
4047 auto stream = mImpl->stream();
4048 auto pool = mImpl->pool();
4049 VkDevice local_device;
4050 VkQueryPool local_queryPool;
4051 uint32_t local_firstQuery;
4052 uint32_t local_queryCount;
4053 size_t local_dataSize;
4054 VkDeviceSize local_stride;
4055 VkQueryResultFlags local_flags;
4056 local_device = device;
4057 local_queryPool = queryPool;
4058 local_firstQuery = firstQuery;
4059 local_queryCount = queryCount;
4060 local_dataSize = dataSize;
4061 local_stride = stride;
4062 local_flags = flags;
4063 size_t count = 0;
4064 size_t* countPtr = &count;
4065 {
4066 uint64_t cgen_var_0;
4067 *countPtr += 1 * 8;
4068 uint64_t cgen_var_1;
4069 *countPtr += 1 * 8;
4070 *countPtr += sizeof(uint32_t);
4071 *countPtr += sizeof(uint32_t);
4072 *countPtr += 8;
4073 *countPtr += ((dataSize)) * sizeof(uint8_t);
4074 *countPtr += sizeof(VkDeviceSize);
4075 *countPtr += sizeof(VkQueryResultFlags);
4076 }
4077 uint32_t packetSize_vkGetQueryPoolResults =
4078 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
4079 uint8_t* streamPtr = stream->reserve(packetSize_vkGetQueryPoolResults);
4080 uint8_t* packetBeginPtr = streamPtr;
4081 uint8_t** streamPtrPtr = &streamPtr;
4082 uint32_t opcode_vkGetQueryPoolResults = OP_vkGetQueryPoolResults;
4083 uint32_t seqno;
4084 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
4085 memcpy(streamPtr, &opcode_vkGetQueryPoolResults, sizeof(uint32_t));
4086 streamPtr += sizeof(uint32_t);
4087 memcpy(streamPtr, &packetSize_vkGetQueryPoolResults, sizeof(uint32_t));
4088 streamPtr += sizeof(uint32_t);
4089 if (queueSubmitWithCommandsEnabled) {
4090 memcpy(streamPtr, &seqno, sizeof(uint32_t));
4091 streamPtr += sizeof(uint32_t);
4092 }
4093 uint64_t cgen_var_0;
4094 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
4095 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
4096 *streamPtrPtr += 1 * 8;
4097 uint64_t cgen_var_1;
4098 *&cgen_var_1 = get_host_u64_VkQueryPool((*&local_queryPool));
4099 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
4100 *streamPtrPtr += 1 * 8;
4101 memcpy(*streamPtrPtr, (uint32_t*)&local_firstQuery, sizeof(uint32_t));
4102 *streamPtrPtr += sizeof(uint32_t);
4103 memcpy(*streamPtrPtr, (uint32_t*)&local_queryCount, sizeof(uint32_t));
4104 *streamPtrPtr += sizeof(uint32_t);
4105 uint64_t cgen_var_2 = (uint64_t)local_dataSize;
4106 memcpy((*streamPtrPtr), &cgen_var_2, 8);
4107 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
4108 *streamPtrPtr += 8;
4109 memcpy(*streamPtrPtr, (void*)pData, ((dataSize)) * sizeof(uint8_t));
4110 *streamPtrPtr += ((dataSize)) * sizeof(uint8_t);
4111 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_stride, sizeof(VkDeviceSize));
4112 *streamPtrPtr += sizeof(VkDeviceSize);
4113 memcpy(*streamPtrPtr, (VkQueryResultFlags*)&local_flags, sizeof(VkQueryResultFlags));
4114 *streamPtrPtr += sizeof(VkQueryResultFlags);
4115 stream->read((void*)pData, ((dataSize)) * sizeof(uint8_t));
4116 VkResult vkGetQueryPoolResults_VkResult_return = (VkResult)0;
4117 stream->read(&vkGetQueryPoolResults_VkResult_return, sizeof(VkResult));
4118 ++encodeCount;
4119 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
4120 pool->freeAll();
4121 stream->clearPool();
4122 }
4123 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
4124 return vkGetQueryPoolResults_VkResult_return;
4125 }
4126
vkCreateBuffer(VkDevice device,const VkBufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBuffer * pBuffer,uint32_t doLock)4127 VkResult VkEncoder::vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo,
4128 const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer,
4129 uint32_t doLock) {
4130 (void)doLock;
4131 bool queueSubmitWithCommandsEnabled =
4132 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
4133 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
4134 auto stream = mImpl->stream();
4135 auto pool = mImpl->pool();
4136 VkDevice local_device;
4137 VkBufferCreateInfo* local_pCreateInfo;
4138 VkAllocationCallbacks* local_pAllocator;
4139 local_device = device;
4140 local_pCreateInfo = nullptr;
4141 if (pCreateInfo) {
4142 local_pCreateInfo = (VkBufferCreateInfo*)pool->alloc(sizeof(const VkBufferCreateInfo));
4143 deepcopy_VkBufferCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
4144 (VkBufferCreateInfo*)(local_pCreateInfo));
4145 }
4146 local_pAllocator = nullptr;
4147 if (pAllocator) {
4148 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4149 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
4150 (VkAllocationCallbacks*)(local_pAllocator));
4151 }
4152 local_pAllocator = nullptr;
4153 if (local_pCreateInfo) {
4154 transform_tohost_VkBufferCreateInfo(sResourceTracker,
4155 (VkBufferCreateInfo*)(local_pCreateInfo));
4156 }
4157 if (local_pAllocator) {
4158 transform_tohost_VkAllocationCallbacks(sResourceTracker,
4159 (VkAllocationCallbacks*)(local_pAllocator));
4160 }
4161 size_t count = 0;
4162 size_t* countPtr = &count;
4163 {
4164 uint64_t cgen_var_0;
4165 *countPtr += 1 * 8;
4166 count_VkBufferCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4167 (VkBufferCreateInfo*)(local_pCreateInfo), countPtr);
4168 // WARNING PTR CHECK
4169 *countPtr += 8;
4170 if (local_pAllocator) {
4171 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4172 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
4173 }
4174 uint64_t cgen_var_1;
4175 *countPtr += 8;
4176 }
4177 uint32_t packetSize_vkCreateBuffer = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
4178 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateBuffer);
4179 uint8_t* packetBeginPtr = streamPtr;
4180 uint8_t** streamPtrPtr = &streamPtr;
4181 uint32_t opcode_vkCreateBuffer = OP_vkCreateBuffer;
4182 uint32_t seqno;
4183 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
4184 memcpy(streamPtr, &opcode_vkCreateBuffer, sizeof(uint32_t));
4185 streamPtr += sizeof(uint32_t);
4186 memcpy(streamPtr, &packetSize_vkCreateBuffer, sizeof(uint32_t));
4187 streamPtr += sizeof(uint32_t);
4188 if (queueSubmitWithCommandsEnabled) {
4189 memcpy(streamPtr, &seqno, sizeof(uint32_t));
4190 streamPtr += sizeof(uint32_t);
4191 }
4192 uint64_t cgen_var_0;
4193 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
4194 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
4195 *streamPtrPtr += 1 * 8;
4196 reservedmarshal_VkBufferCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4197 (VkBufferCreateInfo*)(local_pCreateInfo), streamPtrPtr);
4198 // WARNING PTR CHECK
4199 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
4200 memcpy((*streamPtrPtr), &cgen_var_1, 8);
4201 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
4202 *streamPtrPtr += 8;
4203 if (local_pAllocator) {
4204 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4205 (VkAllocationCallbacks*)(local_pAllocator),
4206 streamPtrPtr);
4207 }
4208 /* is handle, possibly out */;
4209 uint64_t cgen_var_2;
4210 *&cgen_var_2 = (uint64_t)((*pBuffer));
4211 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
4212 *streamPtrPtr += 8;
4213 /* is handle, possibly out */;
4214 stream->setHandleMapping(sResourceTracker->createMapping());
4215 uint64_t cgen_var_3;
4216 stream->read((uint64_t*)&cgen_var_3, 8);
4217 stream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_3, (VkBuffer*)pBuffer, 1);
4218 stream->unsetHandleMapping();
4219 VkResult vkCreateBuffer_VkResult_return = (VkResult)0;
4220 stream->read(&vkCreateBuffer_VkResult_return, sizeof(VkResult));
4221 ++encodeCount;
4222 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
4223 pool->freeAll();
4224 stream->clearPool();
4225 }
4226 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
4227 return vkCreateBuffer_VkResult_return;
4228 }
4229
vkDestroyBuffer(VkDevice device,VkBuffer buffer,const VkAllocationCallbacks * pAllocator,uint32_t doLock)4230 void VkEncoder::vkDestroyBuffer(VkDevice device, VkBuffer buffer,
4231 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
4232 (void)doLock;
4233 bool queueSubmitWithCommandsEnabled =
4234 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
4235 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
4236 auto stream = mImpl->stream();
4237 auto pool = mImpl->pool();
4238 VkDevice local_device;
4239 VkBuffer local_buffer;
4240 VkAllocationCallbacks* local_pAllocator;
4241 local_device = device;
4242 local_buffer = buffer;
4243 local_pAllocator = nullptr;
4244 if (pAllocator) {
4245 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4246 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
4247 (VkAllocationCallbacks*)(local_pAllocator));
4248 }
4249 local_pAllocator = nullptr;
4250 if (local_pAllocator) {
4251 transform_tohost_VkAllocationCallbacks(sResourceTracker,
4252 (VkAllocationCallbacks*)(local_pAllocator));
4253 }
4254 size_t count = 0;
4255 size_t* countPtr = &count;
4256 {
4257 uint64_t cgen_var_0;
4258 *countPtr += 1 * 8;
4259 uint64_t cgen_var_1;
4260 *countPtr += 1 * 8;
4261 // WARNING PTR CHECK
4262 *countPtr += 8;
4263 if (local_pAllocator) {
4264 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4265 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
4266 }
4267 }
4268 uint32_t packetSize_vkDestroyBuffer = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
4269 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyBuffer);
4270 uint8_t* packetBeginPtr = streamPtr;
4271 uint8_t** streamPtrPtr = &streamPtr;
4272 uint32_t opcode_vkDestroyBuffer = OP_vkDestroyBuffer;
4273 uint32_t seqno;
4274 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
4275 memcpy(streamPtr, &opcode_vkDestroyBuffer, sizeof(uint32_t));
4276 streamPtr += sizeof(uint32_t);
4277 memcpy(streamPtr, &packetSize_vkDestroyBuffer, sizeof(uint32_t));
4278 streamPtr += sizeof(uint32_t);
4279 if (queueSubmitWithCommandsEnabled) {
4280 memcpy(streamPtr, &seqno, sizeof(uint32_t));
4281 streamPtr += sizeof(uint32_t);
4282 }
4283 uint64_t cgen_var_0;
4284 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
4285 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
4286 *streamPtrPtr += 1 * 8;
4287 uint64_t cgen_var_1;
4288 *&cgen_var_1 = get_host_u64_VkBuffer((*&local_buffer));
4289 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
4290 *streamPtrPtr += 1 * 8;
4291 // WARNING PTR CHECK
4292 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
4293 memcpy((*streamPtrPtr), &cgen_var_2, 8);
4294 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
4295 *streamPtrPtr += 8;
4296 if (local_pAllocator) {
4297 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4298 (VkAllocationCallbacks*)(local_pAllocator),
4299 streamPtrPtr);
4300 }
4301 sResourceTracker->destroyMapping()->mapHandles_VkBuffer((VkBuffer*)&buffer);
4302 stream->flush();
4303 ++encodeCount;
4304 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
4305 pool->freeAll();
4306 stream->clearPool();
4307 }
4308 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
4309 }
4310
vkCreateBufferView(VkDevice device,const VkBufferViewCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBufferView * pView,uint32_t doLock)4311 VkResult VkEncoder::vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo,
4312 const VkAllocationCallbacks* pAllocator, VkBufferView* pView,
4313 uint32_t doLock) {
4314 (void)doLock;
4315 bool queueSubmitWithCommandsEnabled =
4316 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
4317 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
4318 auto stream = mImpl->stream();
4319 auto pool = mImpl->pool();
4320 VkDevice local_device;
4321 VkBufferViewCreateInfo* local_pCreateInfo;
4322 VkAllocationCallbacks* local_pAllocator;
4323 local_device = device;
4324 local_pCreateInfo = nullptr;
4325 if (pCreateInfo) {
4326 local_pCreateInfo =
4327 (VkBufferViewCreateInfo*)pool->alloc(sizeof(const VkBufferViewCreateInfo));
4328 deepcopy_VkBufferViewCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
4329 (VkBufferViewCreateInfo*)(local_pCreateInfo));
4330 }
4331 local_pAllocator = nullptr;
4332 if (pAllocator) {
4333 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4334 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
4335 (VkAllocationCallbacks*)(local_pAllocator));
4336 }
4337 local_pAllocator = nullptr;
4338 if (local_pCreateInfo) {
4339 transform_tohost_VkBufferViewCreateInfo(sResourceTracker,
4340 (VkBufferViewCreateInfo*)(local_pCreateInfo));
4341 }
4342 if (local_pAllocator) {
4343 transform_tohost_VkAllocationCallbacks(sResourceTracker,
4344 (VkAllocationCallbacks*)(local_pAllocator));
4345 }
4346 size_t count = 0;
4347 size_t* countPtr = &count;
4348 {
4349 uint64_t cgen_var_0;
4350 *countPtr += 1 * 8;
4351 count_VkBufferViewCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4352 (VkBufferViewCreateInfo*)(local_pCreateInfo), countPtr);
4353 // WARNING PTR CHECK
4354 *countPtr += 8;
4355 if (local_pAllocator) {
4356 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4357 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
4358 }
4359 uint64_t cgen_var_1;
4360 *countPtr += 8;
4361 }
4362 uint32_t packetSize_vkCreateBufferView =
4363 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
4364 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateBufferView);
4365 uint8_t* packetBeginPtr = streamPtr;
4366 uint8_t** streamPtrPtr = &streamPtr;
4367 uint32_t opcode_vkCreateBufferView = OP_vkCreateBufferView;
4368 uint32_t seqno;
4369 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
4370 memcpy(streamPtr, &opcode_vkCreateBufferView, sizeof(uint32_t));
4371 streamPtr += sizeof(uint32_t);
4372 memcpy(streamPtr, &packetSize_vkCreateBufferView, sizeof(uint32_t));
4373 streamPtr += sizeof(uint32_t);
4374 if (queueSubmitWithCommandsEnabled) {
4375 memcpy(streamPtr, &seqno, sizeof(uint32_t));
4376 streamPtr += sizeof(uint32_t);
4377 }
4378 uint64_t cgen_var_0;
4379 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
4380 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
4381 *streamPtrPtr += 1 * 8;
4382 reservedmarshal_VkBufferViewCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4383 (VkBufferViewCreateInfo*)(local_pCreateInfo),
4384 streamPtrPtr);
4385 // WARNING PTR CHECK
4386 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
4387 memcpy((*streamPtrPtr), &cgen_var_1, 8);
4388 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
4389 *streamPtrPtr += 8;
4390 if (local_pAllocator) {
4391 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4392 (VkAllocationCallbacks*)(local_pAllocator),
4393 streamPtrPtr);
4394 }
4395 /* is handle, possibly out */;
4396 uint64_t cgen_var_2;
4397 *&cgen_var_2 = (uint64_t)((*pView));
4398 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
4399 *streamPtrPtr += 8;
4400 /* is handle, possibly out */;
4401 stream->setHandleMapping(sResourceTracker->createMapping());
4402 uint64_t cgen_var_3;
4403 stream->read((uint64_t*)&cgen_var_3, 8);
4404 stream->handleMapping()->mapHandles_u64_VkBufferView(&cgen_var_3, (VkBufferView*)pView, 1);
4405 stream->unsetHandleMapping();
4406 VkResult vkCreateBufferView_VkResult_return = (VkResult)0;
4407 stream->read(&vkCreateBufferView_VkResult_return, sizeof(VkResult));
4408 ++encodeCount;
4409 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
4410 pool->freeAll();
4411 stream->clearPool();
4412 }
4413 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
4414 return vkCreateBufferView_VkResult_return;
4415 }
4416
vkDestroyBufferView(VkDevice device,VkBufferView bufferView,const VkAllocationCallbacks * pAllocator,uint32_t doLock)4417 void VkEncoder::vkDestroyBufferView(VkDevice device, VkBufferView bufferView,
4418 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
4419 (void)doLock;
4420 bool queueSubmitWithCommandsEnabled =
4421 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
4422 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
4423 auto stream = mImpl->stream();
4424 auto pool = mImpl->pool();
4425 VkDevice local_device;
4426 VkBufferView local_bufferView;
4427 VkAllocationCallbacks* local_pAllocator;
4428 local_device = device;
4429 local_bufferView = bufferView;
4430 local_pAllocator = nullptr;
4431 if (pAllocator) {
4432 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4433 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
4434 (VkAllocationCallbacks*)(local_pAllocator));
4435 }
4436 local_pAllocator = nullptr;
4437 if (local_pAllocator) {
4438 transform_tohost_VkAllocationCallbacks(sResourceTracker,
4439 (VkAllocationCallbacks*)(local_pAllocator));
4440 }
4441 size_t count = 0;
4442 size_t* countPtr = &count;
4443 {
4444 uint64_t cgen_var_0;
4445 *countPtr += 1 * 8;
4446 uint64_t cgen_var_1;
4447 *countPtr += 1 * 8;
4448 // WARNING PTR CHECK
4449 *countPtr += 8;
4450 if (local_pAllocator) {
4451 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4452 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
4453 }
4454 }
4455 uint32_t packetSize_vkDestroyBufferView =
4456 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
4457 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyBufferView);
4458 uint8_t* packetBeginPtr = streamPtr;
4459 uint8_t** streamPtrPtr = &streamPtr;
4460 uint32_t opcode_vkDestroyBufferView = OP_vkDestroyBufferView;
4461 uint32_t seqno;
4462 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
4463 memcpy(streamPtr, &opcode_vkDestroyBufferView, sizeof(uint32_t));
4464 streamPtr += sizeof(uint32_t);
4465 memcpy(streamPtr, &packetSize_vkDestroyBufferView, sizeof(uint32_t));
4466 streamPtr += sizeof(uint32_t);
4467 if (queueSubmitWithCommandsEnabled) {
4468 memcpy(streamPtr, &seqno, sizeof(uint32_t));
4469 streamPtr += sizeof(uint32_t);
4470 }
4471 uint64_t cgen_var_0;
4472 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
4473 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
4474 *streamPtrPtr += 1 * 8;
4475 uint64_t cgen_var_1;
4476 *&cgen_var_1 = get_host_u64_VkBufferView((*&local_bufferView));
4477 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
4478 *streamPtrPtr += 1 * 8;
4479 // WARNING PTR CHECK
4480 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
4481 memcpy((*streamPtrPtr), &cgen_var_2, 8);
4482 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
4483 *streamPtrPtr += 8;
4484 if (local_pAllocator) {
4485 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4486 (VkAllocationCallbacks*)(local_pAllocator),
4487 streamPtrPtr);
4488 }
4489 sResourceTracker->destroyMapping()->mapHandles_VkBufferView((VkBufferView*)&bufferView);
4490 stream->flush();
4491 ++encodeCount;
4492 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
4493 pool->freeAll();
4494 stream->clearPool();
4495 }
4496 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
4497 }
4498
vkCreateImage(VkDevice device,const VkImageCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImage * pImage,uint32_t doLock)4499 VkResult VkEncoder::vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo,
4500 const VkAllocationCallbacks* pAllocator, VkImage* pImage,
4501 uint32_t doLock) {
4502 (void)doLock;
4503 bool queueSubmitWithCommandsEnabled =
4504 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
4505 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
4506 auto stream = mImpl->stream();
4507 auto pool = mImpl->pool();
4508 VkDevice local_device;
4509 VkImageCreateInfo* local_pCreateInfo;
4510 VkAllocationCallbacks* local_pAllocator;
4511 local_device = device;
4512 local_pCreateInfo = nullptr;
4513 if (pCreateInfo) {
4514 local_pCreateInfo = (VkImageCreateInfo*)pool->alloc(sizeof(const VkImageCreateInfo));
4515 deepcopy_VkImageCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
4516 (VkImageCreateInfo*)(local_pCreateInfo));
4517 }
4518 local_pAllocator = nullptr;
4519 if (pAllocator) {
4520 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4521 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
4522 (VkAllocationCallbacks*)(local_pAllocator));
4523 }
4524 sResourceTracker->unwrap_vkCreateImage_pCreateInfo(pCreateInfo, local_pCreateInfo);
4525 local_pAllocator = nullptr;
4526 if (local_pCreateInfo) {
4527 sResourceTracker->transformImpl_VkImageCreateInfo_tohost(local_pCreateInfo, 1);
4528 transform_tohost_VkImageCreateInfo(sResourceTracker,
4529 (VkImageCreateInfo*)(local_pCreateInfo));
4530 }
4531 if (local_pAllocator) {
4532 transform_tohost_VkAllocationCallbacks(sResourceTracker,
4533 (VkAllocationCallbacks*)(local_pAllocator));
4534 }
4535 size_t count = 0;
4536 size_t* countPtr = &count;
4537 {
4538 uint64_t cgen_var_0;
4539 *countPtr += 1 * 8;
4540 count_VkImageCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4541 (VkImageCreateInfo*)(local_pCreateInfo), countPtr);
4542 // WARNING PTR CHECK
4543 *countPtr += 8;
4544 if (local_pAllocator) {
4545 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4546 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
4547 }
4548 uint64_t cgen_var_1;
4549 *countPtr += 8;
4550 }
4551 uint32_t packetSize_vkCreateImage = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
4552 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateImage);
4553 uint8_t* packetBeginPtr = streamPtr;
4554 uint8_t** streamPtrPtr = &streamPtr;
4555 uint32_t opcode_vkCreateImage = OP_vkCreateImage;
4556 uint32_t seqno;
4557 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
4558 memcpy(streamPtr, &opcode_vkCreateImage, sizeof(uint32_t));
4559 streamPtr += sizeof(uint32_t);
4560 memcpy(streamPtr, &packetSize_vkCreateImage, sizeof(uint32_t));
4561 streamPtr += sizeof(uint32_t);
4562 if (queueSubmitWithCommandsEnabled) {
4563 memcpy(streamPtr, &seqno, sizeof(uint32_t));
4564 streamPtr += sizeof(uint32_t);
4565 }
4566 uint64_t cgen_var_0;
4567 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
4568 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
4569 *streamPtrPtr += 1 * 8;
4570 reservedmarshal_VkImageCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4571 (VkImageCreateInfo*)(local_pCreateInfo), streamPtrPtr);
4572 // WARNING PTR CHECK
4573 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
4574 memcpy((*streamPtrPtr), &cgen_var_1, 8);
4575 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
4576 *streamPtrPtr += 8;
4577 if (local_pAllocator) {
4578 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4579 (VkAllocationCallbacks*)(local_pAllocator),
4580 streamPtrPtr);
4581 }
4582 /* is handle, possibly out */;
4583 uint64_t cgen_var_2;
4584 *&cgen_var_2 = (uint64_t)((*pImage));
4585 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
4586 *streamPtrPtr += 8;
4587 /* is handle, possibly out */;
4588 stream->setHandleMapping(sResourceTracker->createMapping());
4589 uint64_t cgen_var_3;
4590 stream->read((uint64_t*)&cgen_var_3, 8);
4591 stream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_3, (VkImage*)pImage, 1);
4592 stream->unsetHandleMapping();
4593 VkResult vkCreateImage_VkResult_return = (VkResult)0;
4594 stream->read(&vkCreateImage_VkResult_return, sizeof(VkResult));
4595 ++encodeCount;
4596 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
4597 pool->freeAll();
4598 stream->clearPool();
4599 }
4600 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
4601 return vkCreateImage_VkResult_return;
4602 }
4603
vkDestroyImage(VkDevice device,VkImage image,const VkAllocationCallbacks * pAllocator,uint32_t doLock)4604 void VkEncoder::vkDestroyImage(VkDevice device, VkImage image,
4605 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
4606 (void)doLock;
4607 bool queueSubmitWithCommandsEnabled =
4608 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
4609 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
4610 auto stream = mImpl->stream();
4611 auto pool = mImpl->pool();
4612 VkDevice local_device;
4613 VkImage local_image;
4614 VkAllocationCallbacks* local_pAllocator;
4615 local_device = device;
4616 local_image = image;
4617 local_pAllocator = nullptr;
4618 if (pAllocator) {
4619 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4620 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
4621 (VkAllocationCallbacks*)(local_pAllocator));
4622 }
4623 local_pAllocator = nullptr;
4624 if (local_pAllocator) {
4625 transform_tohost_VkAllocationCallbacks(sResourceTracker,
4626 (VkAllocationCallbacks*)(local_pAllocator));
4627 }
4628 size_t count = 0;
4629 size_t* countPtr = &count;
4630 {
4631 uint64_t cgen_var_0;
4632 *countPtr += 1 * 8;
4633 uint64_t cgen_var_1;
4634 *countPtr += 1 * 8;
4635 // WARNING PTR CHECK
4636 *countPtr += 8;
4637 if (local_pAllocator) {
4638 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4639 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
4640 }
4641 }
4642 uint32_t packetSize_vkDestroyImage = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
4643 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyImage);
4644 uint8_t* packetBeginPtr = streamPtr;
4645 uint8_t** streamPtrPtr = &streamPtr;
4646 uint32_t opcode_vkDestroyImage = OP_vkDestroyImage;
4647 uint32_t seqno;
4648 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
4649 memcpy(streamPtr, &opcode_vkDestroyImage, sizeof(uint32_t));
4650 streamPtr += sizeof(uint32_t);
4651 memcpy(streamPtr, &packetSize_vkDestroyImage, sizeof(uint32_t));
4652 streamPtr += sizeof(uint32_t);
4653 if (queueSubmitWithCommandsEnabled) {
4654 memcpy(streamPtr, &seqno, sizeof(uint32_t));
4655 streamPtr += sizeof(uint32_t);
4656 }
4657 uint64_t cgen_var_0;
4658 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
4659 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
4660 *streamPtrPtr += 1 * 8;
4661 uint64_t cgen_var_1;
4662 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
4663 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
4664 *streamPtrPtr += 1 * 8;
4665 // WARNING PTR CHECK
4666 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
4667 memcpy((*streamPtrPtr), &cgen_var_2, 8);
4668 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
4669 *streamPtrPtr += 8;
4670 if (local_pAllocator) {
4671 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4672 (VkAllocationCallbacks*)(local_pAllocator),
4673 streamPtrPtr);
4674 }
4675 sResourceTracker->destroyMapping()->mapHandles_VkImage((VkImage*)&image);
4676 stream->flush();
4677 ++encodeCount;
4678 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
4679 pool->freeAll();
4680 stream->clearPool();
4681 }
4682 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
4683 }
4684
vkGetImageSubresourceLayout(VkDevice device,VkImage image,const VkImageSubresource * pSubresource,VkSubresourceLayout * pLayout,uint32_t doLock)4685 void VkEncoder::vkGetImageSubresourceLayout(VkDevice device, VkImage image,
4686 const VkImageSubresource* pSubresource,
4687 VkSubresourceLayout* pLayout, uint32_t doLock) {
4688 (void)doLock;
4689 bool queueSubmitWithCommandsEnabled =
4690 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
4691 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
4692 auto stream = mImpl->stream();
4693 auto pool = mImpl->pool();
4694 VkDevice local_device;
4695 VkImage local_image;
4696 VkImageSubresource* local_pSubresource;
4697 local_device = device;
4698 local_image = image;
4699 local_pSubresource = nullptr;
4700 if (pSubresource) {
4701 local_pSubresource = (VkImageSubresource*)pool->alloc(sizeof(const VkImageSubresource));
4702 deepcopy_VkImageSubresource(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubresource,
4703 (VkImageSubresource*)(local_pSubresource));
4704 }
4705 if (local_pSubresource) {
4706 transform_tohost_VkImageSubresource(sResourceTracker,
4707 (VkImageSubresource*)(local_pSubresource));
4708 }
4709 size_t count = 0;
4710 size_t* countPtr = &count;
4711 {
4712 uint64_t cgen_var_0;
4713 *countPtr += 1 * 8;
4714 uint64_t cgen_var_1;
4715 *countPtr += 1 * 8;
4716 count_VkImageSubresource(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4717 (VkImageSubresource*)(local_pSubresource), countPtr);
4718 count_VkSubresourceLayout(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4719 (VkSubresourceLayout*)(pLayout), countPtr);
4720 }
4721 uint32_t packetSize_vkGetImageSubresourceLayout =
4722 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
4723 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageSubresourceLayout);
4724 uint8_t* packetBeginPtr = streamPtr;
4725 uint8_t** streamPtrPtr = &streamPtr;
4726 uint32_t opcode_vkGetImageSubresourceLayout = OP_vkGetImageSubresourceLayout;
4727 uint32_t seqno;
4728 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
4729 memcpy(streamPtr, &opcode_vkGetImageSubresourceLayout, sizeof(uint32_t));
4730 streamPtr += sizeof(uint32_t);
4731 memcpy(streamPtr, &packetSize_vkGetImageSubresourceLayout, sizeof(uint32_t));
4732 streamPtr += sizeof(uint32_t);
4733 if (queueSubmitWithCommandsEnabled) {
4734 memcpy(streamPtr, &seqno, sizeof(uint32_t));
4735 streamPtr += sizeof(uint32_t);
4736 }
4737 uint64_t cgen_var_0;
4738 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
4739 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
4740 *streamPtrPtr += 1 * 8;
4741 uint64_t cgen_var_1;
4742 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
4743 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
4744 *streamPtrPtr += 1 * 8;
4745 reservedmarshal_VkImageSubresource(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4746 (VkImageSubresource*)(local_pSubresource), streamPtrPtr);
4747 reservedmarshal_VkSubresourceLayout(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4748 (VkSubresourceLayout*)(pLayout), streamPtrPtr);
4749 unmarshal_VkSubresourceLayout(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4750 (VkSubresourceLayout*)(pLayout));
4751 if (pLayout) {
4752 transform_fromhost_VkSubresourceLayout(sResourceTracker, (VkSubresourceLayout*)(pLayout));
4753 }
4754 ++encodeCount;
4755 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
4756 pool->freeAll();
4757 stream->clearPool();
4758 }
4759 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
4760 }
4761
vkCreateImageView(VkDevice device,const VkImageViewCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImageView * pView,uint32_t doLock)4762 VkResult VkEncoder::vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo,
4763 const VkAllocationCallbacks* pAllocator, VkImageView* pView,
4764 uint32_t doLock) {
4765 (void)doLock;
4766 bool queueSubmitWithCommandsEnabled =
4767 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
4768 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
4769 auto stream = mImpl->stream();
4770 auto pool = mImpl->pool();
4771 VkDevice local_device;
4772 VkImageViewCreateInfo* local_pCreateInfo;
4773 VkAllocationCallbacks* local_pAllocator;
4774 local_device = device;
4775 local_pCreateInfo = nullptr;
4776 if (pCreateInfo) {
4777 local_pCreateInfo =
4778 (VkImageViewCreateInfo*)pool->alloc(sizeof(const VkImageViewCreateInfo));
4779 deepcopy_VkImageViewCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
4780 (VkImageViewCreateInfo*)(local_pCreateInfo));
4781 }
4782 local_pAllocator = nullptr;
4783 if (pAllocator) {
4784 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4785 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
4786 (VkAllocationCallbacks*)(local_pAllocator));
4787 }
4788 local_pAllocator = nullptr;
4789 if (local_pCreateInfo) {
4790 transform_tohost_VkImageViewCreateInfo(sResourceTracker,
4791 (VkImageViewCreateInfo*)(local_pCreateInfo));
4792 }
4793 if (local_pAllocator) {
4794 transform_tohost_VkAllocationCallbacks(sResourceTracker,
4795 (VkAllocationCallbacks*)(local_pAllocator));
4796 }
4797 size_t count = 0;
4798 size_t* countPtr = &count;
4799 {
4800 uint64_t cgen_var_0;
4801 *countPtr += 1 * 8;
4802 count_VkImageViewCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4803 (VkImageViewCreateInfo*)(local_pCreateInfo), countPtr);
4804 // WARNING PTR CHECK
4805 *countPtr += 8;
4806 if (local_pAllocator) {
4807 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4808 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
4809 }
4810 uint64_t cgen_var_1;
4811 *countPtr += 8;
4812 }
4813 uint32_t packetSize_vkCreateImageView =
4814 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
4815 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateImageView);
4816 uint8_t* packetBeginPtr = streamPtr;
4817 uint8_t** streamPtrPtr = &streamPtr;
4818 uint32_t opcode_vkCreateImageView = OP_vkCreateImageView;
4819 uint32_t seqno;
4820 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
4821 memcpy(streamPtr, &opcode_vkCreateImageView, sizeof(uint32_t));
4822 streamPtr += sizeof(uint32_t);
4823 memcpy(streamPtr, &packetSize_vkCreateImageView, sizeof(uint32_t));
4824 streamPtr += sizeof(uint32_t);
4825 if (queueSubmitWithCommandsEnabled) {
4826 memcpy(streamPtr, &seqno, sizeof(uint32_t));
4827 streamPtr += sizeof(uint32_t);
4828 }
4829 uint64_t cgen_var_0;
4830 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
4831 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
4832 *streamPtrPtr += 1 * 8;
4833 reservedmarshal_VkImageViewCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4834 (VkImageViewCreateInfo*)(local_pCreateInfo),
4835 streamPtrPtr);
4836 // WARNING PTR CHECK
4837 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
4838 memcpy((*streamPtrPtr), &cgen_var_1, 8);
4839 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
4840 *streamPtrPtr += 8;
4841 if (local_pAllocator) {
4842 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4843 (VkAllocationCallbacks*)(local_pAllocator),
4844 streamPtrPtr);
4845 }
4846 /* is handle, possibly out */;
4847 uint64_t cgen_var_2;
4848 *&cgen_var_2 = (uint64_t)((*pView));
4849 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
4850 *streamPtrPtr += 8;
4851 /* is handle, possibly out */;
4852 stream->setHandleMapping(sResourceTracker->createMapping());
4853 uint64_t cgen_var_3;
4854 stream->read((uint64_t*)&cgen_var_3, 8);
4855 stream->handleMapping()->mapHandles_u64_VkImageView(&cgen_var_3, (VkImageView*)pView, 1);
4856 stream->unsetHandleMapping();
4857 VkResult vkCreateImageView_VkResult_return = (VkResult)0;
4858 stream->read(&vkCreateImageView_VkResult_return, sizeof(VkResult));
4859 ++encodeCount;
4860 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
4861 pool->freeAll();
4862 stream->clearPool();
4863 }
4864 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
4865 return vkCreateImageView_VkResult_return;
4866 }
4867
vkDestroyImageView(VkDevice device,VkImageView imageView,const VkAllocationCallbacks * pAllocator,uint32_t doLock)4868 void VkEncoder::vkDestroyImageView(VkDevice device, VkImageView imageView,
4869 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
4870 (void)doLock;
4871 bool queueSubmitWithCommandsEnabled =
4872 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
4873 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
4874 auto stream = mImpl->stream();
4875 auto pool = mImpl->pool();
4876 VkDevice local_device;
4877 VkImageView local_imageView;
4878 VkAllocationCallbacks* local_pAllocator;
4879 local_device = device;
4880 local_imageView = imageView;
4881 local_pAllocator = nullptr;
4882 if (pAllocator) {
4883 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4884 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
4885 (VkAllocationCallbacks*)(local_pAllocator));
4886 }
4887 local_pAllocator = nullptr;
4888 if (local_pAllocator) {
4889 transform_tohost_VkAllocationCallbacks(sResourceTracker,
4890 (VkAllocationCallbacks*)(local_pAllocator));
4891 }
4892 size_t count = 0;
4893 size_t* countPtr = &count;
4894 {
4895 uint64_t cgen_var_0;
4896 *countPtr += 1 * 8;
4897 uint64_t cgen_var_1;
4898 *countPtr += 1 * 8;
4899 // WARNING PTR CHECK
4900 *countPtr += 8;
4901 if (local_pAllocator) {
4902 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4903 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
4904 }
4905 }
4906 uint32_t packetSize_vkDestroyImageView =
4907 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
4908 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyImageView);
4909 uint8_t* packetBeginPtr = streamPtr;
4910 uint8_t** streamPtrPtr = &streamPtr;
4911 uint32_t opcode_vkDestroyImageView = OP_vkDestroyImageView;
4912 uint32_t seqno;
4913 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
4914 memcpy(streamPtr, &opcode_vkDestroyImageView, sizeof(uint32_t));
4915 streamPtr += sizeof(uint32_t);
4916 memcpy(streamPtr, &packetSize_vkDestroyImageView, sizeof(uint32_t));
4917 streamPtr += sizeof(uint32_t);
4918 if (queueSubmitWithCommandsEnabled) {
4919 memcpy(streamPtr, &seqno, sizeof(uint32_t));
4920 streamPtr += sizeof(uint32_t);
4921 }
4922 uint64_t cgen_var_0;
4923 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
4924 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
4925 *streamPtrPtr += 1 * 8;
4926 uint64_t cgen_var_1;
4927 *&cgen_var_1 = get_host_u64_VkImageView((*&local_imageView));
4928 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
4929 *streamPtrPtr += 1 * 8;
4930 // WARNING PTR CHECK
4931 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
4932 memcpy((*streamPtrPtr), &cgen_var_2, 8);
4933 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
4934 *streamPtrPtr += 8;
4935 if (local_pAllocator) {
4936 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
4937 (VkAllocationCallbacks*)(local_pAllocator),
4938 streamPtrPtr);
4939 }
4940 sResourceTracker->destroyMapping()->mapHandles_VkImageView((VkImageView*)&imageView);
4941 stream->flush();
4942 ++encodeCount;
4943 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
4944 pool->freeAll();
4945 stream->clearPool();
4946 }
4947 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
4948 }
4949
vkCreateShaderModule(VkDevice device,const VkShaderModuleCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkShaderModule * pShaderModule,uint32_t doLock)4950 VkResult VkEncoder::vkCreateShaderModule(VkDevice device,
4951 const VkShaderModuleCreateInfo* pCreateInfo,
4952 const VkAllocationCallbacks* pAllocator,
4953 VkShaderModule* pShaderModule, uint32_t doLock) {
4954 (void)doLock;
4955 bool queueSubmitWithCommandsEnabled =
4956 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
4957 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
4958 auto stream = mImpl->stream();
4959 auto pool = mImpl->pool();
4960 VkDevice local_device;
4961 VkShaderModuleCreateInfo* local_pCreateInfo;
4962 VkAllocationCallbacks* local_pAllocator;
4963 local_device = device;
4964 local_pCreateInfo = nullptr;
4965 if (pCreateInfo) {
4966 local_pCreateInfo =
4967 (VkShaderModuleCreateInfo*)pool->alloc(sizeof(const VkShaderModuleCreateInfo));
4968 deepcopy_VkShaderModuleCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
4969 (VkShaderModuleCreateInfo*)(local_pCreateInfo));
4970 }
4971 local_pAllocator = nullptr;
4972 if (pAllocator) {
4973 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4974 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
4975 (VkAllocationCallbacks*)(local_pAllocator));
4976 }
4977 local_pAllocator = nullptr;
4978 if (local_pCreateInfo) {
4979 transform_tohost_VkShaderModuleCreateInfo(sResourceTracker,
4980 (VkShaderModuleCreateInfo*)(local_pCreateInfo));
4981 }
4982 if (local_pAllocator) {
4983 transform_tohost_VkAllocationCallbacks(sResourceTracker,
4984 (VkAllocationCallbacks*)(local_pAllocator));
4985 }
4986 size_t count = 0;
4987 size_t* countPtr = &count;
4988 {
4989 uint64_t cgen_var_0;
4990 *countPtr += 1 * 8;
4991 count_VkShaderModuleCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4992 (VkShaderModuleCreateInfo*)(local_pCreateInfo), countPtr);
4993 // WARNING PTR CHECK
4994 *countPtr += 8;
4995 if (local_pAllocator) {
4996 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
4997 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
4998 }
4999 uint64_t cgen_var_1;
5000 *countPtr += 8;
5001 }
5002 uint32_t packetSize_vkCreateShaderModule =
5003 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
5004 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateShaderModule);
5005 uint8_t* packetBeginPtr = streamPtr;
5006 uint8_t** streamPtrPtr = &streamPtr;
5007 uint32_t opcode_vkCreateShaderModule = OP_vkCreateShaderModule;
5008 uint32_t seqno;
5009 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
5010 memcpy(streamPtr, &opcode_vkCreateShaderModule, sizeof(uint32_t));
5011 streamPtr += sizeof(uint32_t);
5012 memcpy(streamPtr, &packetSize_vkCreateShaderModule, sizeof(uint32_t));
5013 streamPtr += sizeof(uint32_t);
5014 if (queueSubmitWithCommandsEnabled) {
5015 memcpy(streamPtr, &seqno, sizeof(uint32_t));
5016 streamPtr += sizeof(uint32_t);
5017 }
5018 uint64_t cgen_var_0;
5019 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
5020 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
5021 *streamPtrPtr += 1 * 8;
5022 reservedmarshal_VkShaderModuleCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5023 (VkShaderModuleCreateInfo*)(local_pCreateInfo),
5024 streamPtrPtr);
5025 // WARNING PTR CHECK
5026 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
5027 memcpy((*streamPtrPtr), &cgen_var_1, 8);
5028 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
5029 *streamPtrPtr += 8;
5030 if (local_pAllocator) {
5031 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5032 (VkAllocationCallbacks*)(local_pAllocator),
5033 streamPtrPtr);
5034 }
5035 /* is handle, possibly out */;
5036 uint64_t cgen_var_2;
5037 *&cgen_var_2 = (uint64_t)((*pShaderModule));
5038 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
5039 *streamPtrPtr += 8;
5040 /* is handle, possibly out */;
5041 stream->setHandleMapping(sResourceTracker->createMapping());
5042 uint64_t cgen_var_3;
5043 stream->read((uint64_t*)&cgen_var_3, 8);
5044 stream->handleMapping()->mapHandles_u64_VkShaderModule(&cgen_var_3,
5045 (VkShaderModule*)pShaderModule, 1);
5046 stream->unsetHandleMapping();
5047 VkResult vkCreateShaderModule_VkResult_return = (VkResult)0;
5048 stream->read(&vkCreateShaderModule_VkResult_return, sizeof(VkResult));
5049 ++encodeCount;
5050 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
5051 pool->freeAll();
5052 stream->clearPool();
5053 }
5054 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
5055 return vkCreateShaderModule_VkResult_return;
5056 }
5057
vkDestroyShaderModule(VkDevice device,VkShaderModule shaderModule,const VkAllocationCallbacks * pAllocator,uint32_t doLock)5058 void VkEncoder::vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule,
5059 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
5060 (void)doLock;
5061 bool queueSubmitWithCommandsEnabled =
5062 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
5063 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
5064 auto stream = mImpl->stream();
5065 auto pool = mImpl->pool();
5066 VkDevice local_device;
5067 VkShaderModule local_shaderModule;
5068 VkAllocationCallbacks* local_pAllocator;
5069 local_device = device;
5070 local_shaderModule = shaderModule;
5071 local_pAllocator = nullptr;
5072 if (pAllocator) {
5073 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5074 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
5075 (VkAllocationCallbacks*)(local_pAllocator));
5076 }
5077 local_pAllocator = nullptr;
5078 if (local_pAllocator) {
5079 transform_tohost_VkAllocationCallbacks(sResourceTracker,
5080 (VkAllocationCallbacks*)(local_pAllocator));
5081 }
5082 size_t count = 0;
5083 size_t* countPtr = &count;
5084 {
5085 uint64_t cgen_var_0;
5086 *countPtr += 1 * 8;
5087 uint64_t cgen_var_1;
5088 *countPtr += 1 * 8;
5089 // WARNING PTR CHECK
5090 *countPtr += 8;
5091 if (local_pAllocator) {
5092 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
5093 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
5094 }
5095 }
5096 uint32_t packetSize_vkDestroyShaderModule =
5097 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
5098 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyShaderModule);
5099 uint8_t* packetBeginPtr = streamPtr;
5100 uint8_t** streamPtrPtr = &streamPtr;
5101 uint32_t opcode_vkDestroyShaderModule = OP_vkDestroyShaderModule;
5102 uint32_t seqno;
5103 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
5104 memcpy(streamPtr, &opcode_vkDestroyShaderModule, sizeof(uint32_t));
5105 streamPtr += sizeof(uint32_t);
5106 memcpy(streamPtr, &packetSize_vkDestroyShaderModule, sizeof(uint32_t));
5107 streamPtr += sizeof(uint32_t);
5108 if (queueSubmitWithCommandsEnabled) {
5109 memcpy(streamPtr, &seqno, sizeof(uint32_t));
5110 streamPtr += sizeof(uint32_t);
5111 }
5112 uint64_t cgen_var_0;
5113 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
5114 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
5115 *streamPtrPtr += 1 * 8;
5116 uint64_t cgen_var_1;
5117 *&cgen_var_1 = get_host_u64_VkShaderModule((*&local_shaderModule));
5118 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
5119 *streamPtrPtr += 1 * 8;
5120 // WARNING PTR CHECK
5121 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
5122 memcpy((*streamPtrPtr), &cgen_var_2, 8);
5123 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
5124 *streamPtrPtr += 8;
5125 if (local_pAllocator) {
5126 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5127 (VkAllocationCallbacks*)(local_pAllocator),
5128 streamPtrPtr);
5129 }
5130 sResourceTracker->destroyMapping()->mapHandles_VkShaderModule((VkShaderModule*)&shaderModule);
5131 stream->flush();
5132 ++encodeCount;
5133 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
5134 pool->freeAll();
5135 stream->clearPool();
5136 }
5137 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
5138 }
5139
vkCreatePipelineCache(VkDevice device,const VkPipelineCacheCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineCache * pPipelineCache,uint32_t doLock)5140 VkResult VkEncoder::vkCreatePipelineCache(VkDevice device,
5141 const VkPipelineCacheCreateInfo* pCreateInfo,
5142 const VkAllocationCallbacks* pAllocator,
5143 VkPipelineCache* pPipelineCache, uint32_t doLock) {
5144 (void)doLock;
5145 bool queueSubmitWithCommandsEnabled =
5146 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
5147 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
5148 auto stream = mImpl->stream();
5149 auto pool = mImpl->pool();
5150 VkDevice local_device;
5151 VkPipelineCacheCreateInfo* local_pCreateInfo;
5152 VkAllocationCallbacks* local_pAllocator;
5153 local_device = device;
5154 local_pCreateInfo = nullptr;
5155 if (pCreateInfo) {
5156 local_pCreateInfo =
5157 (VkPipelineCacheCreateInfo*)pool->alloc(sizeof(const VkPipelineCacheCreateInfo));
5158 deepcopy_VkPipelineCacheCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
5159 (VkPipelineCacheCreateInfo*)(local_pCreateInfo));
5160 }
5161 local_pAllocator = nullptr;
5162 if (pAllocator) {
5163 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5164 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
5165 (VkAllocationCallbacks*)(local_pAllocator));
5166 }
5167 local_pAllocator = nullptr;
5168 if (local_pCreateInfo) {
5169 transform_tohost_VkPipelineCacheCreateInfo(sResourceTracker,
5170 (VkPipelineCacheCreateInfo*)(local_pCreateInfo));
5171 }
5172 if (local_pAllocator) {
5173 transform_tohost_VkAllocationCallbacks(sResourceTracker,
5174 (VkAllocationCallbacks*)(local_pAllocator));
5175 }
5176 size_t count = 0;
5177 size_t* countPtr = &count;
5178 {
5179 uint64_t cgen_var_0;
5180 *countPtr += 1 * 8;
5181 count_VkPipelineCacheCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
5182 (VkPipelineCacheCreateInfo*)(local_pCreateInfo), countPtr);
5183 // WARNING PTR CHECK
5184 *countPtr += 8;
5185 if (local_pAllocator) {
5186 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
5187 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
5188 }
5189 uint64_t cgen_var_1;
5190 *countPtr += 8;
5191 }
5192 uint32_t packetSize_vkCreatePipelineCache =
5193 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
5194 uint8_t* streamPtr = stream->reserve(packetSize_vkCreatePipelineCache);
5195 uint8_t* packetBeginPtr = streamPtr;
5196 uint8_t** streamPtrPtr = &streamPtr;
5197 uint32_t opcode_vkCreatePipelineCache = OP_vkCreatePipelineCache;
5198 uint32_t seqno;
5199 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
5200 memcpy(streamPtr, &opcode_vkCreatePipelineCache, sizeof(uint32_t));
5201 streamPtr += sizeof(uint32_t);
5202 memcpy(streamPtr, &packetSize_vkCreatePipelineCache, sizeof(uint32_t));
5203 streamPtr += sizeof(uint32_t);
5204 if (queueSubmitWithCommandsEnabled) {
5205 memcpy(streamPtr, &seqno, sizeof(uint32_t));
5206 streamPtr += sizeof(uint32_t);
5207 }
5208 uint64_t cgen_var_0;
5209 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
5210 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
5211 *streamPtrPtr += 1 * 8;
5212 reservedmarshal_VkPipelineCacheCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5213 (VkPipelineCacheCreateInfo*)(local_pCreateInfo),
5214 streamPtrPtr);
5215 // WARNING PTR CHECK
5216 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
5217 memcpy((*streamPtrPtr), &cgen_var_1, 8);
5218 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
5219 *streamPtrPtr += 8;
5220 if (local_pAllocator) {
5221 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5222 (VkAllocationCallbacks*)(local_pAllocator),
5223 streamPtrPtr);
5224 }
5225 /* is handle, possibly out */;
5226 uint64_t cgen_var_2;
5227 *&cgen_var_2 = (uint64_t)((*pPipelineCache));
5228 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
5229 *streamPtrPtr += 8;
5230 /* is handle, possibly out */;
5231 stream->setHandleMapping(sResourceTracker->createMapping());
5232 uint64_t cgen_var_3;
5233 stream->read((uint64_t*)&cgen_var_3, 8);
5234 stream->handleMapping()->mapHandles_u64_VkPipelineCache(&cgen_var_3,
5235 (VkPipelineCache*)pPipelineCache, 1);
5236 stream->unsetHandleMapping();
5237 VkResult vkCreatePipelineCache_VkResult_return = (VkResult)0;
5238 stream->read(&vkCreatePipelineCache_VkResult_return, sizeof(VkResult));
5239 ++encodeCount;
5240 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
5241 pool->freeAll();
5242 stream->clearPool();
5243 }
5244 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
5245 return vkCreatePipelineCache_VkResult_return;
5246 }
5247
vkDestroyPipelineCache(VkDevice device,VkPipelineCache pipelineCache,const VkAllocationCallbacks * pAllocator,uint32_t doLock)5248 void VkEncoder::vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache,
5249 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
5250 (void)doLock;
5251 bool queueSubmitWithCommandsEnabled =
5252 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
5253 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
5254 auto stream = mImpl->stream();
5255 auto pool = mImpl->pool();
5256 VkDevice local_device;
5257 VkPipelineCache local_pipelineCache;
5258 VkAllocationCallbacks* local_pAllocator;
5259 local_device = device;
5260 local_pipelineCache = pipelineCache;
5261 local_pAllocator = nullptr;
5262 if (pAllocator) {
5263 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5264 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
5265 (VkAllocationCallbacks*)(local_pAllocator));
5266 }
5267 local_pAllocator = nullptr;
5268 if (local_pAllocator) {
5269 transform_tohost_VkAllocationCallbacks(sResourceTracker,
5270 (VkAllocationCallbacks*)(local_pAllocator));
5271 }
5272 size_t count = 0;
5273 size_t* countPtr = &count;
5274 {
5275 uint64_t cgen_var_0;
5276 *countPtr += 1 * 8;
5277 uint64_t cgen_var_1;
5278 *countPtr += 1 * 8;
5279 // WARNING PTR CHECK
5280 *countPtr += 8;
5281 if (local_pAllocator) {
5282 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
5283 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
5284 }
5285 }
5286 uint32_t packetSize_vkDestroyPipelineCache =
5287 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
5288 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyPipelineCache);
5289 uint8_t* packetBeginPtr = streamPtr;
5290 uint8_t** streamPtrPtr = &streamPtr;
5291 uint32_t opcode_vkDestroyPipelineCache = OP_vkDestroyPipelineCache;
5292 uint32_t seqno;
5293 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
5294 memcpy(streamPtr, &opcode_vkDestroyPipelineCache, sizeof(uint32_t));
5295 streamPtr += sizeof(uint32_t);
5296 memcpy(streamPtr, &packetSize_vkDestroyPipelineCache, sizeof(uint32_t));
5297 streamPtr += sizeof(uint32_t);
5298 if (queueSubmitWithCommandsEnabled) {
5299 memcpy(streamPtr, &seqno, sizeof(uint32_t));
5300 streamPtr += sizeof(uint32_t);
5301 }
5302 uint64_t cgen_var_0;
5303 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
5304 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
5305 *streamPtrPtr += 1 * 8;
5306 uint64_t cgen_var_1;
5307 *&cgen_var_1 = get_host_u64_VkPipelineCache((*&local_pipelineCache));
5308 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
5309 *streamPtrPtr += 1 * 8;
5310 // WARNING PTR CHECK
5311 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
5312 memcpy((*streamPtrPtr), &cgen_var_2, 8);
5313 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
5314 *streamPtrPtr += 8;
5315 if (local_pAllocator) {
5316 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5317 (VkAllocationCallbacks*)(local_pAllocator),
5318 streamPtrPtr);
5319 }
5320 sResourceTracker->destroyMapping()->mapHandles_VkPipelineCache(
5321 (VkPipelineCache*)&pipelineCache);
5322 stream->flush();
5323 ++encodeCount;
5324 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
5325 pool->freeAll();
5326 stream->clearPool();
5327 }
5328 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
5329 }
5330
vkGetPipelineCacheData(VkDevice device,VkPipelineCache pipelineCache,size_t * pDataSize,void * pData,uint32_t doLock)5331 VkResult VkEncoder::vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache,
5332 size_t* pDataSize, void* pData, uint32_t doLock) {
5333 (void)doLock;
5334 bool queueSubmitWithCommandsEnabled =
5335 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
5336 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
5337 auto stream = mImpl->stream();
5338 auto pool = mImpl->pool();
5339 VkDevice local_device;
5340 VkPipelineCache local_pipelineCache;
5341 local_device = device;
5342 local_pipelineCache = pipelineCache;
5343 size_t count = 0;
5344 size_t* countPtr = &count;
5345 {
5346 uint64_t cgen_var_0;
5347 *countPtr += 1 * 8;
5348 uint64_t cgen_var_1;
5349 *countPtr += 1 * 8;
5350 // WARNING PTR CHECK
5351 *countPtr += 8;
5352 if (pDataSize) {
5353 *countPtr += 8;
5354 }
5355 // WARNING PTR CHECK
5356 *countPtr += 8;
5357 if (pData) {
5358 if (pDataSize) {
5359 *countPtr += (*(pDataSize)) * sizeof(uint8_t);
5360 }
5361 }
5362 }
5363 uint32_t packetSize_vkGetPipelineCacheData =
5364 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
5365 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPipelineCacheData);
5366 uint8_t* packetBeginPtr = streamPtr;
5367 uint8_t** streamPtrPtr = &streamPtr;
5368 uint32_t opcode_vkGetPipelineCacheData = OP_vkGetPipelineCacheData;
5369 uint32_t seqno;
5370 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
5371 memcpy(streamPtr, &opcode_vkGetPipelineCacheData, sizeof(uint32_t));
5372 streamPtr += sizeof(uint32_t);
5373 memcpy(streamPtr, &packetSize_vkGetPipelineCacheData, sizeof(uint32_t));
5374 streamPtr += sizeof(uint32_t);
5375 if (queueSubmitWithCommandsEnabled) {
5376 memcpy(streamPtr, &seqno, sizeof(uint32_t));
5377 streamPtr += sizeof(uint32_t);
5378 }
5379 uint64_t cgen_var_0;
5380 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
5381 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
5382 *streamPtrPtr += 1 * 8;
5383 uint64_t cgen_var_1;
5384 *&cgen_var_1 = get_host_u64_VkPipelineCache((*&local_pipelineCache));
5385 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
5386 *streamPtrPtr += 1 * 8;
5387 // WARNING PTR CHECK
5388 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pDataSize;
5389 memcpy((*streamPtrPtr), &cgen_var_2, 8);
5390 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
5391 *streamPtrPtr += 8;
5392 if (pDataSize) {
5393 uint64_t cgen_var_2_0 = (uint64_t)(*pDataSize);
5394 memcpy((*streamPtrPtr), &cgen_var_2_0, 8);
5395 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
5396 *streamPtrPtr += 8;
5397 }
5398 // WARNING PTR CHECK
5399 uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pData;
5400 memcpy((*streamPtrPtr), &cgen_var_3, 8);
5401 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
5402 *streamPtrPtr += 8;
5403 if (pData) {
5404 memcpy(*streamPtrPtr, (void*)pData, (*(pDataSize)) * sizeof(uint8_t));
5405 *streamPtrPtr += (*(pDataSize)) * sizeof(uint8_t);
5406 }
5407 // WARNING PTR CHECK
5408 size_t* check_pDataSize;
5409 check_pDataSize = (size_t*)(uintptr_t)stream->getBe64();
5410 if (pDataSize) {
5411 if (!(check_pDataSize)) {
5412 fprintf(stderr, "fatal: pDataSize inconsistent between guest and host\n");
5413 }
5414 (*pDataSize) = (size_t)stream->getBe64();
5415 }
5416 // WARNING PTR CHECK
5417 void* check_pData;
5418 check_pData = (void*)(uintptr_t)stream->getBe64();
5419 if (pData) {
5420 if (!(check_pData)) {
5421 fprintf(stderr, "fatal: pData inconsistent between guest and host\n");
5422 }
5423 stream->read((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
5424 }
5425 VkResult vkGetPipelineCacheData_VkResult_return = (VkResult)0;
5426 stream->read(&vkGetPipelineCacheData_VkResult_return, sizeof(VkResult));
5427 ++encodeCount;
5428 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
5429 pool->freeAll();
5430 stream->clearPool();
5431 }
5432 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
5433 return vkGetPipelineCacheData_VkResult_return;
5434 }
5435
vkMergePipelineCaches(VkDevice device,VkPipelineCache dstCache,uint32_t srcCacheCount,const VkPipelineCache * pSrcCaches,uint32_t doLock)5436 VkResult VkEncoder::vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache,
5437 uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches,
5438 uint32_t doLock) {
5439 (void)doLock;
5440 bool queueSubmitWithCommandsEnabled =
5441 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
5442 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
5443 auto stream = mImpl->stream();
5444 auto pool = mImpl->pool();
5445 VkDevice local_device;
5446 VkPipelineCache local_dstCache;
5447 uint32_t local_srcCacheCount;
5448 VkPipelineCache* local_pSrcCaches;
5449 local_device = device;
5450 local_dstCache = dstCache;
5451 local_srcCacheCount = srcCacheCount;
5452 // Avoiding deepcopy for pSrcCaches
5453 local_pSrcCaches = (VkPipelineCache*)pSrcCaches;
5454 size_t count = 0;
5455 size_t* countPtr = &count;
5456 {
5457 uint64_t cgen_var_0;
5458 *countPtr += 1 * 8;
5459 uint64_t cgen_var_1;
5460 *countPtr += 1 * 8;
5461 *countPtr += sizeof(uint32_t);
5462 if (((srcCacheCount))) {
5463 *countPtr += ((srcCacheCount)) * 8;
5464 }
5465 }
5466 uint32_t packetSize_vkMergePipelineCaches =
5467 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
5468 uint8_t* streamPtr = stream->reserve(packetSize_vkMergePipelineCaches);
5469 uint8_t* packetBeginPtr = streamPtr;
5470 uint8_t** streamPtrPtr = &streamPtr;
5471 uint32_t opcode_vkMergePipelineCaches = OP_vkMergePipelineCaches;
5472 uint32_t seqno;
5473 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
5474 memcpy(streamPtr, &opcode_vkMergePipelineCaches, sizeof(uint32_t));
5475 streamPtr += sizeof(uint32_t);
5476 memcpy(streamPtr, &packetSize_vkMergePipelineCaches, sizeof(uint32_t));
5477 streamPtr += sizeof(uint32_t);
5478 if (queueSubmitWithCommandsEnabled) {
5479 memcpy(streamPtr, &seqno, sizeof(uint32_t));
5480 streamPtr += sizeof(uint32_t);
5481 }
5482 uint64_t cgen_var_0;
5483 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
5484 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
5485 *streamPtrPtr += 1 * 8;
5486 uint64_t cgen_var_1;
5487 *&cgen_var_1 = get_host_u64_VkPipelineCache((*&local_dstCache));
5488 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
5489 *streamPtrPtr += 1 * 8;
5490 memcpy(*streamPtrPtr, (uint32_t*)&local_srcCacheCount, sizeof(uint32_t));
5491 *streamPtrPtr += sizeof(uint32_t);
5492 if (((srcCacheCount))) {
5493 uint8_t* cgen_var_2_ptr = (uint8_t*)(*streamPtrPtr);
5494 for (uint32_t k = 0; k < ((srcCacheCount)); ++k) {
5495 uint64_t tmpval = get_host_u64_VkPipelineCache(local_pSrcCaches[k]);
5496 memcpy(cgen_var_2_ptr + k * 8, &tmpval, sizeof(uint64_t));
5497 }
5498 *streamPtrPtr += 8 * ((srcCacheCount));
5499 }
5500 VkResult vkMergePipelineCaches_VkResult_return = (VkResult)0;
5501 stream->read(&vkMergePipelineCaches_VkResult_return, sizeof(VkResult));
5502 ++encodeCount;
5503 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
5504 pool->freeAll();
5505 stream->clearPool();
5506 }
5507 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
5508 return vkMergePipelineCaches_VkResult_return;
5509 }
5510
vkCreateGraphicsPipelines(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkGraphicsPipelineCreateInfo * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines,uint32_t doLock)5511 VkResult VkEncoder::vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache,
5512 uint32_t createInfoCount,
5513 const VkGraphicsPipelineCreateInfo* pCreateInfos,
5514 const VkAllocationCallbacks* pAllocator,
5515 VkPipeline* pPipelines, uint32_t doLock) {
5516 (void)doLock;
5517 bool queueSubmitWithCommandsEnabled =
5518 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
5519 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
5520 auto stream = mImpl->stream();
5521 auto pool = mImpl->pool();
5522 VkDevice local_device;
5523 VkPipelineCache local_pipelineCache;
5524 uint32_t local_createInfoCount;
5525 VkGraphicsPipelineCreateInfo* local_pCreateInfos;
5526 VkAllocationCallbacks* local_pAllocator;
5527 local_device = device;
5528 local_pipelineCache = pipelineCache;
5529 local_createInfoCount = createInfoCount;
5530 local_pCreateInfos = nullptr;
5531 if (pCreateInfos) {
5532 local_pCreateInfos = (VkGraphicsPipelineCreateInfo*)pool->alloc(
5533 ((createInfoCount)) * sizeof(const VkGraphicsPipelineCreateInfo));
5534 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
5535 deepcopy_VkGraphicsPipelineCreateInfo(
5536 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfos + i,
5537 (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i));
5538 }
5539 }
5540 local_pAllocator = nullptr;
5541 if (pAllocator) {
5542 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5543 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
5544 (VkAllocationCallbacks*)(local_pAllocator));
5545 }
5546 local_pAllocator = nullptr;
5547 if (local_pCreateInfos) {
5548 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
5549 transform_tohost_VkGraphicsPipelineCreateInfo(
5550 sResourceTracker, (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i));
5551 }
5552 }
5553 if (local_pAllocator) {
5554 transform_tohost_VkAllocationCallbacks(sResourceTracker,
5555 (VkAllocationCallbacks*)(local_pAllocator));
5556 }
5557 size_t count = 0;
5558 size_t* countPtr = &count;
5559 {
5560 uint64_t cgen_var_0;
5561 *countPtr += 1 * 8;
5562 uint64_t cgen_var_1;
5563 *countPtr += 1 * 8;
5564 *countPtr += sizeof(uint32_t);
5565 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
5566 count_VkGraphicsPipelineCreateInfo(
5567 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
5568 (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i), countPtr);
5569 }
5570 // WARNING PTR CHECK
5571 *countPtr += 8;
5572 if (local_pAllocator) {
5573 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
5574 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
5575 }
5576 if (((createInfoCount))) {
5577 *countPtr += ((createInfoCount)) * 8;
5578 }
5579 }
5580 uint32_t packetSize_vkCreateGraphicsPipelines =
5581 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
5582 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateGraphicsPipelines);
5583 uint8_t* packetBeginPtr = streamPtr;
5584 uint8_t** streamPtrPtr = &streamPtr;
5585 uint32_t opcode_vkCreateGraphicsPipelines = OP_vkCreateGraphicsPipelines;
5586 uint32_t seqno;
5587 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
5588 memcpy(streamPtr, &opcode_vkCreateGraphicsPipelines, sizeof(uint32_t));
5589 streamPtr += sizeof(uint32_t);
5590 memcpy(streamPtr, &packetSize_vkCreateGraphicsPipelines, sizeof(uint32_t));
5591 streamPtr += sizeof(uint32_t);
5592 if (queueSubmitWithCommandsEnabled) {
5593 memcpy(streamPtr, &seqno, sizeof(uint32_t));
5594 streamPtr += sizeof(uint32_t);
5595 }
5596 uint64_t cgen_var_0;
5597 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
5598 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
5599 *streamPtrPtr += 1 * 8;
5600 uint64_t cgen_var_1;
5601 *&cgen_var_1 = get_host_u64_VkPipelineCache((*&local_pipelineCache));
5602 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
5603 *streamPtrPtr += 1 * 8;
5604 memcpy(*streamPtrPtr, (uint32_t*)&local_createInfoCount, sizeof(uint32_t));
5605 *streamPtrPtr += sizeof(uint32_t);
5606 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
5607 reservedmarshal_VkGraphicsPipelineCreateInfo(
5608 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5609 (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i), streamPtrPtr);
5610 }
5611 // WARNING PTR CHECK
5612 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
5613 memcpy((*streamPtrPtr), &cgen_var_2, 8);
5614 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
5615 *streamPtrPtr += 8;
5616 if (local_pAllocator) {
5617 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5618 (VkAllocationCallbacks*)(local_pAllocator),
5619 streamPtrPtr);
5620 }
5621 /* is handle, possibly out */;
5622 if (((createInfoCount))) {
5623 uint8_t* cgen_var_3_ptr = (uint8_t*)(*streamPtrPtr);
5624 for (uint32_t k = 0; k < ((createInfoCount)); ++k) {
5625 uint64_t tmpval = (uint64_t)(pPipelines[k]);
5626 memcpy(cgen_var_3_ptr + k * 8, &tmpval, sizeof(uint64_t));
5627 }
5628 *streamPtrPtr += 8 * ((createInfoCount));
5629 }
5630 /* is handle, possibly out */;
5631 stream->setHandleMapping(sResourceTracker->createMapping());
5632 if (((createInfoCount))) {
5633 uint64_t* cgen_var_4;
5634 stream->alloc((void**)&cgen_var_4, ((createInfoCount)) * 8);
5635 stream->read((uint64_t*)cgen_var_4, ((createInfoCount)) * 8);
5636 stream->handleMapping()->mapHandles_u64_VkPipeline(cgen_var_4, (VkPipeline*)pPipelines,
5637 ((createInfoCount)));
5638 }
5639 stream->unsetHandleMapping();
5640 VkResult vkCreateGraphicsPipelines_VkResult_return = (VkResult)0;
5641 stream->read(&vkCreateGraphicsPipelines_VkResult_return, sizeof(VkResult));
5642 ++encodeCount;
5643 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
5644 pool->freeAll();
5645 stream->clearPool();
5646 }
5647 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
5648 return vkCreateGraphicsPipelines_VkResult_return;
5649 }
5650
vkCreateComputePipelines(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkComputePipelineCreateInfo * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines,uint32_t doLock)5651 VkResult VkEncoder::vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache,
5652 uint32_t createInfoCount,
5653 const VkComputePipelineCreateInfo* pCreateInfos,
5654 const VkAllocationCallbacks* pAllocator,
5655 VkPipeline* pPipelines, uint32_t doLock) {
5656 (void)doLock;
5657 bool queueSubmitWithCommandsEnabled =
5658 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
5659 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
5660 auto stream = mImpl->stream();
5661 auto pool = mImpl->pool();
5662 VkDevice local_device;
5663 VkPipelineCache local_pipelineCache;
5664 uint32_t local_createInfoCount;
5665 VkComputePipelineCreateInfo* local_pCreateInfos;
5666 VkAllocationCallbacks* local_pAllocator;
5667 local_device = device;
5668 local_pipelineCache = pipelineCache;
5669 local_createInfoCount = createInfoCount;
5670 local_pCreateInfos = nullptr;
5671 if (pCreateInfos) {
5672 local_pCreateInfos = (VkComputePipelineCreateInfo*)pool->alloc(
5673 ((createInfoCount)) * sizeof(const VkComputePipelineCreateInfo));
5674 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
5675 deepcopy_VkComputePipelineCreateInfo(
5676 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfos + i,
5677 (VkComputePipelineCreateInfo*)(local_pCreateInfos + i));
5678 }
5679 }
5680 local_pAllocator = nullptr;
5681 if (pAllocator) {
5682 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5683 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
5684 (VkAllocationCallbacks*)(local_pAllocator));
5685 }
5686 local_pAllocator = nullptr;
5687 if (local_pCreateInfos) {
5688 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
5689 transform_tohost_VkComputePipelineCreateInfo(
5690 sResourceTracker, (VkComputePipelineCreateInfo*)(local_pCreateInfos + i));
5691 }
5692 }
5693 if (local_pAllocator) {
5694 transform_tohost_VkAllocationCallbacks(sResourceTracker,
5695 (VkAllocationCallbacks*)(local_pAllocator));
5696 }
5697 size_t count = 0;
5698 size_t* countPtr = &count;
5699 {
5700 uint64_t cgen_var_0;
5701 *countPtr += 1 * 8;
5702 uint64_t cgen_var_1;
5703 *countPtr += 1 * 8;
5704 *countPtr += sizeof(uint32_t);
5705 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
5706 count_VkComputePipelineCreateInfo(
5707 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
5708 (VkComputePipelineCreateInfo*)(local_pCreateInfos + i), countPtr);
5709 }
5710 // WARNING PTR CHECK
5711 *countPtr += 8;
5712 if (local_pAllocator) {
5713 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
5714 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
5715 }
5716 if (((createInfoCount))) {
5717 *countPtr += ((createInfoCount)) * 8;
5718 }
5719 }
5720 uint32_t packetSize_vkCreateComputePipelines =
5721 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
5722 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateComputePipelines);
5723 uint8_t* packetBeginPtr = streamPtr;
5724 uint8_t** streamPtrPtr = &streamPtr;
5725 uint32_t opcode_vkCreateComputePipelines = OP_vkCreateComputePipelines;
5726 uint32_t seqno;
5727 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
5728 memcpy(streamPtr, &opcode_vkCreateComputePipelines, sizeof(uint32_t));
5729 streamPtr += sizeof(uint32_t);
5730 memcpy(streamPtr, &packetSize_vkCreateComputePipelines, sizeof(uint32_t));
5731 streamPtr += sizeof(uint32_t);
5732 if (queueSubmitWithCommandsEnabled) {
5733 memcpy(streamPtr, &seqno, sizeof(uint32_t));
5734 streamPtr += sizeof(uint32_t);
5735 }
5736 uint64_t cgen_var_0;
5737 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
5738 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
5739 *streamPtrPtr += 1 * 8;
5740 uint64_t cgen_var_1;
5741 *&cgen_var_1 = get_host_u64_VkPipelineCache((*&local_pipelineCache));
5742 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
5743 *streamPtrPtr += 1 * 8;
5744 memcpy(*streamPtrPtr, (uint32_t*)&local_createInfoCount, sizeof(uint32_t));
5745 *streamPtrPtr += sizeof(uint32_t);
5746 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i) {
5747 reservedmarshal_VkComputePipelineCreateInfo(
5748 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5749 (VkComputePipelineCreateInfo*)(local_pCreateInfos + i), streamPtrPtr);
5750 }
5751 // WARNING PTR CHECK
5752 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
5753 memcpy((*streamPtrPtr), &cgen_var_2, 8);
5754 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
5755 *streamPtrPtr += 8;
5756 if (local_pAllocator) {
5757 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5758 (VkAllocationCallbacks*)(local_pAllocator),
5759 streamPtrPtr);
5760 }
5761 /* is handle, possibly out */;
5762 if (((createInfoCount))) {
5763 uint8_t* cgen_var_3_ptr = (uint8_t*)(*streamPtrPtr);
5764 for (uint32_t k = 0; k < ((createInfoCount)); ++k) {
5765 uint64_t tmpval = (uint64_t)(pPipelines[k]);
5766 memcpy(cgen_var_3_ptr + k * 8, &tmpval, sizeof(uint64_t));
5767 }
5768 *streamPtrPtr += 8 * ((createInfoCount));
5769 }
5770 /* is handle, possibly out */;
5771 stream->setHandleMapping(sResourceTracker->createMapping());
5772 if (((createInfoCount))) {
5773 uint64_t* cgen_var_4;
5774 stream->alloc((void**)&cgen_var_4, ((createInfoCount)) * 8);
5775 stream->read((uint64_t*)cgen_var_4, ((createInfoCount)) * 8);
5776 stream->handleMapping()->mapHandles_u64_VkPipeline(cgen_var_4, (VkPipeline*)pPipelines,
5777 ((createInfoCount)));
5778 }
5779 stream->unsetHandleMapping();
5780 VkResult vkCreateComputePipelines_VkResult_return = (VkResult)0;
5781 stream->read(&vkCreateComputePipelines_VkResult_return, sizeof(VkResult));
5782 ++encodeCount;
5783 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
5784 pool->freeAll();
5785 stream->clearPool();
5786 }
5787 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
5788 return vkCreateComputePipelines_VkResult_return;
5789 }
5790
vkDestroyPipeline(VkDevice device,VkPipeline pipeline,const VkAllocationCallbacks * pAllocator,uint32_t doLock)5791 void VkEncoder::vkDestroyPipeline(VkDevice device, VkPipeline pipeline,
5792 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
5793 (void)doLock;
5794 bool queueSubmitWithCommandsEnabled =
5795 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
5796 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
5797 auto stream = mImpl->stream();
5798 auto pool = mImpl->pool();
5799 VkDevice local_device;
5800 VkPipeline local_pipeline;
5801 VkAllocationCallbacks* local_pAllocator;
5802 local_device = device;
5803 local_pipeline = pipeline;
5804 local_pAllocator = nullptr;
5805 if (pAllocator) {
5806 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5807 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
5808 (VkAllocationCallbacks*)(local_pAllocator));
5809 }
5810 local_pAllocator = nullptr;
5811 if (local_pAllocator) {
5812 transform_tohost_VkAllocationCallbacks(sResourceTracker,
5813 (VkAllocationCallbacks*)(local_pAllocator));
5814 }
5815 size_t count = 0;
5816 size_t* countPtr = &count;
5817 {
5818 uint64_t cgen_var_0;
5819 *countPtr += 1 * 8;
5820 uint64_t cgen_var_1;
5821 *countPtr += 1 * 8;
5822 // WARNING PTR CHECK
5823 *countPtr += 8;
5824 if (local_pAllocator) {
5825 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
5826 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
5827 }
5828 }
5829 uint32_t packetSize_vkDestroyPipeline =
5830 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
5831 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyPipeline);
5832 uint8_t* packetBeginPtr = streamPtr;
5833 uint8_t** streamPtrPtr = &streamPtr;
5834 uint32_t opcode_vkDestroyPipeline = OP_vkDestroyPipeline;
5835 uint32_t seqno;
5836 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
5837 memcpy(streamPtr, &opcode_vkDestroyPipeline, sizeof(uint32_t));
5838 streamPtr += sizeof(uint32_t);
5839 memcpy(streamPtr, &packetSize_vkDestroyPipeline, sizeof(uint32_t));
5840 streamPtr += sizeof(uint32_t);
5841 if (queueSubmitWithCommandsEnabled) {
5842 memcpy(streamPtr, &seqno, sizeof(uint32_t));
5843 streamPtr += sizeof(uint32_t);
5844 }
5845 uint64_t cgen_var_0;
5846 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
5847 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
5848 *streamPtrPtr += 1 * 8;
5849 uint64_t cgen_var_1;
5850 *&cgen_var_1 = get_host_u64_VkPipeline((*&local_pipeline));
5851 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
5852 *streamPtrPtr += 1 * 8;
5853 // WARNING PTR CHECK
5854 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
5855 memcpy((*streamPtrPtr), &cgen_var_2, 8);
5856 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
5857 *streamPtrPtr += 8;
5858 if (local_pAllocator) {
5859 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5860 (VkAllocationCallbacks*)(local_pAllocator),
5861 streamPtrPtr);
5862 }
5863 sResourceTracker->destroyMapping()->mapHandles_VkPipeline((VkPipeline*)&pipeline);
5864 stream->flush();
5865 ++encodeCount;
5866 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
5867 pool->freeAll();
5868 stream->clearPool();
5869 }
5870 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
5871 }
5872
vkCreatePipelineLayout(VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout,uint32_t doLock)5873 VkResult VkEncoder::vkCreatePipelineLayout(VkDevice device,
5874 const VkPipelineLayoutCreateInfo* pCreateInfo,
5875 const VkAllocationCallbacks* pAllocator,
5876 VkPipelineLayout* pPipelineLayout, uint32_t doLock) {
5877 (void)doLock;
5878 bool queueSubmitWithCommandsEnabled =
5879 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
5880 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
5881 auto stream = mImpl->stream();
5882 auto pool = mImpl->pool();
5883 VkDevice local_device;
5884 VkPipelineLayoutCreateInfo* local_pCreateInfo;
5885 VkAllocationCallbacks* local_pAllocator;
5886 local_device = device;
5887 local_pCreateInfo = nullptr;
5888 if (pCreateInfo) {
5889 local_pCreateInfo =
5890 (VkPipelineLayoutCreateInfo*)pool->alloc(sizeof(const VkPipelineLayoutCreateInfo));
5891 deepcopy_VkPipelineLayoutCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
5892 (VkPipelineLayoutCreateInfo*)(local_pCreateInfo));
5893 }
5894 local_pAllocator = nullptr;
5895 if (pAllocator) {
5896 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5897 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
5898 (VkAllocationCallbacks*)(local_pAllocator));
5899 }
5900 local_pAllocator = nullptr;
5901 if (local_pCreateInfo) {
5902 transform_tohost_VkPipelineLayoutCreateInfo(
5903 sResourceTracker, (VkPipelineLayoutCreateInfo*)(local_pCreateInfo));
5904 }
5905 if (local_pAllocator) {
5906 transform_tohost_VkAllocationCallbacks(sResourceTracker,
5907 (VkAllocationCallbacks*)(local_pAllocator));
5908 }
5909 size_t count = 0;
5910 size_t* countPtr = &count;
5911 {
5912 uint64_t cgen_var_0;
5913 *countPtr += 1 * 8;
5914 count_VkPipelineLayoutCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
5915 (VkPipelineLayoutCreateInfo*)(local_pCreateInfo),
5916 countPtr);
5917 // WARNING PTR CHECK
5918 *countPtr += 8;
5919 if (local_pAllocator) {
5920 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
5921 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
5922 }
5923 uint64_t cgen_var_1;
5924 *countPtr += 8;
5925 }
5926 uint32_t packetSize_vkCreatePipelineLayout =
5927 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
5928 uint8_t* streamPtr = stream->reserve(packetSize_vkCreatePipelineLayout);
5929 uint8_t* packetBeginPtr = streamPtr;
5930 uint8_t** streamPtrPtr = &streamPtr;
5931 uint32_t opcode_vkCreatePipelineLayout = OP_vkCreatePipelineLayout;
5932 uint32_t seqno;
5933 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
5934 memcpy(streamPtr, &opcode_vkCreatePipelineLayout, sizeof(uint32_t));
5935 streamPtr += sizeof(uint32_t);
5936 memcpy(streamPtr, &packetSize_vkCreatePipelineLayout, sizeof(uint32_t));
5937 streamPtr += sizeof(uint32_t);
5938 if (queueSubmitWithCommandsEnabled) {
5939 memcpy(streamPtr, &seqno, sizeof(uint32_t));
5940 streamPtr += sizeof(uint32_t);
5941 }
5942 uint64_t cgen_var_0;
5943 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
5944 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
5945 *streamPtrPtr += 1 * 8;
5946 reservedmarshal_VkPipelineLayoutCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5947 (VkPipelineLayoutCreateInfo*)(local_pCreateInfo),
5948 streamPtrPtr);
5949 // WARNING PTR CHECK
5950 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
5951 memcpy((*streamPtrPtr), &cgen_var_1, 8);
5952 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
5953 *streamPtrPtr += 8;
5954 if (local_pAllocator) {
5955 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
5956 (VkAllocationCallbacks*)(local_pAllocator),
5957 streamPtrPtr);
5958 }
5959 /* is handle, possibly out */;
5960 uint64_t cgen_var_2;
5961 *&cgen_var_2 = (uint64_t)((*pPipelineLayout));
5962 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
5963 *streamPtrPtr += 8;
5964 /* is handle, possibly out */;
5965 stream->setHandleMapping(sResourceTracker->createMapping());
5966 uint64_t cgen_var_3;
5967 stream->read((uint64_t*)&cgen_var_3, 8);
5968 stream->handleMapping()->mapHandles_u64_VkPipelineLayout(&cgen_var_3,
5969 (VkPipelineLayout*)pPipelineLayout, 1);
5970 stream->unsetHandleMapping();
5971 VkResult vkCreatePipelineLayout_VkResult_return = (VkResult)0;
5972 stream->read(&vkCreatePipelineLayout_VkResult_return, sizeof(VkResult));
5973 ++encodeCount;
5974 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
5975 pool->freeAll();
5976 stream->clearPool();
5977 }
5978 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
5979 return vkCreatePipelineLayout_VkResult_return;
5980 }
5981
vkDestroyPipelineLayout(VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator,uint32_t doLock)5982 void VkEncoder::vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout,
5983 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
5984 (void)doLock;
5985 bool queueSubmitWithCommandsEnabled =
5986 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
5987 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
5988 auto stream = mImpl->stream();
5989 auto pool = mImpl->pool();
5990 VkDevice local_device;
5991 VkPipelineLayout local_pipelineLayout;
5992 VkAllocationCallbacks* local_pAllocator;
5993 local_device = device;
5994 local_pipelineLayout = pipelineLayout;
5995 local_pAllocator = nullptr;
5996 if (pAllocator) {
5997 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5998 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
5999 (VkAllocationCallbacks*)(local_pAllocator));
6000 }
6001 local_pAllocator = nullptr;
6002 if (local_pAllocator) {
6003 transform_tohost_VkAllocationCallbacks(sResourceTracker,
6004 (VkAllocationCallbacks*)(local_pAllocator));
6005 }
6006 size_t count = 0;
6007 size_t* countPtr = &count;
6008 {
6009 uint64_t cgen_var_0;
6010 *countPtr += 1 * 8;
6011 uint64_t cgen_var_1;
6012 *countPtr += 1 * 8;
6013 // WARNING PTR CHECK
6014 *countPtr += 8;
6015 if (local_pAllocator) {
6016 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6017 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
6018 }
6019 }
6020 uint32_t packetSize_vkDestroyPipelineLayout =
6021 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
6022 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyPipelineLayout);
6023 uint8_t* packetBeginPtr = streamPtr;
6024 uint8_t** streamPtrPtr = &streamPtr;
6025 uint32_t opcode_vkDestroyPipelineLayout = OP_vkDestroyPipelineLayout;
6026 uint32_t seqno;
6027 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
6028 memcpy(streamPtr, &opcode_vkDestroyPipelineLayout, sizeof(uint32_t));
6029 streamPtr += sizeof(uint32_t);
6030 memcpy(streamPtr, &packetSize_vkDestroyPipelineLayout, sizeof(uint32_t));
6031 streamPtr += sizeof(uint32_t);
6032 if (queueSubmitWithCommandsEnabled) {
6033 memcpy(streamPtr, &seqno, sizeof(uint32_t));
6034 streamPtr += sizeof(uint32_t);
6035 }
6036 uint64_t cgen_var_0;
6037 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
6038 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
6039 *streamPtrPtr += 1 * 8;
6040 uint64_t cgen_var_1;
6041 *&cgen_var_1 = get_host_u64_VkPipelineLayout((*&local_pipelineLayout));
6042 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
6043 *streamPtrPtr += 1 * 8;
6044 // WARNING PTR CHECK
6045 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
6046 memcpy((*streamPtrPtr), &cgen_var_2, 8);
6047 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
6048 *streamPtrPtr += 8;
6049 if (local_pAllocator) {
6050 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6051 (VkAllocationCallbacks*)(local_pAllocator),
6052 streamPtrPtr);
6053 }
6054 sResourceTracker->destroyMapping()->mapHandles_VkPipelineLayout(
6055 (VkPipelineLayout*)&pipelineLayout);
6056 stream->flush();
6057 ++encodeCount;
6058 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
6059 pool->freeAll();
6060 stream->clearPool();
6061 }
6062 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
6063 }
6064
vkCreateSampler(VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler,uint32_t doLock)6065 VkResult VkEncoder::vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo,
6066 const VkAllocationCallbacks* pAllocator, VkSampler* pSampler,
6067 uint32_t doLock) {
6068 (void)doLock;
6069 bool queueSubmitWithCommandsEnabled =
6070 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
6071 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
6072 auto stream = mImpl->stream();
6073 auto pool = mImpl->pool();
6074 VkDevice local_device;
6075 VkSamplerCreateInfo* local_pCreateInfo;
6076 VkAllocationCallbacks* local_pAllocator;
6077 local_device = device;
6078 local_pCreateInfo = nullptr;
6079 if (pCreateInfo) {
6080 local_pCreateInfo = (VkSamplerCreateInfo*)pool->alloc(sizeof(const VkSamplerCreateInfo));
6081 deepcopy_VkSamplerCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
6082 (VkSamplerCreateInfo*)(local_pCreateInfo));
6083 }
6084 local_pAllocator = nullptr;
6085 if (pAllocator) {
6086 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6087 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
6088 (VkAllocationCallbacks*)(local_pAllocator));
6089 }
6090 local_pAllocator = nullptr;
6091 if (local_pCreateInfo) {
6092 transform_tohost_VkSamplerCreateInfo(sResourceTracker,
6093 (VkSamplerCreateInfo*)(local_pCreateInfo));
6094 }
6095 if (local_pAllocator) {
6096 transform_tohost_VkAllocationCallbacks(sResourceTracker,
6097 (VkAllocationCallbacks*)(local_pAllocator));
6098 }
6099 size_t count = 0;
6100 size_t* countPtr = &count;
6101 {
6102 uint64_t cgen_var_0;
6103 *countPtr += 1 * 8;
6104 count_VkSamplerCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6105 (VkSamplerCreateInfo*)(local_pCreateInfo), countPtr);
6106 // WARNING PTR CHECK
6107 *countPtr += 8;
6108 if (local_pAllocator) {
6109 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6110 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
6111 }
6112 uint64_t cgen_var_1;
6113 *countPtr += 8;
6114 }
6115 uint32_t packetSize_vkCreateSampler = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
6116 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateSampler);
6117 uint8_t* packetBeginPtr = streamPtr;
6118 uint8_t** streamPtrPtr = &streamPtr;
6119 uint32_t opcode_vkCreateSampler = OP_vkCreateSampler;
6120 uint32_t seqno;
6121 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
6122 memcpy(streamPtr, &opcode_vkCreateSampler, sizeof(uint32_t));
6123 streamPtr += sizeof(uint32_t);
6124 memcpy(streamPtr, &packetSize_vkCreateSampler, sizeof(uint32_t));
6125 streamPtr += sizeof(uint32_t);
6126 if (queueSubmitWithCommandsEnabled) {
6127 memcpy(streamPtr, &seqno, sizeof(uint32_t));
6128 streamPtr += sizeof(uint32_t);
6129 }
6130 uint64_t cgen_var_0;
6131 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
6132 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
6133 *streamPtrPtr += 1 * 8;
6134 reservedmarshal_VkSamplerCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6135 (VkSamplerCreateInfo*)(local_pCreateInfo), streamPtrPtr);
6136 // WARNING PTR CHECK
6137 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
6138 memcpy((*streamPtrPtr), &cgen_var_1, 8);
6139 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
6140 *streamPtrPtr += 8;
6141 if (local_pAllocator) {
6142 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6143 (VkAllocationCallbacks*)(local_pAllocator),
6144 streamPtrPtr);
6145 }
6146 /* is handle, possibly out */;
6147 uint64_t cgen_var_2;
6148 *&cgen_var_2 = (uint64_t)((*pSampler));
6149 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
6150 *streamPtrPtr += 8;
6151 /* is handle, possibly out */;
6152 stream->setHandleMapping(sResourceTracker->createMapping());
6153 uint64_t cgen_var_3;
6154 stream->read((uint64_t*)&cgen_var_3, 8);
6155 stream->handleMapping()->mapHandles_u64_VkSampler(&cgen_var_3, (VkSampler*)pSampler, 1);
6156 stream->unsetHandleMapping();
6157 VkResult vkCreateSampler_VkResult_return = (VkResult)0;
6158 stream->read(&vkCreateSampler_VkResult_return, sizeof(VkResult));
6159 ++encodeCount;
6160 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
6161 pool->freeAll();
6162 stream->clearPool();
6163 }
6164 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
6165 return vkCreateSampler_VkResult_return;
6166 }
6167
vkDestroySampler(VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator,uint32_t doLock)6168 void VkEncoder::vkDestroySampler(VkDevice device, VkSampler sampler,
6169 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
6170 (void)doLock;
6171 bool queueSubmitWithCommandsEnabled =
6172 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
6173 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
6174 auto stream = mImpl->stream();
6175 auto pool = mImpl->pool();
6176 VkDevice local_device;
6177 VkSampler local_sampler;
6178 VkAllocationCallbacks* local_pAllocator;
6179 local_device = device;
6180 local_sampler = sampler;
6181 local_pAllocator = nullptr;
6182 if (pAllocator) {
6183 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6184 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
6185 (VkAllocationCallbacks*)(local_pAllocator));
6186 }
6187 local_pAllocator = nullptr;
6188 if (local_pAllocator) {
6189 transform_tohost_VkAllocationCallbacks(sResourceTracker,
6190 (VkAllocationCallbacks*)(local_pAllocator));
6191 }
6192 size_t count = 0;
6193 size_t* countPtr = &count;
6194 {
6195 uint64_t cgen_var_0;
6196 *countPtr += 1 * 8;
6197 uint64_t cgen_var_1;
6198 *countPtr += 1 * 8;
6199 // WARNING PTR CHECK
6200 *countPtr += 8;
6201 if (local_pAllocator) {
6202 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6203 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
6204 }
6205 }
6206 uint32_t packetSize_vkDestroySampler = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
6207 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroySampler);
6208 uint8_t* packetBeginPtr = streamPtr;
6209 uint8_t** streamPtrPtr = &streamPtr;
6210 uint32_t opcode_vkDestroySampler = OP_vkDestroySampler;
6211 uint32_t seqno;
6212 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
6213 memcpy(streamPtr, &opcode_vkDestroySampler, sizeof(uint32_t));
6214 streamPtr += sizeof(uint32_t);
6215 memcpy(streamPtr, &packetSize_vkDestroySampler, sizeof(uint32_t));
6216 streamPtr += sizeof(uint32_t);
6217 if (queueSubmitWithCommandsEnabled) {
6218 memcpy(streamPtr, &seqno, sizeof(uint32_t));
6219 streamPtr += sizeof(uint32_t);
6220 }
6221 uint64_t cgen_var_0;
6222 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
6223 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
6224 *streamPtrPtr += 1 * 8;
6225 uint64_t cgen_var_1;
6226 *&cgen_var_1 = get_host_u64_VkSampler((*&local_sampler));
6227 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
6228 *streamPtrPtr += 1 * 8;
6229 // WARNING PTR CHECK
6230 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
6231 memcpy((*streamPtrPtr), &cgen_var_2, 8);
6232 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
6233 *streamPtrPtr += 8;
6234 if (local_pAllocator) {
6235 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6236 (VkAllocationCallbacks*)(local_pAllocator),
6237 streamPtrPtr);
6238 }
6239 sResourceTracker->destroyMapping()->mapHandles_VkSampler((VkSampler*)&sampler);
6240 stream->flush();
6241 ++encodeCount;
6242 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
6243 pool->freeAll();
6244 stream->clearPool();
6245 }
6246 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
6247 }
6248
vkCreateDescriptorSetLayout(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorSetLayout * pSetLayout,uint32_t doLock)6249 VkResult VkEncoder::vkCreateDescriptorSetLayout(VkDevice device,
6250 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
6251 const VkAllocationCallbacks* pAllocator,
6252 VkDescriptorSetLayout* pSetLayout,
6253 uint32_t doLock) {
6254 (void)doLock;
6255 bool queueSubmitWithCommandsEnabled =
6256 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
6257 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
6258 auto stream = mImpl->stream();
6259 auto pool = mImpl->pool();
6260 VkDevice local_device;
6261 VkDescriptorSetLayoutCreateInfo* local_pCreateInfo;
6262 VkAllocationCallbacks* local_pAllocator;
6263 local_device = device;
6264 local_pCreateInfo = nullptr;
6265 if (pCreateInfo) {
6266 local_pCreateInfo = (VkDescriptorSetLayoutCreateInfo*)pool->alloc(
6267 sizeof(const VkDescriptorSetLayoutCreateInfo));
6268 deepcopy_VkDescriptorSetLayoutCreateInfo(
6269 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
6270 (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
6271 }
6272 local_pAllocator = nullptr;
6273 if (pAllocator) {
6274 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6275 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
6276 (VkAllocationCallbacks*)(local_pAllocator));
6277 }
6278 local_pAllocator = nullptr;
6279 if (local_pCreateInfo) {
6280 transform_tohost_VkDescriptorSetLayoutCreateInfo(
6281 sResourceTracker, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
6282 }
6283 if (local_pAllocator) {
6284 transform_tohost_VkAllocationCallbacks(sResourceTracker,
6285 (VkAllocationCallbacks*)(local_pAllocator));
6286 }
6287 size_t count = 0;
6288 size_t* countPtr = &count;
6289 {
6290 uint64_t cgen_var_0;
6291 *countPtr += 1 * 8;
6292 count_VkDescriptorSetLayoutCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6293 (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo),
6294 countPtr);
6295 // WARNING PTR CHECK
6296 *countPtr += 8;
6297 if (local_pAllocator) {
6298 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6299 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
6300 }
6301 uint64_t cgen_var_1;
6302 *countPtr += 8;
6303 }
6304 uint32_t packetSize_vkCreateDescriptorSetLayout =
6305 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
6306 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateDescriptorSetLayout);
6307 uint8_t* packetBeginPtr = streamPtr;
6308 uint8_t** streamPtrPtr = &streamPtr;
6309 uint32_t opcode_vkCreateDescriptorSetLayout = OP_vkCreateDescriptorSetLayout;
6310 uint32_t seqno;
6311 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
6312 memcpy(streamPtr, &opcode_vkCreateDescriptorSetLayout, sizeof(uint32_t));
6313 streamPtr += sizeof(uint32_t);
6314 memcpy(streamPtr, &packetSize_vkCreateDescriptorSetLayout, sizeof(uint32_t));
6315 streamPtr += sizeof(uint32_t);
6316 if (queueSubmitWithCommandsEnabled) {
6317 memcpy(streamPtr, &seqno, sizeof(uint32_t));
6318 streamPtr += sizeof(uint32_t);
6319 }
6320 uint64_t cgen_var_0;
6321 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
6322 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
6323 *streamPtrPtr += 1 * 8;
6324 reservedmarshal_VkDescriptorSetLayoutCreateInfo(
6325 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo),
6326 streamPtrPtr);
6327 // WARNING PTR CHECK
6328 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
6329 memcpy((*streamPtrPtr), &cgen_var_1, 8);
6330 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
6331 *streamPtrPtr += 8;
6332 if (local_pAllocator) {
6333 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6334 (VkAllocationCallbacks*)(local_pAllocator),
6335 streamPtrPtr);
6336 }
6337 /* is handle, possibly out */;
6338 uint64_t cgen_var_2;
6339 *&cgen_var_2 = (uint64_t)((*pSetLayout));
6340 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
6341 *streamPtrPtr += 8;
6342 /* is handle, possibly out */;
6343 stream->setHandleMapping(sResourceTracker->createMapping());
6344 uint64_t cgen_var_3;
6345 stream->read((uint64_t*)&cgen_var_3, 8);
6346 stream->handleMapping()->mapHandles_u64_VkDescriptorSetLayout(
6347 &cgen_var_3, (VkDescriptorSetLayout*)pSetLayout, 1);
6348 stream->unsetHandleMapping();
6349 VkResult vkCreateDescriptorSetLayout_VkResult_return = (VkResult)0;
6350 stream->read(&vkCreateDescriptorSetLayout_VkResult_return, sizeof(VkResult));
6351 ++encodeCount;
6352 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
6353 pool->freeAll();
6354 stream->clearPool();
6355 }
6356 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
6357 return vkCreateDescriptorSetLayout_VkResult_return;
6358 }
6359
vkDestroyDescriptorSetLayout(VkDevice device,VkDescriptorSetLayout descriptorSetLayout,const VkAllocationCallbacks * pAllocator,uint32_t doLock)6360 void VkEncoder::vkDestroyDescriptorSetLayout(VkDevice device,
6361 VkDescriptorSetLayout descriptorSetLayout,
6362 const VkAllocationCallbacks* pAllocator,
6363 uint32_t doLock) {
6364 (void)doLock;
6365 bool queueSubmitWithCommandsEnabled =
6366 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
6367 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
6368 auto stream = mImpl->stream();
6369 auto pool = mImpl->pool();
6370 VkDevice local_device;
6371 VkDescriptorSetLayout local_descriptorSetLayout;
6372 VkAllocationCallbacks* local_pAllocator;
6373 local_device = device;
6374 local_descriptorSetLayout = descriptorSetLayout;
6375 local_pAllocator = nullptr;
6376 if (pAllocator) {
6377 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6378 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
6379 (VkAllocationCallbacks*)(local_pAllocator));
6380 }
6381 local_pAllocator = nullptr;
6382 if (local_pAllocator) {
6383 transform_tohost_VkAllocationCallbacks(sResourceTracker,
6384 (VkAllocationCallbacks*)(local_pAllocator));
6385 }
6386 size_t count = 0;
6387 size_t* countPtr = &count;
6388 {
6389 uint64_t cgen_var_0;
6390 *countPtr += 1 * 8;
6391 uint64_t cgen_var_1;
6392 *countPtr += 1 * 8;
6393 // WARNING PTR CHECK
6394 *countPtr += 8;
6395 if (local_pAllocator) {
6396 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6397 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
6398 }
6399 }
6400 uint32_t packetSize_vkDestroyDescriptorSetLayout =
6401 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
6402 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyDescriptorSetLayout);
6403 uint8_t* packetBeginPtr = streamPtr;
6404 uint8_t** streamPtrPtr = &streamPtr;
6405 uint32_t opcode_vkDestroyDescriptorSetLayout = OP_vkDestroyDescriptorSetLayout;
6406 uint32_t seqno;
6407 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
6408 memcpy(streamPtr, &opcode_vkDestroyDescriptorSetLayout, sizeof(uint32_t));
6409 streamPtr += sizeof(uint32_t);
6410 memcpy(streamPtr, &packetSize_vkDestroyDescriptorSetLayout, sizeof(uint32_t));
6411 streamPtr += sizeof(uint32_t);
6412 if (queueSubmitWithCommandsEnabled) {
6413 memcpy(streamPtr, &seqno, sizeof(uint32_t));
6414 streamPtr += sizeof(uint32_t);
6415 }
6416 uint64_t cgen_var_0;
6417 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
6418 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
6419 *streamPtrPtr += 1 * 8;
6420 uint64_t cgen_var_1;
6421 *&cgen_var_1 = get_host_u64_VkDescriptorSetLayout((*&local_descriptorSetLayout));
6422 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
6423 *streamPtrPtr += 1 * 8;
6424 // WARNING PTR CHECK
6425 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
6426 memcpy((*streamPtrPtr), &cgen_var_2, 8);
6427 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
6428 *streamPtrPtr += 8;
6429 if (local_pAllocator) {
6430 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6431 (VkAllocationCallbacks*)(local_pAllocator),
6432 streamPtrPtr);
6433 }
6434 sResourceTracker->destroyMapping()->mapHandles_VkDescriptorSetLayout(
6435 (VkDescriptorSetLayout*)&descriptorSetLayout);
6436 stream->flush();
6437 ++encodeCount;
6438 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
6439 pool->freeAll();
6440 stream->clearPool();
6441 }
6442 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
6443 }
6444
vkCreateDescriptorPool(VkDevice device,const VkDescriptorPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorPool * pDescriptorPool,uint32_t doLock)6445 VkResult VkEncoder::vkCreateDescriptorPool(VkDevice device,
6446 const VkDescriptorPoolCreateInfo* pCreateInfo,
6447 const VkAllocationCallbacks* pAllocator,
6448 VkDescriptorPool* pDescriptorPool, uint32_t doLock) {
6449 (void)doLock;
6450 bool queueSubmitWithCommandsEnabled =
6451 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
6452 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
6453 auto stream = mImpl->stream();
6454 auto pool = mImpl->pool();
6455 VkDevice local_device;
6456 VkDescriptorPoolCreateInfo* local_pCreateInfo;
6457 VkAllocationCallbacks* local_pAllocator;
6458 local_device = device;
6459 local_pCreateInfo = nullptr;
6460 if (pCreateInfo) {
6461 local_pCreateInfo =
6462 (VkDescriptorPoolCreateInfo*)pool->alloc(sizeof(const VkDescriptorPoolCreateInfo));
6463 deepcopy_VkDescriptorPoolCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
6464 (VkDescriptorPoolCreateInfo*)(local_pCreateInfo));
6465 }
6466 local_pAllocator = nullptr;
6467 if (pAllocator) {
6468 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6469 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
6470 (VkAllocationCallbacks*)(local_pAllocator));
6471 }
6472 local_pAllocator = nullptr;
6473 if (local_pCreateInfo) {
6474 transform_tohost_VkDescriptorPoolCreateInfo(
6475 sResourceTracker, (VkDescriptorPoolCreateInfo*)(local_pCreateInfo));
6476 }
6477 if (local_pAllocator) {
6478 transform_tohost_VkAllocationCallbacks(sResourceTracker,
6479 (VkAllocationCallbacks*)(local_pAllocator));
6480 }
6481 size_t count = 0;
6482 size_t* countPtr = &count;
6483 {
6484 uint64_t cgen_var_0;
6485 *countPtr += 1 * 8;
6486 count_VkDescriptorPoolCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6487 (VkDescriptorPoolCreateInfo*)(local_pCreateInfo),
6488 countPtr);
6489 // WARNING PTR CHECK
6490 *countPtr += 8;
6491 if (local_pAllocator) {
6492 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6493 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
6494 }
6495 uint64_t cgen_var_1;
6496 *countPtr += 8;
6497 }
6498 uint32_t packetSize_vkCreateDescriptorPool =
6499 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
6500 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateDescriptorPool);
6501 uint8_t* packetBeginPtr = streamPtr;
6502 uint8_t** streamPtrPtr = &streamPtr;
6503 uint32_t opcode_vkCreateDescriptorPool = OP_vkCreateDescriptorPool;
6504 uint32_t seqno;
6505 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
6506 memcpy(streamPtr, &opcode_vkCreateDescriptorPool, sizeof(uint32_t));
6507 streamPtr += sizeof(uint32_t);
6508 memcpy(streamPtr, &packetSize_vkCreateDescriptorPool, sizeof(uint32_t));
6509 streamPtr += sizeof(uint32_t);
6510 if (queueSubmitWithCommandsEnabled) {
6511 memcpy(streamPtr, &seqno, sizeof(uint32_t));
6512 streamPtr += sizeof(uint32_t);
6513 }
6514 uint64_t cgen_var_0;
6515 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
6516 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
6517 *streamPtrPtr += 1 * 8;
6518 reservedmarshal_VkDescriptorPoolCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6519 (VkDescriptorPoolCreateInfo*)(local_pCreateInfo),
6520 streamPtrPtr);
6521 // WARNING PTR CHECK
6522 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
6523 memcpy((*streamPtrPtr), &cgen_var_1, 8);
6524 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
6525 *streamPtrPtr += 8;
6526 if (local_pAllocator) {
6527 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6528 (VkAllocationCallbacks*)(local_pAllocator),
6529 streamPtrPtr);
6530 }
6531 /* is handle, possibly out */;
6532 uint64_t cgen_var_2;
6533 *&cgen_var_2 = (uint64_t)((*pDescriptorPool));
6534 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
6535 *streamPtrPtr += 8;
6536 /* is handle, possibly out */;
6537 stream->setHandleMapping(sResourceTracker->createMapping());
6538 uint64_t cgen_var_3;
6539 stream->read((uint64_t*)&cgen_var_3, 8);
6540 stream->handleMapping()->mapHandles_u64_VkDescriptorPool(&cgen_var_3,
6541 (VkDescriptorPool*)pDescriptorPool, 1);
6542 stream->unsetHandleMapping();
6543 VkResult vkCreateDescriptorPool_VkResult_return = (VkResult)0;
6544 stream->read(&vkCreateDescriptorPool_VkResult_return, sizeof(VkResult));
6545 ++encodeCount;
6546 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
6547 pool->freeAll();
6548 stream->clearPool();
6549 }
6550 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
6551 return vkCreateDescriptorPool_VkResult_return;
6552 }
6553
vkDestroyDescriptorPool(VkDevice device,VkDescriptorPool descriptorPool,const VkAllocationCallbacks * pAllocator,uint32_t doLock)6554 void VkEncoder::vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool,
6555 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
6556 (void)doLock;
6557 bool queueSubmitWithCommandsEnabled =
6558 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
6559 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
6560 auto stream = mImpl->stream();
6561 auto pool = mImpl->pool();
6562 VkDevice local_device;
6563 VkDescriptorPool local_descriptorPool;
6564 VkAllocationCallbacks* local_pAllocator;
6565 local_device = device;
6566 local_descriptorPool = descriptorPool;
6567 local_pAllocator = nullptr;
6568 if (pAllocator) {
6569 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6570 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
6571 (VkAllocationCallbacks*)(local_pAllocator));
6572 }
6573 local_pAllocator = nullptr;
6574 if (local_pAllocator) {
6575 transform_tohost_VkAllocationCallbacks(sResourceTracker,
6576 (VkAllocationCallbacks*)(local_pAllocator));
6577 }
6578 size_t count = 0;
6579 size_t* countPtr = &count;
6580 {
6581 uint64_t cgen_var_0;
6582 *countPtr += 1 * 8;
6583 uint64_t cgen_var_1;
6584 *countPtr += 1 * 8;
6585 // WARNING PTR CHECK
6586 *countPtr += 8;
6587 if (local_pAllocator) {
6588 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6589 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
6590 }
6591 }
6592 uint32_t packetSize_vkDestroyDescriptorPool =
6593 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
6594 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyDescriptorPool);
6595 uint8_t* packetBeginPtr = streamPtr;
6596 uint8_t** streamPtrPtr = &streamPtr;
6597 uint32_t opcode_vkDestroyDescriptorPool = OP_vkDestroyDescriptorPool;
6598 uint32_t seqno;
6599 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
6600 memcpy(streamPtr, &opcode_vkDestroyDescriptorPool, sizeof(uint32_t));
6601 streamPtr += sizeof(uint32_t);
6602 memcpy(streamPtr, &packetSize_vkDestroyDescriptorPool, sizeof(uint32_t));
6603 streamPtr += sizeof(uint32_t);
6604 if (queueSubmitWithCommandsEnabled) {
6605 memcpy(streamPtr, &seqno, sizeof(uint32_t));
6606 streamPtr += sizeof(uint32_t);
6607 }
6608 uint64_t cgen_var_0;
6609 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
6610 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
6611 *streamPtrPtr += 1 * 8;
6612 uint64_t cgen_var_1;
6613 *&cgen_var_1 = get_host_u64_VkDescriptorPool((*&local_descriptorPool));
6614 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
6615 *streamPtrPtr += 1 * 8;
6616 // WARNING PTR CHECK
6617 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
6618 memcpy((*streamPtrPtr), &cgen_var_2, 8);
6619 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
6620 *streamPtrPtr += 8;
6621 if (local_pAllocator) {
6622 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6623 (VkAllocationCallbacks*)(local_pAllocator),
6624 streamPtrPtr);
6625 }
6626 sResourceTracker->destroyMapping()->mapHandles_VkDescriptorPool(
6627 (VkDescriptorPool*)&descriptorPool);
6628 stream->flush();
6629 ++encodeCount;
6630 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
6631 pool->freeAll();
6632 stream->clearPool();
6633 }
6634 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
6635 }
6636
vkResetDescriptorPool(VkDevice device,VkDescriptorPool descriptorPool,VkDescriptorPoolResetFlags flags,uint32_t doLock)6637 VkResult VkEncoder::vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool,
6638 VkDescriptorPoolResetFlags flags, uint32_t doLock) {
6639 (void)doLock;
6640 bool queueSubmitWithCommandsEnabled =
6641 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
6642 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
6643 auto stream = mImpl->stream();
6644 auto pool = mImpl->pool();
6645 VkDevice local_device;
6646 VkDescriptorPool local_descriptorPool;
6647 VkDescriptorPoolResetFlags local_flags;
6648 local_device = device;
6649 local_descriptorPool = descriptorPool;
6650 local_flags = flags;
6651 size_t count = 0;
6652 size_t* countPtr = &count;
6653 {
6654 uint64_t cgen_var_0;
6655 *countPtr += 1 * 8;
6656 uint64_t cgen_var_1;
6657 *countPtr += 1 * 8;
6658 *countPtr += sizeof(VkDescriptorPoolResetFlags);
6659 }
6660 uint32_t packetSize_vkResetDescriptorPool =
6661 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
6662 uint8_t* streamPtr = stream->reserve(packetSize_vkResetDescriptorPool);
6663 uint8_t* packetBeginPtr = streamPtr;
6664 uint8_t** streamPtrPtr = &streamPtr;
6665 uint32_t opcode_vkResetDescriptorPool = OP_vkResetDescriptorPool;
6666 uint32_t seqno;
6667 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
6668 memcpy(streamPtr, &opcode_vkResetDescriptorPool, sizeof(uint32_t));
6669 streamPtr += sizeof(uint32_t);
6670 memcpy(streamPtr, &packetSize_vkResetDescriptorPool, sizeof(uint32_t));
6671 streamPtr += sizeof(uint32_t);
6672 if (queueSubmitWithCommandsEnabled) {
6673 memcpy(streamPtr, &seqno, sizeof(uint32_t));
6674 streamPtr += sizeof(uint32_t);
6675 }
6676 uint64_t cgen_var_0;
6677 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
6678 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
6679 *streamPtrPtr += 1 * 8;
6680 uint64_t cgen_var_1;
6681 *&cgen_var_1 = get_host_u64_VkDescriptorPool((*&local_descriptorPool));
6682 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
6683 *streamPtrPtr += 1 * 8;
6684 memcpy(*streamPtrPtr, (VkDescriptorPoolResetFlags*)&local_flags,
6685 sizeof(VkDescriptorPoolResetFlags));
6686 *streamPtrPtr += sizeof(VkDescriptorPoolResetFlags);
6687 VkResult vkResetDescriptorPool_VkResult_return = (VkResult)0;
6688 stream->read(&vkResetDescriptorPool_VkResult_return, sizeof(VkResult));
6689 ++encodeCount;
6690 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
6691 pool->freeAll();
6692 stream->clearPool();
6693 }
6694 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
6695 return vkResetDescriptorPool_VkResult_return;
6696 }
6697
vkAllocateDescriptorSets(VkDevice device,const VkDescriptorSetAllocateInfo * pAllocateInfo,VkDescriptorSet * pDescriptorSets,uint32_t doLock)6698 VkResult VkEncoder::vkAllocateDescriptorSets(VkDevice device,
6699 const VkDescriptorSetAllocateInfo* pAllocateInfo,
6700 VkDescriptorSet* pDescriptorSets, uint32_t doLock) {
6701 (void)doLock;
6702 bool queueSubmitWithCommandsEnabled =
6703 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
6704 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
6705 auto stream = mImpl->stream();
6706 auto pool = mImpl->pool();
6707 VkDevice local_device;
6708 VkDescriptorSetAllocateInfo* local_pAllocateInfo;
6709 local_device = device;
6710 local_pAllocateInfo = nullptr;
6711 if (pAllocateInfo) {
6712 local_pAllocateInfo =
6713 (VkDescriptorSetAllocateInfo*)pool->alloc(sizeof(const VkDescriptorSetAllocateInfo));
6714 deepcopy_VkDescriptorSetAllocateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocateInfo,
6715 (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo));
6716 }
6717 if (local_pAllocateInfo) {
6718 transform_tohost_VkDescriptorSetAllocateInfo(
6719 sResourceTracker, (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo));
6720 }
6721 size_t count = 0;
6722 size_t* countPtr = &count;
6723 {
6724 uint64_t cgen_var_0;
6725 *countPtr += 1 * 8;
6726 count_VkDescriptorSetAllocateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6727 (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo),
6728 countPtr);
6729 if (pAllocateInfo->descriptorSetCount) {
6730 *countPtr += pAllocateInfo->descriptorSetCount * 8;
6731 }
6732 }
6733 uint32_t packetSize_vkAllocateDescriptorSets =
6734 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
6735 uint8_t* streamPtr = stream->reserve(packetSize_vkAllocateDescriptorSets);
6736 uint8_t* packetBeginPtr = streamPtr;
6737 uint8_t** streamPtrPtr = &streamPtr;
6738 uint32_t opcode_vkAllocateDescriptorSets = OP_vkAllocateDescriptorSets;
6739 uint32_t seqno;
6740 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
6741 memcpy(streamPtr, &opcode_vkAllocateDescriptorSets, sizeof(uint32_t));
6742 streamPtr += sizeof(uint32_t);
6743 memcpy(streamPtr, &packetSize_vkAllocateDescriptorSets, sizeof(uint32_t));
6744 streamPtr += sizeof(uint32_t);
6745 if (queueSubmitWithCommandsEnabled) {
6746 memcpy(streamPtr, &seqno, sizeof(uint32_t));
6747 streamPtr += sizeof(uint32_t);
6748 }
6749 uint64_t cgen_var_0;
6750 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
6751 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
6752 *streamPtrPtr += 1 * 8;
6753 reservedmarshal_VkDescriptorSetAllocateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6754 (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo),
6755 streamPtrPtr);
6756 /* is handle, possibly out */;
6757 if (pAllocateInfo->descriptorSetCount) {
6758 uint8_t* cgen_var_1_ptr = (uint8_t*)(*streamPtrPtr);
6759 for (uint32_t k = 0; k < pAllocateInfo->descriptorSetCount; ++k) {
6760 uint64_t tmpval = (uint64_t)(pDescriptorSets[k]);
6761 memcpy(cgen_var_1_ptr + k * 8, &tmpval, sizeof(uint64_t));
6762 }
6763 *streamPtrPtr += 8 * pAllocateInfo->descriptorSetCount;
6764 }
6765 /* is handle, possibly out */;
6766 stream->setHandleMapping(sResourceTracker->createMapping());
6767 if (pAllocateInfo->descriptorSetCount) {
6768 uint64_t* cgen_var_2;
6769 stream->alloc((void**)&cgen_var_2, pAllocateInfo->descriptorSetCount * 8);
6770 stream->read((uint64_t*)cgen_var_2, pAllocateInfo->descriptorSetCount * 8);
6771 stream->handleMapping()->mapHandles_u64_VkDescriptorSet(
6772 cgen_var_2, (VkDescriptorSet*)pDescriptorSets, pAllocateInfo->descriptorSetCount);
6773 }
6774 stream->unsetHandleMapping();
6775 VkResult vkAllocateDescriptorSets_VkResult_return = (VkResult)0;
6776 stream->read(&vkAllocateDescriptorSets_VkResult_return, sizeof(VkResult));
6777 ++encodeCount;
6778 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
6779 pool->freeAll();
6780 stream->clearPool();
6781 }
6782 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
6783 return vkAllocateDescriptorSets_VkResult_return;
6784 }
6785
vkFreeDescriptorSets(VkDevice device,VkDescriptorPool descriptorPool,uint32_t descriptorSetCount,const VkDescriptorSet * pDescriptorSets,uint32_t doLock)6786 VkResult VkEncoder::vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool,
6787 uint32_t descriptorSetCount,
6788 const VkDescriptorSet* pDescriptorSets, uint32_t doLock) {
6789 (void)doLock;
6790 bool queueSubmitWithCommandsEnabled =
6791 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
6792 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
6793 auto stream = mImpl->stream();
6794 auto pool = mImpl->pool();
6795 VkDevice local_device;
6796 VkDescriptorPool local_descriptorPool;
6797 uint32_t local_descriptorSetCount;
6798 VkDescriptorSet* local_pDescriptorSets;
6799 local_device = device;
6800 local_descriptorPool = descriptorPool;
6801 local_descriptorSetCount = descriptorSetCount;
6802 // Avoiding deepcopy for pDescriptorSets
6803 local_pDescriptorSets = (VkDescriptorSet*)pDescriptorSets;
6804 size_t count = 0;
6805 size_t* countPtr = &count;
6806 {
6807 uint64_t cgen_var_0;
6808 *countPtr += 1 * 8;
6809 uint64_t cgen_var_1;
6810 *countPtr += 1 * 8;
6811 *countPtr += sizeof(uint32_t);
6812 // WARNING PTR CHECK
6813 *countPtr += 8;
6814 if (local_pDescriptorSets) {
6815 if (((descriptorSetCount))) {
6816 *countPtr += ((descriptorSetCount)) * 8;
6817 }
6818 }
6819 }
6820 uint32_t packetSize_vkFreeDescriptorSets =
6821 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
6822 uint8_t* streamPtr = stream->reserve(packetSize_vkFreeDescriptorSets);
6823 uint8_t* packetBeginPtr = streamPtr;
6824 uint8_t** streamPtrPtr = &streamPtr;
6825 uint32_t opcode_vkFreeDescriptorSets = OP_vkFreeDescriptorSets;
6826 uint32_t seqno;
6827 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
6828 memcpy(streamPtr, &opcode_vkFreeDescriptorSets, sizeof(uint32_t));
6829 streamPtr += sizeof(uint32_t);
6830 memcpy(streamPtr, &packetSize_vkFreeDescriptorSets, sizeof(uint32_t));
6831 streamPtr += sizeof(uint32_t);
6832 if (queueSubmitWithCommandsEnabled) {
6833 memcpy(streamPtr, &seqno, sizeof(uint32_t));
6834 streamPtr += sizeof(uint32_t);
6835 }
6836 uint64_t cgen_var_0;
6837 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
6838 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
6839 *streamPtrPtr += 1 * 8;
6840 uint64_t cgen_var_1;
6841 *&cgen_var_1 = get_host_u64_VkDescriptorPool((*&local_descriptorPool));
6842 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
6843 *streamPtrPtr += 1 * 8;
6844 memcpy(*streamPtrPtr, (uint32_t*)&local_descriptorSetCount, sizeof(uint32_t));
6845 *streamPtrPtr += sizeof(uint32_t);
6846 // WARNING PTR CHECK
6847 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pDescriptorSets;
6848 memcpy((*streamPtrPtr), &cgen_var_2, 8);
6849 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
6850 *streamPtrPtr += 8;
6851 if (local_pDescriptorSets) {
6852 if (((descriptorSetCount))) {
6853 uint8_t* cgen_var_2_0_ptr = (uint8_t*)(*streamPtrPtr);
6854 for (uint32_t k = 0; k < ((descriptorSetCount)); ++k) {
6855 uint64_t tmpval = get_host_u64_VkDescriptorSet(local_pDescriptorSets[k]);
6856 memcpy(cgen_var_2_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
6857 }
6858 *streamPtrPtr += 8 * ((descriptorSetCount));
6859 }
6860 }
6861 VkResult vkFreeDescriptorSets_VkResult_return = (VkResult)0;
6862 stream->read(&vkFreeDescriptorSets_VkResult_return, sizeof(VkResult));
6863 if (pDescriptorSets) {
6864 sResourceTracker->destroyMapping()->mapHandles_VkDescriptorSet(
6865 (VkDescriptorSet*)pDescriptorSets, ((descriptorSetCount)));
6866 }
6867 ++encodeCount;
6868 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
6869 pool->freeAll();
6870 stream->clearPool();
6871 }
6872 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
6873 return vkFreeDescriptorSets_VkResult_return;
6874 }
6875
vkUpdateDescriptorSets(VkDevice device,uint32_t descriptorWriteCount,const VkWriteDescriptorSet * pDescriptorWrites,uint32_t descriptorCopyCount,const VkCopyDescriptorSet * pDescriptorCopies,uint32_t doLock)6876 void VkEncoder::vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount,
6877 const VkWriteDescriptorSet* pDescriptorWrites,
6878 uint32_t descriptorCopyCount,
6879 const VkCopyDescriptorSet* pDescriptorCopies,
6880 uint32_t doLock) {
6881 (void)doLock;
6882 bool queueSubmitWithCommandsEnabled =
6883 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
6884 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
6885 auto stream = mImpl->stream();
6886 auto pool = mImpl->pool();
6887 VkDevice local_device;
6888 uint32_t local_descriptorWriteCount;
6889 VkWriteDescriptorSet* local_pDescriptorWrites;
6890 uint32_t local_descriptorCopyCount;
6891 VkCopyDescriptorSet* local_pDescriptorCopies;
6892 local_device = device;
6893 local_descriptorWriteCount = descriptorWriteCount;
6894 local_pDescriptorWrites = nullptr;
6895 if (pDescriptorWrites) {
6896 local_pDescriptorWrites = (VkWriteDescriptorSet*)pool->alloc(
6897 ((descriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
6898 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
6899 deepcopy_VkWriteDescriptorSet(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDescriptorWrites + i,
6900 (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
6901 }
6902 }
6903 local_descriptorCopyCount = descriptorCopyCount;
6904 local_pDescriptorCopies = nullptr;
6905 if (pDescriptorCopies) {
6906 local_pDescriptorCopies = (VkCopyDescriptorSet*)pool->alloc(
6907 ((descriptorCopyCount)) * sizeof(const VkCopyDescriptorSet));
6908 for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i) {
6909 deepcopy_VkCopyDescriptorSet(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDescriptorCopies + i,
6910 (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
6911 }
6912 }
6913 if (local_pDescriptorWrites) {
6914 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
6915 transform_tohost_VkWriteDescriptorSet(
6916 sResourceTracker, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
6917 }
6918 }
6919 if (local_pDescriptorCopies) {
6920 for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i) {
6921 transform_tohost_VkCopyDescriptorSet(
6922 sResourceTracker, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
6923 }
6924 }
6925 size_t count = 0;
6926 size_t* countPtr = &count;
6927 {
6928 uint64_t cgen_var_0;
6929 *countPtr += 1 * 8;
6930 *countPtr += sizeof(uint32_t);
6931 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
6932 count_VkWriteDescriptorSet(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6933 (VkWriteDescriptorSet*)(local_pDescriptorWrites + i),
6934 countPtr);
6935 }
6936 *countPtr += sizeof(uint32_t);
6937 for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i) {
6938 count_VkCopyDescriptorSet(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
6939 (VkCopyDescriptorSet*)(local_pDescriptorCopies + i),
6940 countPtr);
6941 }
6942 }
6943 uint32_t packetSize_vkUpdateDescriptorSets =
6944 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
6945 uint8_t* streamPtr = stream->reserve(packetSize_vkUpdateDescriptorSets);
6946 uint8_t* packetBeginPtr = streamPtr;
6947 uint8_t** streamPtrPtr = &streamPtr;
6948 uint32_t opcode_vkUpdateDescriptorSets = OP_vkUpdateDescriptorSets;
6949 uint32_t seqno;
6950 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
6951 memcpy(streamPtr, &opcode_vkUpdateDescriptorSets, sizeof(uint32_t));
6952 streamPtr += sizeof(uint32_t);
6953 memcpy(streamPtr, &packetSize_vkUpdateDescriptorSets, sizeof(uint32_t));
6954 streamPtr += sizeof(uint32_t);
6955 if (queueSubmitWithCommandsEnabled) {
6956 memcpy(streamPtr, &seqno, sizeof(uint32_t));
6957 streamPtr += sizeof(uint32_t);
6958 }
6959 uint64_t cgen_var_0;
6960 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
6961 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
6962 *streamPtrPtr += 1 * 8;
6963 memcpy(*streamPtrPtr, (uint32_t*)&local_descriptorWriteCount, sizeof(uint32_t));
6964 *streamPtrPtr += sizeof(uint32_t);
6965 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
6966 reservedmarshal_VkWriteDescriptorSet(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6967 (VkWriteDescriptorSet*)(local_pDescriptorWrites + i),
6968 streamPtrPtr);
6969 }
6970 memcpy(*streamPtrPtr, (uint32_t*)&local_descriptorCopyCount, sizeof(uint32_t));
6971 *streamPtrPtr += sizeof(uint32_t);
6972 for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i) {
6973 reservedmarshal_VkCopyDescriptorSet(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
6974 (VkCopyDescriptorSet*)(local_pDescriptorCopies + i),
6975 streamPtrPtr);
6976 }
6977 stream->flush();
6978 ++encodeCount;
6979 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
6980 pool->freeAll();
6981 stream->clearPool();
6982 }
6983 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
6984 }
6985
vkCreateFramebuffer(VkDevice device,const VkFramebufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkFramebuffer * pFramebuffer,uint32_t doLock)6986 VkResult VkEncoder::vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo,
6987 const VkAllocationCallbacks* pAllocator,
6988 VkFramebuffer* pFramebuffer, uint32_t doLock) {
6989 (void)doLock;
6990 bool queueSubmitWithCommandsEnabled =
6991 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
6992 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
6993 auto stream = mImpl->stream();
6994 auto pool = mImpl->pool();
6995 VkDevice local_device;
6996 VkFramebufferCreateInfo* local_pCreateInfo;
6997 VkAllocationCallbacks* local_pAllocator;
6998 local_device = device;
6999 local_pCreateInfo = nullptr;
7000 if (pCreateInfo) {
7001 local_pCreateInfo =
7002 (VkFramebufferCreateInfo*)pool->alloc(sizeof(const VkFramebufferCreateInfo));
7003 deepcopy_VkFramebufferCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
7004 (VkFramebufferCreateInfo*)(local_pCreateInfo));
7005 }
7006 local_pAllocator = nullptr;
7007 if (pAllocator) {
7008 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
7009 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
7010 (VkAllocationCallbacks*)(local_pAllocator));
7011 }
7012 local_pAllocator = nullptr;
7013 if (local_pCreateInfo) {
7014 transform_tohost_VkFramebufferCreateInfo(sResourceTracker,
7015 (VkFramebufferCreateInfo*)(local_pCreateInfo));
7016 }
7017 if (local_pAllocator) {
7018 transform_tohost_VkAllocationCallbacks(sResourceTracker,
7019 (VkAllocationCallbacks*)(local_pAllocator));
7020 }
7021 size_t count = 0;
7022 size_t* countPtr = &count;
7023 {
7024 uint64_t cgen_var_0;
7025 *countPtr += 1 * 8;
7026 count_VkFramebufferCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
7027 (VkFramebufferCreateInfo*)(local_pCreateInfo), countPtr);
7028 // WARNING PTR CHECK
7029 *countPtr += 8;
7030 if (local_pAllocator) {
7031 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
7032 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
7033 }
7034 uint64_t cgen_var_1;
7035 *countPtr += 8;
7036 }
7037 uint32_t packetSize_vkCreateFramebuffer =
7038 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
7039 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateFramebuffer);
7040 uint8_t* packetBeginPtr = streamPtr;
7041 uint8_t** streamPtrPtr = &streamPtr;
7042 uint32_t opcode_vkCreateFramebuffer = OP_vkCreateFramebuffer;
7043 uint32_t seqno;
7044 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
7045 memcpy(streamPtr, &opcode_vkCreateFramebuffer, sizeof(uint32_t));
7046 streamPtr += sizeof(uint32_t);
7047 memcpy(streamPtr, &packetSize_vkCreateFramebuffer, sizeof(uint32_t));
7048 streamPtr += sizeof(uint32_t);
7049 if (queueSubmitWithCommandsEnabled) {
7050 memcpy(streamPtr, &seqno, sizeof(uint32_t));
7051 streamPtr += sizeof(uint32_t);
7052 }
7053 uint64_t cgen_var_0;
7054 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
7055 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7056 *streamPtrPtr += 1 * 8;
7057 reservedmarshal_VkFramebufferCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
7058 (VkFramebufferCreateInfo*)(local_pCreateInfo),
7059 streamPtrPtr);
7060 // WARNING PTR CHECK
7061 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
7062 memcpy((*streamPtrPtr), &cgen_var_1, 8);
7063 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
7064 *streamPtrPtr += 8;
7065 if (local_pAllocator) {
7066 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
7067 (VkAllocationCallbacks*)(local_pAllocator),
7068 streamPtrPtr);
7069 }
7070 /* is handle, possibly out */;
7071 uint64_t cgen_var_2;
7072 *&cgen_var_2 = (uint64_t)((*pFramebuffer));
7073 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
7074 *streamPtrPtr += 8;
7075 /* is handle, possibly out */;
7076 stream->setHandleMapping(sResourceTracker->createMapping());
7077 uint64_t cgen_var_3;
7078 stream->read((uint64_t*)&cgen_var_3, 8);
7079 stream->handleMapping()->mapHandles_u64_VkFramebuffer(&cgen_var_3, (VkFramebuffer*)pFramebuffer,
7080 1);
7081 stream->unsetHandleMapping();
7082 VkResult vkCreateFramebuffer_VkResult_return = (VkResult)0;
7083 stream->read(&vkCreateFramebuffer_VkResult_return, sizeof(VkResult));
7084 ++encodeCount;
7085 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7086 pool->freeAll();
7087 stream->clearPool();
7088 }
7089 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7090 return vkCreateFramebuffer_VkResult_return;
7091 }
7092
vkDestroyFramebuffer(VkDevice device,VkFramebuffer framebuffer,const VkAllocationCallbacks * pAllocator,uint32_t doLock)7093 void VkEncoder::vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer,
7094 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
7095 (void)doLock;
7096 bool queueSubmitWithCommandsEnabled =
7097 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7098 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7099 auto stream = mImpl->stream();
7100 auto pool = mImpl->pool();
7101 VkDevice local_device;
7102 VkFramebuffer local_framebuffer;
7103 VkAllocationCallbacks* local_pAllocator;
7104 local_device = device;
7105 local_framebuffer = framebuffer;
7106 local_pAllocator = nullptr;
7107 if (pAllocator) {
7108 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
7109 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
7110 (VkAllocationCallbacks*)(local_pAllocator));
7111 }
7112 local_pAllocator = nullptr;
7113 if (local_pAllocator) {
7114 transform_tohost_VkAllocationCallbacks(sResourceTracker,
7115 (VkAllocationCallbacks*)(local_pAllocator));
7116 }
7117 size_t count = 0;
7118 size_t* countPtr = &count;
7119 {
7120 uint64_t cgen_var_0;
7121 *countPtr += 1 * 8;
7122 uint64_t cgen_var_1;
7123 *countPtr += 1 * 8;
7124 // WARNING PTR CHECK
7125 *countPtr += 8;
7126 if (local_pAllocator) {
7127 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
7128 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
7129 }
7130 }
7131 uint32_t packetSize_vkDestroyFramebuffer =
7132 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
7133 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyFramebuffer);
7134 uint8_t* packetBeginPtr = streamPtr;
7135 uint8_t** streamPtrPtr = &streamPtr;
7136 uint32_t opcode_vkDestroyFramebuffer = OP_vkDestroyFramebuffer;
7137 uint32_t seqno;
7138 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
7139 memcpy(streamPtr, &opcode_vkDestroyFramebuffer, sizeof(uint32_t));
7140 streamPtr += sizeof(uint32_t);
7141 memcpy(streamPtr, &packetSize_vkDestroyFramebuffer, sizeof(uint32_t));
7142 streamPtr += sizeof(uint32_t);
7143 if (queueSubmitWithCommandsEnabled) {
7144 memcpy(streamPtr, &seqno, sizeof(uint32_t));
7145 streamPtr += sizeof(uint32_t);
7146 }
7147 uint64_t cgen_var_0;
7148 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
7149 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7150 *streamPtrPtr += 1 * 8;
7151 uint64_t cgen_var_1;
7152 *&cgen_var_1 = get_host_u64_VkFramebuffer((*&local_framebuffer));
7153 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
7154 *streamPtrPtr += 1 * 8;
7155 // WARNING PTR CHECK
7156 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
7157 memcpy((*streamPtrPtr), &cgen_var_2, 8);
7158 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
7159 *streamPtrPtr += 8;
7160 if (local_pAllocator) {
7161 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
7162 (VkAllocationCallbacks*)(local_pAllocator),
7163 streamPtrPtr);
7164 }
7165 sResourceTracker->destroyMapping()->mapHandles_VkFramebuffer((VkFramebuffer*)&framebuffer);
7166 stream->flush();
7167 ++encodeCount;
7168 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7169 pool->freeAll();
7170 stream->clearPool();
7171 }
7172 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7173 }
7174
vkCreateRenderPass(VkDevice device,const VkRenderPassCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass,uint32_t doLock)7175 VkResult VkEncoder::vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo,
7176 const VkAllocationCallbacks* pAllocator,
7177 VkRenderPass* pRenderPass, uint32_t doLock) {
7178 (void)doLock;
7179 bool queueSubmitWithCommandsEnabled =
7180 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7181 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7182 auto stream = mImpl->stream();
7183 auto pool = mImpl->pool();
7184 VkDevice local_device;
7185 VkRenderPassCreateInfo* local_pCreateInfo;
7186 VkAllocationCallbacks* local_pAllocator;
7187 local_device = device;
7188 local_pCreateInfo = nullptr;
7189 if (pCreateInfo) {
7190 local_pCreateInfo =
7191 (VkRenderPassCreateInfo*)pool->alloc(sizeof(const VkRenderPassCreateInfo));
7192 deepcopy_VkRenderPassCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
7193 (VkRenderPassCreateInfo*)(local_pCreateInfo));
7194 }
7195 local_pAllocator = nullptr;
7196 if (pAllocator) {
7197 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
7198 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
7199 (VkAllocationCallbacks*)(local_pAllocator));
7200 }
7201 local_pAllocator = nullptr;
7202 if (local_pCreateInfo) {
7203 transform_tohost_VkRenderPassCreateInfo(sResourceTracker,
7204 (VkRenderPassCreateInfo*)(local_pCreateInfo));
7205 }
7206 if (local_pAllocator) {
7207 transform_tohost_VkAllocationCallbacks(sResourceTracker,
7208 (VkAllocationCallbacks*)(local_pAllocator));
7209 }
7210 size_t count = 0;
7211 size_t* countPtr = &count;
7212 {
7213 uint64_t cgen_var_0;
7214 *countPtr += 1 * 8;
7215 count_VkRenderPassCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
7216 (VkRenderPassCreateInfo*)(local_pCreateInfo), countPtr);
7217 // WARNING PTR CHECK
7218 *countPtr += 8;
7219 if (local_pAllocator) {
7220 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
7221 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
7222 }
7223 uint64_t cgen_var_1;
7224 *countPtr += 8;
7225 }
7226 uint32_t packetSize_vkCreateRenderPass =
7227 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
7228 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateRenderPass);
7229 uint8_t* packetBeginPtr = streamPtr;
7230 uint8_t** streamPtrPtr = &streamPtr;
7231 uint32_t opcode_vkCreateRenderPass = OP_vkCreateRenderPass;
7232 uint32_t seqno;
7233 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
7234 memcpy(streamPtr, &opcode_vkCreateRenderPass, sizeof(uint32_t));
7235 streamPtr += sizeof(uint32_t);
7236 memcpy(streamPtr, &packetSize_vkCreateRenderPass, sizeof(uint32_t));
7237 streamPtr += sizeof(uint32_t);
7238 if (queueSubmitWithCommandsEnabled) {
7239 memcpy(streamPtr, &seqno, sizeof(uint32_t));
7240 streamPtr += sizeof(uint32_t);
7241 }
7242 uint64_t cgen_var_0;
7243 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
7244 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7245 *streamPtrPtr += 1 * 8;
7246 reservedmarshal_VkRenderPassCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
7247 (VkRenderPassCreateInfo*)(local_pCreateInfo),
7248 streamPtrPtr);
7249 // WARNING PTR CHECK
7250 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
7251 memcpy((*streamPtrPtr), &cgen_var_1, 8);
7252 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
7253 *streamPtrPtr += 8;
7254 if (local_pAllocator) {
7255 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
7256 (VkAllocationCallbacks*)(local_pAllocator),
7257 streamPtrPtr);
7258 }
7259 /* is handle, possibly out */;
7260 uint64_t cgen_var_2;
7261 *&cgen_var_2 = (uint64_t)((*pRenderPass));
7262 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
7263 *streamPtrPtr += 8;
7264 /* is handle, possibly out */;
7265 stream->setHandleMapping(sResourceTracker->createMapping());
7266 uint64_t cgen_var_3;
7267 stream->read((uint64_t*)&cgen_var_3, 8);
7268 stream->handleMapping()->mapHandles_u64_VkRenderPass(&cgen_var_3, (VkRenderPass*)pRenderPass,
7269 1);
7270 stream->unsetHandleMapping();
7271 VkResult vkCreateRenderPass_VkResult_return = (VkResult)0;
7272 stream->read(&vkCreateRenderPass_VkResult_return, sizeof(VkResult));
7273 ++encodeCount;
7274 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7275 pool->freeAll();
7276 stream->clearPool();
7277 }
7278 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7279 return vkCreateRenderPass_VkResult_return;
7280 }
7281
vkDestroyRenderPass(VkDevice device,VkRenderPass renderPass,const VkAllocationCallbacks * pAllocator,uint32_t doLock)7282 void VkEncoder::vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass,
7283 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
7284 (void)doLock;
7285 bool queueSubmitWithCommandsEnabled =
7286 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7287 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7288 auto stream = mImpl->stream();
7289 auto pool = mImpl->pool();
7290 VkDevice local_device;
7291 VkRenderPass local_renderPass;
7292 VkAllocationCallbacks* local_pAllocator;
7293 local_device = device;
7294 local_renderPass = renderPass;
7295 local_pAllocator = nullptr;
7296 if (pAllocator) {
7297 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
7298 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
7299 (VkAllocationCallbacks*)(local_pAllocator));
7300 }
7301 local_pAllocator = nullptr;
7302 if (local_pAllocator) {
7303 transform_tohost_VkAllocationCallbacks(sResourceTracker,
7304 (VkAllocationCallbacks*)(local_pAllocator));
7305 }
7306 size_t count = 0;
7307 size_t* countPtr = &count;
7308 {
7309 uint64_t cgen_var_0;
7310 *countPtr += 1 * 8;
7311 uint64_t cgen_var_1;
7312 *countPtr += 1 * 8;
7313 // WARNING PTR CHECK
7314 *countPtr += 8;
7315 if (local_pAllocator) {
7316 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
7317 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
7318 }
7319 }
7320 uint32_t packetSize_vkDestroyRenderPass =
7321 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
7322 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyRenderPass);
7323 uint8_t* packetBeginPtr = streamPtr;
7324 uint8_t** streamPtrPtr = &streamPtr;
7325 uint32_t opcode_vkDestroyRenderPass = OP_vkDestroyRenderPass;
7326 uint32_t seqno;
7327 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
7328 memcpy(streamPtr, &opcode_vkDestroyRenderPass, sizeof(uint32_t));
7329 streamPtr += sizeof(uint32_t);
7330 memcpy(streamPtr, &packetSize_vkDestroyRenderPass, sizeof(uint32_t));
7331 streamPtr += sizeof(uint32_t);
7332 if (queueSubmitWithCommandsEnabled) {
7333 memcpy(streamPtr, &seqno, sizeof(uint32_t));
7334 streamPtr += sizeof(uint32_t);
7335 }
7336 uint64_t cgen_var_0;
7337 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
7338 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7339 *streamPtrPtr += 1 * 8;
7340 uint64_t cgen_var_1;
7341 *&cgen_var_1 = get_host_u64_VkRenderPass((*&local_renderPass));
7342 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
7343 *streamPtrPtr += 1 * 8;
7344 // WARNING PTR CHECK
7345 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
7346 memcpy((*streamPtrPtr), &cgen_var_2, 8);
7347 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
7348 *streamPtrPtr += 8;
7349 if (local_pAllocator) {
7350 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
7351 (VkAllocationCallbacks*)(local_pAllocator),
7352 streamPtrPtr);
7353 }
7354 sResourceTracker->destroyMapping()->mapHandles_VkRenderPass((VkRenderPass*)&renderPass);
7355 stream->flush();
7356 ++encodeCount;
7357 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7358 pool->freeAll();
7359 stream->clearPool();
7360 }
7361 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7362 }
7363
vkGetRenderAreaGranularity(VkDevice device,VkRenderPass renderPass,VkExtent2D * pGranularity,uint32_t doLock)7364 void VkEncoder::vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass,
7365 VkExtent2D* pGranularity, uint32_t doLock) {
7366 (void)doLock;
7367 bool queueSubmitWithCommandsEnabled =
7368 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7369 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7370 auto stream = mImpl->stream();
7371 auto pool = mImpl->pool();
7372 VkDevice local_device;
7373 VkRenderPass local_renderPass;
7374 local_device = device;
7375 local_renderPass = renderPass;
7376 size_t count = 0;
7377 size_t* countPtr = &count;
7378 {
7379 uint64_t cgen_var_0;
7380 *countPtr += 1 * 8;
7381 uint64_t cgen_var_1;
7382 *countPtr += 1 * 8;
7383 count_VkExtent2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity),
7384 countPtr);
7385 }
7386 uint32_t packetSize_vkGetRenderAreaGranularity =
7387 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
7388 uint8_t* streamPtr = stream->reserve(packetSize_vkGetRenderAreaGranularity);
7389 uint8_t* packetBeginPtr = streamPtr;
7390 uint8_t** streamPtrPtr = &streamPtr;
7391 uint32_t opcode_vkGetRenderAreaGranularity = OP_vkGetRenderAreaGranularity;
7392 uint32_t seqno;
7393 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
7394 memcpy(streamPtr, &opcode_vkGetRenderAreaGranularity, sizeof(uint32_t));
7395 streamPtr += sizeof(uint32_t);
7396 memcpy(streamPtr, &packetSize_vkGetRenderAreaGranularity, sizeof(uint32_t));
7397 streamPtr += sizeof(uint32_t);
7398 if (queueSubmitWithCommandsEnabled) {
7399 memcpy(streamPtr, &seqno, sizeof(uint32_t));
7400 streamPtr += sizeof(uint32_t);
7401 }
7402 uint64_t cgen_var_0;
7403 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
7404 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7405 *streamPtrPtr += 1 * 8;
7406 uint64_t cgen_var_1;
7407 *&cgen_var_1 = get_host_u64_VkRenderPass((*&local_renderPass));
7408 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
7409 *streamPtrPtr += 1 * 8;
7410 reservedmarshal_VkExtent2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity),
7411 streamPtrPtr);
7412 unmarshal_VkExtent2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity));
7413 if (pGranularity) {
7414 transform_fromhost_VkExtent2D(sResourceTracker, (VkExtent2D*)(pGranularity));
7415 }
7416 ++encodeCount;
7417 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7418 pool->freeAll();
7419 stream->clearPool();
7420 }
7421 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7422 }
7423
vkCreateCommandPool(VkDevice device,const VkCommandPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkCommandPool * pCommandPool,uint32_t doLock)7424 VkResult VkEncoder::vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo,
7425 const VkAllocationCallbacks* pAllocator,
7426 VkCommandPool* pCommandPool, uint32_t doLock) {
7427 (void)doLock;
7428 bool queueSubmitWithCommandsEnabled =
7429 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7430 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7431 auto stream = mImpl->stream();
7432 auto pool = mImpl->pool();
7433 VkDevice local_device;
7434 VkCommandPoolCreateInfo* local_pCreateInfo;
7435 VkAllocationCallbacks* local_pAllocator;
7436 local_device = device;
7437 local_pCreateInfo = nullptr;
7438 if (pCreateInfo) {
7439 local_pCreateInfo =
7440 (VkCommandPoolCreateInfo*)pool->alloc(sizeof(const VkCommandPoolCreateInfo));
7441 deepcopy_VkCommandPoolCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
7442 (VkCommandPoolCreateInfo*)(local_pCreateInfo));
7443 }
7444 local_pAllocator = nullptr;
7445 if (pAllocator) {
7446 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
7447 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
7448 (VkAllocationCallbacks*)(local_pAllocator));
7449 }
7450 local_pAllocator = nullptr;
7451 if (local_pCreateInfo) {
7452 transform_tohost_VkCommandPoolCreateInfo(sResourceTracker,
7453 (VkCommandPoolCreateInfo*)(local_pCreateInfo));
7454 }
7455 if (local_pAllocator) {
7456 transform_tohost_VkAllocationCallbacks(sResourceTracker,
7457 (VkAllocationCallbacks*)(local_pAllocator));
7458 }
7459 size_t count = 0;
7460 size_t* countPtr = &count;
7461 {
7462 uint64_t cgen_var_0;
7463 *countPtr += 1 * 8;
7464 count_VkCommandPoolCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
7465 (VkCommandPoolCreateInfo*)(local_pCreateInfo), countPtr);
7466 // WARNING PTR CHECK
7467 *countPtr += 8;
7468 if (local_pAllocator) {
7469 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
7470 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
7471 }
7472 uint64_t cgen_var_1;
7473 *countPtr += 8;
7474 }
7475 uint32_t packetSize_vkCreateCommandPool =
7476 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
7477 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateCommandPool);
7478 uint8_t* packetBeginPtr = streamPtr;
7479 uint8_t** streamPtrPtr = &streamPtr;
7480 uint32_t opcode_vkCreateCommandPool = OP_vkCreateCommandPool;
7481 uint32_t seqno;
7482 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
7483 memcpy(streamPtr, &opcode_vkCreateCommandPool, sizeof(uint32_t));
7484 streamPtr += sizeof(uint32_t);
7485 memcpy(streamPtr, &packetSize_vkCreateCommandPool, sizeof(uint32_t));
7486 streamPtr += sizeof(uint32_t);
7487 if (queueSubmitWithCommandsEnabled) {
7488 memcpy(streamPtr, &seqno, sizeof(uint32_t));
7489 streamPtr += sizeof(uint32_t);
7490 }
7491 uint64_t cgen_var_0;
7492 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
7493 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7494 *streamPtrPtr += 1 * 8;
7495 reservedmarshal_VkCommandPoolCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
7496 (VkCommandPoolCreateInfo*)(local_pCreateInfo),
7497 streamPtrPtr);
7498 // WARNING PTR CHECK
7499 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
7500 memcpy((*streamPtrPtr), &cgen_var_1, 8);
7501 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
7502 *streamPtrPtr += 8;
7503 if (local_pAllocator) {
7504 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
7505 (VkAllocationCallbacks*)(local_pAllocator),
7506 streamPtrPtr);
7507 }
7508 /* is handle, possibly out */;
7509 uint64_t cgen_var_2;
7510 *&cgen_var_2 = (uint64_t)((*pCommandPool));
7511 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
7512 *streamPtrPtr += 8;
7513 /* is handle, possibly out */;
7514 stream->setHandleMapping(sResourceTracker->createMapping());
7515 uint64_t cgen_var_3;
7516 stream->read((uint64_t*)&cgen_var_3, 8);
7517 stream->handleMapping()->mapHandles_u64_VkCommandPool(&cgen_var_3, (VkCommandPool*)pCommandPool,
7518 1);
7519 stream->unsetHandleMapping();
7520 VkResult vkCreateCommandPool_VkResult_return = (VkResult)0;
7521 stream->read(&vkCreateCommandPool_VkResult_return, sizeof(VkResult));
7522 ++encodeCount;
7523 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7524 pool->freeAll();
7525 stream->clearPool();
7526 }
7527 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7528 return vkCreateCommandPool_VkResult_return;
7529 }
7530
vkDestroyCommandPool(VkDevice device,VkCommandPool commandPool,const VkAllocationCallbacks * pAllocator,uint32_t doLock)7531 void VkEncoder::vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool,
7532 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
7533 (void)doLock;
7534 bool queueSubmitWithCommandsEnabled =
7535 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7536 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7537 auto stream = mImpl->stream();
7538 auto pool = mImpl->pool();
7539 VkDevice local_device;
7540 VkCommandPool local_commandPool;
7541 VkAllocationCallbacks* local_pAllocator;
7542 local_device = device;
7543 local_commandPool = commandPool;
7544 local_pAllocator = nullptr;
7545 if (pAllocator) {
7546 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
7547 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
7548 (VkAllocationCallbacks*)(local_pAllocator));
7549 }
7550 local_pAllocator = nullptr;
7551 if (local_pAllocator) {
7552 transform_tohost_VkAllocationCallbacks(sResourceTracker,
7553 (VkAllocationCallbacks*)(local_pAllocator));
7554 }
7555 size_t count = 0;
7556 size_t* countPtr = &count;
7557 {
7558 uint64_t cgen_var_0;
7559 *countPtr += 1 * 8;
7560 uint64_t cgen_var_1;
7561 *countPtr += 1 * 8;
7562 // WARNING PTR CHECK
7563 *countPtr += 8;
7564 if (local_pAllocator) {
7565 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
7566 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
7567 }
7568 }
7569 uint32_t packetSize_vkDestroyCommandPool =
7570 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
7571 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyCommandPool);
7572 uint8_t* packetBeginPtr = streamPtr;
7573 uint8_t** streamPtrPtr = &streamPtr;
7574 uint32_t opcode_vkDestroyCommandPool = OP_vkDestroyCommandPool;
7575 uint32_t seqno;
7576 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
7577 memcpy(streamPtr, &opcode_vkDestroyCommandPool, sizeof(uint32_t));
7578 streamPtr += sizeof(uint32_t);
7579 memcpy(streamPtr, &packetSize_vkDestroyCommandPool, sizeof(uint32_t));
7580 streamPtr += sizeof(uint32_t);
7581 if (queueSubmitWithCommandsEnabled) {
7582 memcpy(streamPtr, &seqno, sizeof(uint32_t));
7583 streamPtr += sizeof(uint32_t);
7584 }
7585 uint64_t cgen_var_0;
7586 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
7587 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7588 *streamPtrPtr += 1 * 8;
7589 uint64_t cgen_var_1;
7590 *&cgen_var_1 = get_host_u64_VkCommandPool((*&local_commandPool));
7591 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
7592 *streamPtrPtr += 1 * 8;
7593 // WARNING PTR CHECK
7594 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
7595 memcpy((*streamPtrPtr), &cgen_var_2, 8);
7596 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
7597 *streamPtrPtr += 8;
7598 if (local_pAllocator) {
7599 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
7600 (VkAllocationCallbacks*)(local_pAllocator),
7601 streamPtrPtr);
7602 }
7603 sResourceTracker->destroyMapping()->mapHandles_VkCommandPool((VkCommandPool*)&commandPool);
7604 stream->flush();
7605 ++encodeCount;
7606 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7607 pool->freeAll();
7608 stream->clearPool();
7609 }
7610 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7611 }
7612
vkResetCommandPool(VkDevice device,VkCommandPool commandPool,VkCommandPoolResetFlags flags,uint32_t doLock)7613 VkResult VkEncoder::vkResetCommandPool(VkDevice device, VkCommandPool commandPool,
7614 VkCommandPoolResetFlags flags, uint32_t doLock) {
7615 (void)doLock;
7616 bool queueSubmitWithCommandsEnabled =
7617 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7618 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7619 auto stream = mImpl->stream();
7620 auto pool = mImpl->pool();
7621 VkDevice local_device;
7622 VkCommandPool local_commandPool;
7623 VkCommandPoolResetFlags local_flags;
7624 local_device = device;
7625 local_commandPool = commandPool;
7626 local_flags = flags;
7627 size_t count = 0;
7628 size_t* countPtr = &count;
7629 {
7630 uint64_t cgen_var_0;
7631 *countPtr += 1 * 8;
7632 uint64_t cgen_var_1;
7633 *countPtr += 1 * 8;
7634 *countPtr += sizeof(VkCommandPoolResetFlags);
7635 }
7636 uint32_t packetSize_vkResetCommandPool =
7637 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
7638 uint8_t* streamPtr = stream->reserve(packetSize_vkResetCommandPool);
7639 uint8_t* packetBeginPtr = streamPtr;
7640 uint8_t** streamPtrPtr = &streamPtr;
7641 uint32_t opcode_vkResetCommandPool = OP_vkResetCommandPool;
7642 uint32_t seqno;
7643 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
7644 memcpy(streamPtr, &opcode_vkResetCommandPool, sizeof(uint32_t));
7645 streamPtr += sizeof(uint32_t);
7646 memcpy(streamPtr, &packetSize_vkResetCommandPool, sizeof(uint32_t));
7647 streamPtr += sizeof(uint32_t);
7648 if (queueSubmitWithCommandsEnabled) {
7649 memcpy(streamPtr, &seqno, sizeof(uint32_t));
7650 streamPtr += sizeof(uint32_t);
7651 }
7652 uint64_t cgen_var_0;
7653 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
7654 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7655 *streamPtrPtr += 1 * 8;
7656 uint64_t cgen_var_1;
7657 *&cgen_var_1 = get_host_u64_VkCommandPool((*&local_commandPool));
7658 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
7659 *streamPtrPtr += 1 * 8;
7660 memcpy(*streamPtrPtr, (VkCommandPoolResetFlags*)&local_flags, sizeof(VkCommandPoolResetFlags));
7661 *streamPtrPtr += sizeof(VkCommandPoolResetFlags);
7662 VkResult vkResetCommandPool_VkResult_return = (VkResult)0;
7663 stream->read(&vkResetCommandPool_VkResult_return, sizeof(VkResult));
7664 ++encodeCount;
7665 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7666 pool->freeAll();
7667 stream->clearPool();
7668 }
7669 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7670 return vkResetCommandPool_VkResult_return;
7671 }
7672
vkAllocateCommandBuffers(VkDevice device,const VkCommandBufferAllocateInfo * pAllocateInfo,VkCommandBuffer * pCommandBuffers,uint32_t doLock)7673 VkResult VkEncoder::vkAllocateCommandBuffers(VkDevice device,
7674 const VkCommandBufferAllocateInfo* pAllocateInfo,
7675 VkCommandBuffer* pCommandBuffers, uint32_t doLock) {
7676 (void)doLock;
7677 bool queueSubmitWithCommandsEnabled =
7678 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7679 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7680 auto stream = mImpl->stream();
7681 auto pool = mImpl->pool();
7682 VkDevice local_device;
7683 VkCommandBufferAllocateInfo* local_pAllocateInfo;
7684 local_device = device;
7685 local_pAllocateInfo = nullptr;
7686 if (pAllocateInfo) {
7687 local_pAllocateInfo =
7688 (VkCommandBufferAllocateInfo*)pool->alloc(sizeof(const VkCommandBufferAllocateInfo));
7689 deepcopy_VkCommandBufferAllocateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocateInfo,
7690 (VkCommandBufferAllocateInfo*)(local_pAllocateInfo));
7691 }
7692 if (local_pAllocateInfo) {
7693 transform_tohost_VkCommandBufferAllocateInfo(
7694 sResourceTracker, (VkCommandBufferAllocateInfo*)(local_pAllocateInfo));
7695 }
7696 size_t count = 0;
7697 size_t* countPtr = &count;
7698 {
7699 uint64_t cgen_var_0;
7700 *countPtr += 1 * 8;
7701 count_VkCommandBufferAllocateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
7702 (VkCommandBufferAllocateInfo*)(local_pAllocateInfo),
7703 countPtr);
7704 if (pAllocateInfo->commandBufferCount) {
7705 *countPtr += pAllocateInfo->commandBufferCount * 8;
7706 }
7707 }
7708 uint32_t packetSize_vkAllocateCommandBuffers =
7709 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
7710 uint8_t* streamPtr = stream->reserve(packetSize_vkAllocateCommandBuffers);
7711 uint8_t* packetBeginPtr = streamPtr;
7712 uint8_t** streamPtrPtr = &streamPtr;
7713 uint32_t opcode_vkAllocateCommandBuffers = OP_vkAllocateCommandBuffers;
7714 uint32_t seqno;
7715 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
7716 memcpy(streamPtr, &opcode_vkAllocateCommandBuffers, sizeof(uint32_t));
7717 streamPtr += sizeof(uint32_t);
7718 memcpy(streamPtr, &packetSize_vkAllocateCommandBuffers, sizeof(uint32_t));
7719 streamPtr += sizeof(uint32_t);
7720 if (queueSubmitWithCommandsEnabled) {
7721 memcpy(streamPtr, &seqno, sizeof(uint32_t));
7722 streamPtr += sizeof(uint32_t);
7723 }
7724 uint64_t cgen_var_0;
7725 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
7726 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7727 *streamPtrPtr += 1 * 8;
7728 reservedmarshal_VkCommandBufferAllocateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
7729 (VkCommandBufferAllocateInfo*)(local_pAllocateInfo),
7730 streamPtrPtr);
7731 /* is handle, possibly out */;
7732 if (pAllocateInfo->commandBufferCount) {
7733 uint8_t* cgen_var_1_ptr = (uint8_t*)(*streamPtrPtr);
7734 for (uint32_t k = 0; k < pAllocateInfo->commandBufferCount; ++k) {
7735 uint64_t tmpval = (uint64_t)(pCommandBuffers[k]);
7736 memcpy(cgen_var_1_ptr + k * 8, &tmpval, sizeof(uint64_t));
7737 }
7738 *streamPtrPtr += 8 * pAllocateInfo->commandBufferCount;
7739 }
7740 /* is handle, possibly out */;
7741 stream->setHandleMapping(sResourceTracker->createMapping());
7742 if (pAllocateInfo->commandBufferCount) {
7743 uint64_t* cgen_var_2;
7744 stream->alloc((void**)&cgen_var_2, pAllocateInfo->commandBufferCount * 8);
7745 stream->read((uint64_t*)cgen_var_2, pAllocateInfo->commandBufferCount * 8);
7746 stream->handleMapping()->mapHandles_u64_VkCommandBuffer(
7747 cgen_var_2, (VkCommandBuffer*)pCommandBuffers, pAllocateInfo->commandBufferCount);
7748 }
7749 stream->unsetHandleMapping();
7750 VkResult vkAllocateCommandBuffers_VkResult_return = (VkResult)0;
7751 stream->read(&vkAllocateCommandBuffers_VkResult_return, sizeof(VkResult));
7752 ++encodeCount;
7753 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7754 pool->freeAll();
7755 stream->clearPool();
7756 }
7757 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7758 return vkAllocateCommandBuffers_VkResult_return;
7759 }
7760
vkFreeCommandBuffers(VkDevice device,VkCommandPool commandPool,uint32_t commandBufferCount,const VkCommandBuffer * pCommandBuffers,uint32_t doLock)7761 void VkEncoder::vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool,
7762 uint32_t commandBufferCount,
7763 const VkCommandBuffer* pCommandBuffers, uint32_t doLock) {
7764 (void)doLock;
7765 bool queueSubmitWithCommandsEnabled =
7766 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7767 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7768 auto stream = mImpl->stream();
7769 auto pool = mImpl->pool();
7770 VkDevice local_device;
7771 VkCommandPool local_commandPool;
7772 uint32_t local_commandBufferCount;
7773 VkCommandBuffer* local_pCommandBuffers;
7774 local_device = device;
7775 local_commandPool = commandPool;
7776 local_commandBufferCount = commandBufferCount;
7777 // Avoiding deepcopy for pCommandBuffers
7778 local_pCommandBuffers = (VkCommandBuffer*)pCommandBuffers;
7779 size_t count = 0;
7780 size_t* countPtr = &count;
7781 {
7782 uint64_t cgen_var_0;
7783 *countPtr += 1 * 8;
7784 uint64_t cgen_var_1;
7785 *countPtr += 1 * 8;
7786 *countPtr += sizeof(uint32_t);
7787 // WARNING PTR CHECK
7788 *countPtr += 8;
7789 if (local_pCommandBuffers) {
7790 if (((commandBufferCount))) {
7791 *countPtr += ((commandBufferCount)) * 8;
7792 }
7793 }
7794 }
7795 uint32_t packetSize_vkFreeCommandBuffers =
7796 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
7797 uint8_t* streamPtr = stream->reserve(packetSize_vkFreeCommandBuffers);
7798 uint8_t* packetBeginPtr = streamPtr;
7799 uint8_t** streamPtrPtr = &streamPtr;
7800 uint32_t opcode_vkFreeCommandBuffers = OP_vkFreeCommandBuffers;
7801 uint32_t seqno;
7802 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
7803 memcpy(streamPtr, &opcode_vkFreeCommandBuffers, sizeof(uint32_t));
7804 streamPtr += sizeof(uint32_t);
7805 memcpy(streamPtr, &packetSize_vkFreeCommandBuffers, sizeof(uint32_t));
7806 streamPtr += sizeof(uint32_t);
7807 if (queueSubmitWithCommandsEnabled) {
7808 memcpy(streamPtr, &seqno, sizeof(uint32_t));
7809 streamPtr += sizeof(uint32_t);
7810 }
7811 uint64_t cgen_var_0;
7812 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
7813 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7814 *streamPtrPtr += 1 * 8;
7815 uint64_t cgen_var_1;
7816 *&cgen_var_1 = get_host_u64_VkCommandPool((*&local_commandPool));
7817 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
7818 *streamPtrPtr += 1 * 8;
7819 memcpy(*streamPtrPtr, (uint32_t*)&local_commandBufferCount, sizeof(uint32_t));
7820 *streamPtrPtr += sizeof(uint32_t);
7821 // WARNING PTR CHECK
7822 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pCommandBuffers;
7823 memcpy((*streamPtrPtr), &cgen_var_2, 8);
7824 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
7825 *streamPtrPtr += 8;
7826 if (local_pCommandBuffers) {
7827 if (((commandBufferCount))) {
7828 uint8_t* cgen_var_2_0_ptr = (uint8_t*)(*streamPtrPtr);
7829 for (uint32_t k = 0; k < ((commandBufferCount)); ++k) {
7830 uint64_t tmpval = get_host_u64_VkCommandBuffer(local_pCommandBuffers[k]);
7831 memcpy(cgen_var_2_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
7832 }
7833 *streamPtrPtr += 8 * ((commandBufferCount));
7834 }
7835 }
7836 if (pCommandBuffers) {
7837 sResourceTracker->destroyMapping()->mapHandles_VkCommandBuffer(
7838 (VkCommandBuffer*)pCommandBuffers, ((commandBufferCount)));
7839 }
7840 stream->flush();
7841 ++encodeCount;
7842 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7843 pool->freeAll();
7844 stream->clearPool();
7845 }
7846 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7847 }
7848
vkBeginCommandBuffer(VkCommandBuffer commandBuffer,const VkCommandBufferBeginInfo * pBeginInfo,uint32_t doLock)7849 VkResult VkEncoder::vkBeginCommandBuffer(VkCommandBuffer commandBuffer,
7850 const VkCommandBufferBeginInfo* pBeginInfo,
7851 uint32_t doLock) {
7852 (void)doLock;
7853 bool queueSubmitWithCommandsEnabled =
7854 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7855 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7856 auto stream = mImpl->stream();
7857 auto pool = mImpl->pool();
7858 VkCommandBuffer local_commandBuffer;
7859 VkCommandBufferBeginInfo* local_pBeginInfo;
7860 local_commandBuffer = commandBuffer;
7861 local_pBeginInfo = nullptr;
7862 if (pBeginInfo) {
7863 local_pBeginInfo =
7864 (VkCommandBufferBeginInfo*)pool->alloc(sizeof(const VkCommandBufferBeginInfo));
7865 deepcopy_VkCommandBufferBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBeginInfo,
7866 (VkCommandBufferBeginInfo*)(local_pBeginInfo));
7867 }
7868 if (local_pBeginInfo) {
7869 transform_tohost_VkCommandBufferBeginInfo(sResourceTracker,
7870 (VkCommandBufferBeginInfo*)(local_pBeginInfo));
7871 }
7872 size_t count = 0;
7873 size_t* countPtr = &count;
7874 {
7875 uint64_t cgen_var_0;
7876 *countPtr += 1 * 8;
7877 count_VkCommandBufferBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
7878 (VkCommandBufferBeginInfo*)(local_pBeginInfo), countPtr);
7879 }
7880 uint32_t packetSize_vkBeginCommandBuffer = 4 + 4 + count;
7881 if (queueSubmitWithCommandsEnabled) packetSize_vkBeginCommandBuffer -= 8;
7882 uint8_t* streamPtr = stream->reserve(packetSize_vkBeginCommandBuffer);
7883 uint8_t* packetBeginPtr = streamPtr;
7884 uint8_t** streamPtrPtr = &streamPtr;
7885 uint32_t opcode_vkBeginCommandBuffer = OP_vkBeginCommandBuffer;
7886 memcpy(streamPtr, &opcode_vkBeginCommandBuffer, sizeof(uint32_t));
7887 streamPtr += sizeof(uint32_t);
7888 memcpy(streamPtr, &packetSize_vkBeginCommandBuffer, sizeof(uint32_t));
7889 streamPtr += sizeof(uint32_t);
7890 if (!queueSubmitWithCommandsEnabled) {
7891 uint64_t cgen_var_0;
7892 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
7893 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7894 *streamPtrPtr += 1 * 8;
7895 }
7896 reservedmarshal_VkCommandBufferBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
7897 (VkCommandBufferBeginInfo*)(local_pBeginInfo),
7898 streamPtrPtr);
7899 VkResult vkBeginCommandBuffer_VkResult_return = (VkResult)0;
7900 stream->read(&vkBeginCommandBuffer_VkResult_return, sizeof(VkResult));
7901 ++encodeCount;
7902 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7903 pool->freeAll();
7904 stream->clearPool();
7905 }
7906 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7907 return vkBeginCommandBuffer_VkResult_return;
7908 }
7909
vkEndCommandBuffer(VkCommandBuffer commandBuffer,uint32_t doLock)7910 VkResult VkEncoder::vkEndCommandBuffer(VkCommandBuffer commandBuffer, uint32_t doLock) {
7911 (void)doLock;
7912 bool queueSubmitWithCommandsEnabled =
7913 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7914 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7915 auto stream = mImpl->stream();
7916 auto pool = mImpl->pool();
7917 VkCommandBuffer local_commandBuffer;
7918 local_commandBuffer = commandBuffer;
7919 size_t count = 0;
7920 size_t* countPtr = &count;
7921 {
7922 uint64_t cgen_var_0;
7923 *countPtr += 1 * 8;
7924 }
7925 uint32_t packetSize_vkEndCommandBuffer = 4 + 4 + count;
7926 if (queueSubmitWithCommandsEnabled) packetSize_vkEndCommandBuffer -= 8;
7927 uint8_t* streamPtr = stream->reserve(packetSize_vkEndCommandBuffer);
7928 uint8_t* packetBeginPtr = streamPtr;
7929 uint8_t** streamPtrPtr = &streamPtr;
7930 uint32_t opcode_vkEndCommandBuffer = OP_vkEndCommandBuffer;
7931 memcpy(streamPtr, &opcode_vkEndCommandBuffer, sizeof(uint32_t));
7932 streamPtr += sizeof(uint32_t);
7933 memcpy(streamPtr, &packetSize_vkEndCommandBuffer, sizeof(uint32_t));
7934 streamPtr += sizeof(uint32_t);
7935 if (!queueSubmitWithCommandsEnabled) {
7936 uint64_t cgen_var_0;
7937 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
7938 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7939 *streamPtrPtr += 1 * 8;
7940 }
7941 VkResult vkEndCommandBuffer_VkResult_return = (VkResult)0;
7942 stream->read(&vkEndCommandBuffer_VkResult_return, sizeof(VkResult));
7943 ++encodeCount;
7944 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7945 pool->freeAll();
7946 stream->clearPool();
7947 }
7948 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7949 return vkEndCommandBuffer_VkResult_return;
7950 }
7951
vkResetCommandBuffer(VkCommandBuffer commandBuffer,VkCommandBufferResetFlags flags,uint32_t doLock)7952 VkResult VkEncoder::vkResetCommandBuffer(VkCommandBuffer commandBuffer,
7953 VkCommandBufferResetFlags flags, uint32_t doLock) {
7954 (void)doLock;
7955 bool queueSubmitWithCommandsEnabled =
7956 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
7957 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
7958 auto stream = mImpl->stream();
7959 auto pool = mImpl->pool();
7960 VkCommandBuffer local_commandBuffer;
7961 VkCommandBufferResetFlags local_flags;
7962 local_commandBuffer = commandBuffer;
7963 local_flags = flags;
7964 size_t count = 0;
7965 size_t* countPtr = &count;
7966 {
7967 uint64_t cgen_var_0;
7968 *countPtr += 1 * 8;
7969 *countPtr += sizeof(VkCommandBufferResetFlags);
7970 }
7971 uint32_t packetSize_vkResetCommandBuffer = 4 + 4 + count;
7972 if (queueSubmitWithCommandsEnabled) packetSize_vkResetCommandBuffer -= 8;
7973 uint8_t* streamPtr = stream->reserve(packetSize_vkResetCommandBuffer);
7974 uint8_t* packetBeginPtr = streamPtr;
7975 uint8_t** streamPtrPtr = &streamPtr;
7976 uint32_t opcode_vkResetCommandBuffer = OP_vkResetCommandBuffer;
7977 memcpy(streamPtr, &opcode_vkResetCommandBuffer, sizeof(uint32_t));
7978 streamPtr += sizeof(uint32_t);
7979 memcpy(streamPtr, &packetSize_vkResetCommandBuffer, sizeof(uint32_t));
7980 streamPtr += sizeof(uint32_t);
7981 if (!queueSubmitWithCommandsEnabled) {
7982 uint64_t cgen_var_0;
7983 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
7984 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
7985 *streamPtrPtr += 1 * 8;
7986 }
7987 memcpy(*streamPtrPtr, (VkCommandBufferResetFlags*)&local_flags,
7988 sizeof(VkCommandBufferResetFlags));
7989 *streamPtrPtr += sizeof(VkCommandBufferResetFlags);
7990 VkResult vkResetCommandBuffer_VkResult_return = (VkResult)0;
7991 stream->read(&vkResetCommandBuffer_VkResult_return, sizeof(VkResult));
7992 ++encodeCount;
7993 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
7994 pool->freeAll();
7995 stream->clearPool();
7996 }
7997 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
7998 return vkResetCommandBuffer_VkResult_return;
7999 }
8000
vkCmdBindPipeline(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipeline pipeline,uint32_t doLock)8001 void VkEncoder::vkCmdBindPipeline(VkCommandBuffer commandBuffer,
8002 VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline,
8003 uint32_t doLock) {
8004 (void)doLock;
8005 bool queueSubmitWithCommandsEnabled =
8006 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8007 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8008 auto stream = mImpl->stream();
8009 auto pool = mImpl->pool();
8010 VkCommandBuffer local_commandBuffer;
8011 VkPipelineBindPoint local_pipelineBindPoint;
8012 VkPipeline local_pipeline;
8013 local_commandBuffer = commandBuffer;
8014 local_pipelineBindPoint = pipelineBindPoint;
8015 local_pipeline = pipeline;
8016 size_t count = 0;
8017 size_t* countPtr = &count;
8018 {
8019 uint64_t cgen_var_0;
8020 *countPtr += 1 * 8;
8021 *countPtr += sizeof(VkPipelineBindPoint);
8022 uint64_t cgen_var_1;
8023 *countPtr += 1 * 8;
8024 }
8025 uint32_t packetSize_vkCmdBindPipeline = 4 + 4 + count;
8026 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindPipeline -= 8;
8027 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindPipeline);
8028 uint8_t* packetBeginPtr = streamPtr;
8029 uint8_t** streamPtrPtr = &streamPtr;
8030 uint32_t opcode_vkCmdBindPipeline = OP_vkCmdBindPipeline;
8031 memcpy(streamPtr, &opcode_vkCmdBindPipeline, sizeof(uint32_t));
8032 streamPtr += sizeof(uint32_t);
8033 memcpy(streamPtr, &packetSize_vkCmdBindPipeline, sizeof(uint32_t));
8034 streamPtr += sizeof(uint32_t);
8035 if (!queueSubmitWithCommandsEnabled) {
8036 uint64_t cgen_var_0;
8037 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8038 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8039 *streamPtrPtr += 1 * 8;
8040 }
8041 memcpy(*streamPtrPtr, (VkPipelineBindPoint*)&local_pipelineBindPoint,
8042 sizeof(VkPipelineBindPoint));
8043 *streamPtrPtr += sizeof(VkPipelineBindPoint);
8044 uint64_t cgen_var_0;
8045 *&cgen_var_0 = get_host_u64_VkPipeline((*&local_pipeline));
8046 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8047 *streamPtrPtr += 1 * 8;
8048 ++encodeCount;
8049 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8050 pool->freeAll();
8051 stream->clearPool();
8052 }
8053 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8054 }
8055
vkCmdSetViewport(VkCommandBuffer commandBuffer,uint32_t firstViewport,uint32_t viewportCount,const VkViewport * pViewports,uint32_t doLock)8056 void VkEncoder::vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport,
8057 uint32_t viewportCount, const VkViewport* pViewports,
8058 uint32_t doLock) {
8059 (void)doLock;
8060 bool queueSubmitWithCommandsEnabled =
8061 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8062 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8063 auto stream = mImpl->stream();
8064 auto pool = mImpl->pool();
8065 VkCommandBuffer local_commandBuffer;
8066 uint32_t local_firstViewport;
8067 uint32_t local_viewportCount;
8068 VkViewport* local_pViewports;
8069 local_commandBuffer = commandBuffer;
8070 local_firstViewport = firstViewport;
8071 local_viewportCount = viewportCount;
8072 local_pViewports = nullptr;
8073 if (pViewports) {
8074 local_pViewports = (VkViewport*)pool->alloc(((viewportCount)) * sizeof(const VkViewport));
8075 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
8076 deepcopy_VkViewport(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pViewports + i,
8077 (VkViewport*)(local_pViewports + i));
8078 }
8079 }
8080 if (local_pViewports) {
8081 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
8082 transform_tohost_VkViewport(sResourceTracker, (VkViewport*)(local_pViewports + i));
8083 }
8084 }
8085 size_t count = 0;
8086 size_t* countPtr = &count;
8087 {
8088 uint64_t cgen_var_0;
8089 *countPtr += 1 * 8;
8090 *countPtr += sizeof(uint32_t);
8091 *countPtr += sizeof(uint32_t);
8092 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
8093 count_VkViewport(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
8094 (VkViewport*)(local_pViewports + i), countPtr);
8095 }
8096 }
8097 uint32_t packetSize_vkCmdSetViewport = 4 + 4 + count;
8098 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetViewport -= 8;
8099 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetViewport);
8100 uint8_t* packetBeginPtr = streamPtr;
8101 uint8_t** streamPtrPtr = &streamPtr;
8102 uint32_t opcode_vkCmdSetViewport = OP_vkCmdSetViewport;
8103 memcpy(streamPtr, &opcode_vkCmdSetViewport, sizeof(uint32_t));
8104 streamPtr += sizeof(uint32_t);
8105 memcpy(streamPtr, &packetSize_vkCmdSetViewport, sizeof(uint32_t));
8106 streamPtr += sizeof(uint32_t);
8107 if (!queueSubmitWithCommandsEnabled) {
8108 uint64_t cgen_var_0;
8109 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8110 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8111 *streamPtrPtr += 1 * 8;
8112 }
8113 memcpy(*streamPtrPtr, (uint32_t*)&local_firstViewport, sizeof(uint32_t));
8114 *streamPtrPtr += sizeof(uint32_t);
8115 memcpy(*streamPtrPtr, (uint32_t*)&local_viewportCount, sizeof(uint32_t));
8116 *streamPtrPtr += sizeof(uint32_t);
8117 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
8118 reservedmarshal_VkViewport(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
8119 (VkViewport*)(local_pViewports + i), streamPtrPtr);
8120 }
8121 ++encodeCount;
8122 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8123 pool->freeAll();
8124 stream->clearPool();
8125 }
8126 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8127 }
8128
vkCmdSetScissor(VkCommandBuffer commandBuffer,uint32_t firstScissor,uint32_t scissorCount,const VkRect2D * pScissors,uint32_t doLock)8129 void VkEncoder::vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor,
8130 uint32_t scissorCount, const VkRect2D* pScissors, uint32_t doLock) {
8131 (void)doLock;
8132 bool queueSubmitWithCommandsEnabled =
8133 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8134 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8135 auto stream = mImpl->stream();
8136 auto pool = mImpl->pool();
8137 VkCommandBuffer local_commandBuffer;
8138 uint32_t local_firstScissor;
8139 uint32_t local_scissorCount;
8140 VkRect2D* local_pScissors;
8141 local_commandBuffer = commandBuffer;
8142 local_firstScissor = firstScissor;
8143 local_scissorCount = scissorCount;
8144 local_pScissors = nullptr;
8145 if (pScissors) {
8146 local_pScissors = (VkRect2D*)pool->alloc(((scissorCount)) * sizeof(const VkRect2D));
8147 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
8148 deepcopy_VkRect2D(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pScissors + i,
8149 (VkRect2D*)(local_pScissors + i));
8150 }
8151 }
8152 if (local_pScissors) {
8153 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
8154 transform_tohost_VkRect2D(sResourceTracker, (VkRect2D*)(local_pScissors + i));
8155 }
8156 }
8157 size_t count = 0;
8158 size_t* countPtr = &count;
8159 {
8160 uint64_t cgen_var_0;
8161 *countPtr += 1 * 8;
8162 *countPtr += sizeof(uint32_t);
8163 *countPtr += sizeof(uint32_t);
8164 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
8165 count_VkRect2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
8166 (VkRect2D*)(local_pScissors + i), countPtr);
8167 }
8168 }
8169 uint32_t packetSize_vkCmdSetScissor = 4 + 4 + count;
8170 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetScissor -= 8;
8171 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetScissor);
8172 uint8_t* packetBeginPtr = streamPtr;
8173 uint8_t** streamPtrPtr = &streamPtr;
8174 uint32_t opcode_vkCmdSetScissor = OP_vkCmdSetScissor;
8175 memcpy(streamPtr, &opcode_vkCmdSetScissor, sizeof(uint32_t));
8176 streamPtr += sizeof(uint32_t);
8177 memcpy(streamPtr, &packetSize_vkCmdSetScissor, sizeof(uint32_t));
8178 streamPtr += sizeof(uint32_t);
8179 if (!queueSubmitWithCommandsEnabled) {
8180 uint64_t cgen_var_0;
8181 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8182 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8183 *streamPtrPtr += 1 * 8;
8184 }
8185 memcpy(*streamPtrPtr, (uint32_t*)&local_firstScissor, sizeof(uint32_t));
8186 *streamPtrPtr += sizeof(uint32_t);
8187 memcpy(*streamPtrPtr, (uint32_t*)&local_scissorCount, sizeof(uint32_t));
8188 *streamPtrPtr += sizeof(uint32_t);
8189 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
8190 reservedmarshal_VkRect2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
8191 (VkRect2D*)(local_pScissors + i), streamPtrPtr);
8192 }
8193 ++encodeCount;
8194 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8195 pool->freeAll();
8196 stream->clearPool();
8197 }
8198 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8199 }
8200
vkCmdSetLineWidth(VkCommandBuffer commandBuffer,float lineWidth,uint32_t doLock)8201 void VkEncoder::vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth, uint32_t doLock) {
8202 (void)doLock;
8203 bool queueSubmitWithCommandsEnabled =
8204 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8205 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8206 auto stream = mImpl->stream();
8207 auto pool = mImpl->pool();
8208 VkCommandBuffer local_commandBuffer;
8209 float local_lineWidth;
8210 local_commandBuffer = commandBuffer;
8211 local_lineWidth = lineWidth;
8212 size_t count = 0;
8213 size_t* countPtr = &count;
8214 {
8215 uint64_t cgen_var_0;
8216 *countPtr += 1 * 8;
8217 *countPtr += sizeof(float);
8218 }
8219 uint32_t packetSize_vkCmdSetLineWidth = 4 + 4 + count;
8220 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetLineWidth -= 8;
8221 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetLineWidth);
8222 uint8_t* packetBeginPtr = streamPtr;
8223 uint8_t** streamPtrPtr = &streamPtr;
8224 uint32_t opcode_vkCmdSetLineWidth = OP_vkCmdSetLineWidth;
8225 memcpy(streamPtr, &opcode_vkCmdSetLineWidth, sizeof(uint32_t));
8226 streamPtr += sizeof(uint32_t);
8227 memcpy(streamPtr, &packetSize_vkCmdSetLineWidth, sizeof(uint32_t));
8228 streamPtr += sizeof(uint32_t);
8229 if (!queueSubmitWithCommandsEnabled) {
8230 uint64_t cgen_var_0;
8231 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8232 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8233 *streamPtrPtr += 1 * 8;
8234 }
8235 memcpy(*streamPtrPtr, (float*)&local_lineWidth, sizeof(float));
8236 *streamPtrPtr += sizeof(float);
8237 ++encodeCount;
8238 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8239 pool->freeAll();
8240 stream->clearPool();
8241 }
8242 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8243 }
8244
vkCmdSetDepthBias(VkCommandBuffer commandBuffer,float depthBiasConstantFactor,float depthBiasClamp,float depthBiasSlopeFactor,uint32_t doLock)8245 void VkEncoder::vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor,
8246 float depthBiasClamp, float depthBiasSlopeFactor,
8247 uint32_t doLock) {
8248 (void)doLock;
8249 bool queueSubmitWithCommandsEnabled =
8250 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8251 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8252 auto stream = mImpl->stream();
8253 auto pool = mImpl->pool();
8254 VkCommandBuffer local_commandBuffer;
8255 float local_depthBiasConstantFactor;
8256 float local_depthBiasClamp;
8257 float local_depthBiasSlopeFactor;
8258 local_commandBuffer = commandBuffer;
8259 local_depthBiasConstantFactor = depthBiasConstantFactor;
8260 local_depthBiasClamp = depthBiasClamp;
8261 local_depthBiasSlopeFactor = depthBiasSlopeFactor;
8262 size_t count = 0;
8263 size_t* countPtr = &count;
8264 {
8265 uint64_t cgen_var_0;
8266 *countPtr += 1 * 8;
8267 *countPtr += sizeof(float);
8268 *countPtr += sizeof(float);
8269 *countPtr += sizeof(float);
8270 }
8271 uint32_t packetSize_vkCmdSetDepthBias = 4 + 4 + count;
8272 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthBias -= 8;
8273 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthBias);
8274 uint8_t* packetBeginPtr = streamPtr;
8275 uint8_t** streamPtrPtr = &streamPtr;
8276 uint32_t opcode_vkCmdSetDepthBias = OP_vkCmdSetDepthBias;
8277 memcpy(streamPtr, &opcode_vkCmdSetDepthBias, sizeof(uint32_t));
8278 streamPtr += sizeof(uint32_t);
8279 memcpy(streamPtr, &packetSize_vkCmdSetDepthBias, sizeof(uint32_t));
8280 streamPtr += sizeof(uint32_t);
8281 if (!queueSubmitWithCommandsEnabled) {
8282 uint64_t cgen_var_0;
8283 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8284 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8285 *streamPtrPtr += 1 * 8;
8286 }
8287 memcpy(*streamPtrPtr, (float*)&local_depthBiasConstantFactor, sizeof(float));
8288 *streamPtrPtr += sizeof(float);
8289 memcpy(*streamPtrPtr, (float*)&local_depthBiasClamp, sizeof(float));
8290 *streamPtrPtr += sizeof(float);
8291 memcpy(*streamPtrPtr, (float*)&local_depthBiasSlopeFactor, sizeof(float));
8292 *streamPtrPtr += sizeof(float);
8293 ++encodeCount;
8294 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8295 pool->freeAll();
8296 stream->clearPool();
8297 }
8298 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8299 }
8300
vkCmdSetBlendConstants(VkCommandBuffer commandBuffer,const float blendConstants[4],uint32_t doLock)8301 void VkEncoder::vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4],
8302 uint32_t doLock) {
8303 (void)doLock;
8304 bool queueSubmitWithCommandsEnabled =
8305 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8306 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8307 auto stream = mImpl->stream();
8308 auto pool = mImpl->pool();
8309 VkCommandBuffer local_commandBuffer;
8310 float local_blendConstants[4];
8311 local_commandBuffer = commandBuffer;
8312 memcpy(local_blendConstants, blendConstants, 4 * sizeof(const float));
8313 size_t count = 0;
8314 size_t* countPtr = &count;
8315 {
8316 uint64_t cgen_var_0;
8317 *countPtr += 1 * 8;
8318 *countPtr += 4 * sizeof(float);
8319 }
8320 uint32_t packetSize_vkCmdSetBlendConstants = 4 + 4 + count;
8321 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetBlendConstants -= 8;
8322 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetBlendConstants);
8323 uint8_t* packetBeginPtr = streamPtr;
8324 uint8_t** streamPtrPtr = &streamPtr;
8325 uint32_t opcode_vkCmdSetBlendConstants = OP_vkCmdSetBlendConstants;
8326 memcpy(streamPtr, &opcode_vkCmdSetBlendConstants, sizeof(uint32_t));
8327 streamPtr += sizeof(uint32_t);
8328 memcpy(streamPtr, &packetSize_vkCmdSetBlendConstants, sizeof(uint32_t));
8329 streamPtr += sizeof(uint32_t);
8330 if (!queueSubmitWithCommandsEnabled) {
8331 uint64_t cgen_var_0;
8332 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8333 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8334 *streamPtrPtr += 1 * 8;
8335 }
8336 memcpy(*streamPtrPtr, (float*)local_blendConstants, 4 * sizeof(float));
8337 *streamPtrPtr += 4 * sizeof(float);
8338 ++encodeCount;
8339 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8340 pool->freeAll();
8341 stream->clearPool();
8342 }
8343 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8344 }
8345
vkCmdSetDepthBounds(VkCommandBuffer commandBuffer,float minDepthBounds,float maxDepthBounds,uint32_t doLock)8346 void VkEncoder::vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds,
8347 float maxDepthBounds, uint32_t doLock) {
8348 (void)doLock;
8349 bool queueSubmitWithCommandsEnabled =
8350 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8351 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8352 auto stream = mImpl->stream();
8353 auto pool = mImpl->pool();
8354 VkCommandBuffer local_commandBuffer;
8355 float local_minDepthBounds;
8356 float local_maxDepthBounds;
8357 local_commandBuffer = commandBuffer;
8358 local_minDepthBounds = minDepthBounds;
8359 local_maxDepthBounds = maxDepthBounds;
8360 size_t count = 0;
8361 size_t* countPtr = &count;
8362 {
8363 uint64_t cgen_var_0;
8364 *countPtr += 1 * 8;
8365 *countPtr += sizeof(float);
8366 *countPtr += sizeof(float);
8367 }
8368 uint32_t packetSize_vkCmdSetDepthBounds = 4 + 4 + count;
8369 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthBounds -= 8;
8370 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthBounds);
8371 uint8_t* packetBeginPtr = streamPtr;
8372 uint8_t** streamPtrPtr = &streamPtr;
8373 uint32_t opcode_vkCmdSetDepthBounds = OP_vkCmdSetDepthBounds;
8374 memcpy(streamPtr, &opcode_vkCmdSetDepthBounds, sizeof(uint32_t));
8375 streamPtr += sizeof(uint32_t);
8376 memcpy(streamPtr, &packetSize_vkCmdSetDepthBounds, sizeof(uint32_t));
8377 streamPtr += sizeof(uint32_t);
8378 if (!queueSubmitWithCommandsEnabled) {
8379 uint64_t cgen_var_0;
8380 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8381 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8382 *streamPtrPtr += 1 * 8;
8383 }
8384 memcpy(*streamPtrPtr, (float*)&local_minDepthBounds, sizeof(float));
8385 *streamPtrPtr += sizeof(float);
8386 memcpy(*streamPtrPtr, (float*)&local_maxDepthBounds, sizeof(float));
8387 *streamPtrPtr += sizeof(float);
8388 ++encodeCount;
8389 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8390 pool->freeAll();
8391 stream->clearPool();
8392 }
8393 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8394 }
8395
vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t compareMask,uint32_t doLock)8396 void VkEncoder::vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer,
8397 VkStencilFaceFlags faceMask, uint32_t compareMask,
8398 uint32_t doLock) {
8399 (void)doLock;
8400 bool queueSubmitWithCommandsEnabled =
8401 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8402 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8403 auto stream = mImpl->stream();
8404 auto pool = mImpl->pool();
8405 VkCommandBuffer local_commandBuffer;
8406 VkStencilFaceFlags local_faceMask;
8407 uint32_t local_compareMask;
8408 local_commandBuffer = commandBuffer;
8409 local_faceMask = faceMask;
8410 local_compareMask = compareMask;
8411 size_t count = 0;
8412 size_t* countPtr = &count;
8413 {
8414 uint64_t cgen_var_0;
8415 *countPtr += 1 * 8;
8416 *countPtr += sizeof(VkStencilFaceFlags);
8417 *countPtr += sizeof(uint32_t);
8418 }
8419 uint32_t packetSize_vkCmdSetStencilCompareMask = 4 + 4 + count;
8420 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetStencilCompareMask -= 8;
8421 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetStencilCompareMask);
8422 uint8_t* packetBeginPtr = streamPtr;
8423 uint8_t** streamPtrPtr = &streamPtr;
8424 uint32_t opcode_vkCmdSetStencilCompareMask = OP_vkCmdSetStencilCompareMask;
8425 memcpy(streamPtr, &opcode_vkCmdSetStencilCompareMask, sizeof(uint32_t));
8426 streamPtr += sizeof(uint32_t);
8427 memcpy(streamPtr, &packetSize_vkCmdSetStencilCompareMask, sizeof(uint32_t));
8428 streamPtr += sizeof(uint32_t);
8429 if (!queueSubmitWithCommandsEnabled) {
8430 uint64_t cgen_var_0;
8431 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8432 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8433 *streamPtrPtr += 1 * 8;
8434 }
8435 memcpy(*streamPtrPtr, (VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
8436 *streamPtrPtr += sizeof(VkStencilFaceFlags);
8437 memcpy(*streamPtrPtr, (uint32_t*)&local_compareMask, sizeof(uint32_t));
8438 *streamPtrPtr += sizeof(uint32_t);
8439 ++encodeCount;
8440 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8441 pool->freeAll();
8442 stream->clearPool();
8443 }
8444 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8445 }
8446
vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t writeMask,uint32_t doLock)8447 void VkEncoder::vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
8448 uint32_t writeMask, uint32_t doLock) {
8449 (void)doLock;
8450 bool queueSubmitWithCommandsEnabled =
8451 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8452 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8453 auto stream = mImpl->stream();
8454 auto pool = mImpl->pool();
8455 VkCommandBuffer local_commandBuffer;
8456 VkStencilFaceFlags local_faceMask;
8457 uint32_t local_writeMask;
8458 local_commandBuffer = commandBuffer;
8459 local_faceMask = faceMask;
8460 local_writeMask = writeMask;
8461 size_t count = 0;
8462 size_t* countPtr = &count;
8463 {
8464 uint64_t cgen_var_0;
8465 *countPtr += 1 * 8;
8466 *countPtr += sizeof(VkStencilFaceFlags);
8467 *countPtr += sizeof(uint32_t);
8468 }
8469 uint32_t packetSize_vkCmdSetStencilWriteMask = 4 + 4 + count;
8470 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetStencilWriteMask -= 8;
8471 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetStencilWriteMask);
8472 uint8_t* packetBeginPtr = streamPtr;
8473 uint8_t** streamPtrPtr = &streamPtr;
8474 uint32_t opcode_vkCmdSetStencilWriteMask = OP_vkCmdSetStencilWriteMask;
8475 memcpy(streamPtr, &opcode_vkCmdSetStencilWriteMask, sizeof(uint32_t));
8476 streamPtr += sizeof(uint32_t);
8477 memcpy(streamPtr, &packetSize_vkCmdSetStencilWriteMask, sizeof(uint32_t));
8478 streamPtr += sizeof(uint32_t);
8479 if (!queueSubmitWithCommandsEnabled) {
8480 uint64_t cgen_var_0;
8481 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8482 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8483 *streamPtrPtr += 1 * 8;
8484 }
8485 memcpy(*streamPtrPtr, (VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
8486 *streamPtrPtr += sizeof(VkStencilFaceFlags);
8487 memcpy(*streamPtrPtr, (uint32_t*)&local_writeMask, sizeof(uint32_t));
8488 *streamPtrPtr += sizeof(uint32_t);
8489 ++encodeCount;
8490 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8491 pool->freeAll();
8492 stream->clearPool();
8493 }
8494 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8495 }
8496
vkCmdSetStencilReference(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t reference,uint32_t doLock)8497 void VkEncoder::vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
8498 uint32_t reference, uint32_t doLock) {
8499 (void)doLock;
8500 bool queueSubmitWithCommandsEnabled =
8501 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8502 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8503 auto stream = mImpl->stream();
8504 auto pool = mImpl->pool();
8505 VkCommandBuffer local_commandBuffer;
8506 VkStencilFaceFlags local_faceMask;
8507 uint32_t local_reference;
8508 local_commandBuffer = commandBuffer;
8509 local_faceMask = faceMask;
8510 local_reference = reference;
8511 size_t count = 0;
8512 size_t* countPtr = &count;
8513 {
8514 uint64_t cgen_var_0;
8515 *countPtr += 1 * 8;
8516 *countPtr += sizeof(VkStencilFaceFlags);
8517 *countPtr += sizeof(uint32_t);
8518 }
8519 uint32_t packetSize_vkCmdSetStencilReference = 4 + 4 + count;
8520 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetStencilReference -= 8;
8521 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetStencilReference);
8522 uint8_t* packetBeginPtr = streamPtr;
8523 uint8_t** streamPtrPtr = &streamPtr;
8524 uint32_t opcode_vkCmdSetStencilReference = OP_vkCmdSetStencilReference;
8525 memcpy(streamPtr, &opcode_vkCmdSetStencilReference, sizeof(uint32_t));
8526 streamPtr += sizeof(uint32_t);
8527 memcpy(streamPtr, &packetSize_vkCmdSetStencilReference, sizeof(uint32_t));
8528 streamPtr += sizeof(uint32_t);
8529 if (!queueSubmitWithCommandsEnabled) {
8530 uint64_t cgen_var_0;
8531 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8532 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8533 *streamPtrPtr += 1 * 8;
8534 }
8535 memcpy(*streamPtrPtr, (VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
8536 *streamPtrPtr += sizeof(VkStencilFaceFlags);
8537 memcpy(*streamPtrPtr, (uint32_t*)&local_reference, sizeof(uint32_t));
8538 *streamPtrPtr += sizeof(uint32_t);
8539 ++encodeCount;
8540 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8541 pool->freeAll();
8542 stream->clearPool();
8543 }
8544 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8545 }
8546
vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipelineLayout layout,uint32_t firstSet,uint32_t descriptorSetCount,const VkDescriptorSet * pDescriptorSets,uint32_t dynamicOffsetCount,const uint32_t * pDynamicOffsets,uint32_t doLock)8547 void VkEncoder::vkCmdBindDescriptorSets(
8548 VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout,
8549 uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets,
8550 uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets, uint32_t doLock) {
8551 (void)doLock;
8552 bool queueSubmitWithCommandsEnabled =
8553 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8554 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8555 auto stream = mImpl->stream();
8556 auto pool = mImpl->pool();
8557 VkCommandBuffer local_commandBuffer;
8558 VkPipelineBindPoint local_pipelineBindPoint;
8559 VkPipelineLayout local_layout;
8560 uint32_t local_firstSet;
8561 uint32_t local_descriptorSetCount;
8562 VkDescriptorSet* local_pDescriptorSets;
8563 uint32_t local_dynamicOffsetCount;
8564 uint32_t* local_pDynamicOffsets;
8565 local_commandBuffer = commandBuffer;
8566 local_pipelineBindPoint = pipelineBindPoint;
8567 local_layout = layout;
8568 local_firstSet = firstSet;
8569 local_descriptorSetCount = descriptorSetCount;
8570 // Avoiding deepcopy for pDescriptorSets
8571 local_pDescriptorSets = (VkDescriptorSet*)pDescriptorSets;
8572 local_dynamicOffsetCount = dynamicOffsetCount;
8573 // Avoiding deepcopy for pDynamicOffsets
8574 local_pDynamicOffsets = (uint32_t*)pDynamicOffsets;
8575 size_t count = 0;
8576 size_t* countPtr = &count;
8577 {
8578 uint64_t cgen_var_0;
8579 *countPtr += 1 * 8;
8580 *countPtr += sizeof(VkPipelineBindPoint);
8581 uint64_t cgen_var_1;
8582 *countPtr += 1 * 8;
8583 *countPtr += sizeof(uint32_t);
8584 *countPtr += sizeof(uint32_t);
8585 if (((descriptorSetCount))) {
8586 *countPtr += ((descriptorSetCount)) * 8;
8587 }
8588 *countPtr += sizeof(uint32_t);
8589 *countPtr += ((dynamicOffsetCount)) * sizeof(uint32_t);
8590 }
8591 uint32_t packetSize_vkCmdBindDescriptorSets = 4 + 4 + count;
8592 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindDescriptorSets -= 8;
8593 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindDescriptorSets);
8594 uint8_t* packetBeginPtr = streamPtr;
8595 uint8_t** streamPtrPtr = &streamPtr;
8596 uint32_t opcode_vkCmdBindDescriptorSets = OP_vkCmdBindDescriptorSets;
8597 memcpy(streamPtr, &opcode_vkCmdBindDescriptorSets, sizeof(uint32_t));
8598 streamPtr += sizeof(uint32_t);
8599 memcpy(streamPtr, &packetSize_vkCmdBindDescriptorSets, sizeof(uint32_t));
8600 streamPtr += sizeof(uint32_t);
8601 if (!queueSubmitWithCommandsEnabled) {
8602 uint64_t cgen_var_0;
8603 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8604 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8605 *streamPtrPtr += 1 * 8;
8606 }
8607 memcpy(*streamPtrPtr, (VkPipelineBindPoint*)&local_pipelineBindPoint,
8608 sizeof(VkPipelineBindPoint));
8609 *streamPtrPtr += sizeof(VkPipelineBindPoint);
8610 uint64_t cgen_var_0;
8611 *&cgen_var_0 = get_host_u64_VkPipelineLayout((*&local_layout));
8612 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8613 *streamPtrPtr += 1 * 8;
8614 memcpy(*streamPtrPtr, (uint32_t*)&local_firstSet, sizeof(uint32_t));
8615 *streamPtrPtr += sizeof(uint32_t);
8616 memcpy(*streamPtrPtr, (uint32_t*)&local_descriptorSetCount, sizeof(uint32_t));
8617 *streamPtrPtr += sizeof(uint32_t);
8618 if (((descriptorSetCount))) {
8619 uint8_t* cgen_var_1_ptr = (uint8_t*)(*streamPtrPtr);
8620 for (uint32_t k = 0; k < ((descriptorSetCount)); ++k) {
8621 uint64_t tmpval = get_host_u64_VkDescriptorSet(local_pDescriptorSets[k]);
8622 memcpy(cgen_var_1_ptr + k * 8, &tmpval, sizeof(uint64_t));
8623 }
8624 *streamPtrPtr += 8 * ((descriptorSetCount));
8625 }
8626 memcpy(*streamPtrPtr, (uint32_t*)&local_dynamicOffsetCount, sizeof(uint32_t));
8627 *streamPtrPtr += sizeof(uint32_t);
8628 memcpy(*streamPtrPtr, (uint32_t*)local_pDynamicOffsets,
8629 ((dynamicOffsetCount)) * sizeof(uint32_t));
8630 *streamPtrPtr += ((dynamicOffsetCount)) * sizeof(uint32_t);
8631 ++encodeCount;
8632 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8633 pool->freeAll();
8634 stream->clearPool();
8635 }
8636 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8637 }
8638
vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkIndexType indexType,uint32_t doLock)8639 void VkEncoder::vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer,
8640 VkDeviceSize offset, VkIndexType indexType, uint32_t doLock) {
8641 (void)doLock;
8642 bool queueSubmitWithCommandsEnabled =
8643 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8644 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8645 auto stream = mImpl->stream();
8646 auto pool = mImpl->pool();
8647 VkCommandBuffer local_commandBuffer;
8648 VkBuffer local_buffer;
8649 VkDeviceSize local_offset;
8650 VkIndexType local_indexType;
8651 local_commandBuffer = commandBuffer;
8652 local_buffer = buffer;
8653 local_offset = offset;
8654 local_indexType = indexType;
8655 size_t count = 0;
8656 size_t* countPtr = &count;
8657 {
8658 uint64_t cgen_var_0;
8659 *countPtr += 1 * 8;
8660 uint64_t cgen_var_1;
8661 *countPtr += 1 * 8;
8662 *countPtr += sizeof(VkDeviceSize);
8663 *countPtr += sizeof(VkIndexType);
8664 }
8665 uint32_t packetSize_vkCmdBindIndexBuffer = 4 + 4 + count;
8666 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindIndexBuffer -= 8;
8667 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindIndexBuffer);
8668 uint8_t* packetBeginPtr = streamPtr;
8669 uint8_t** streamPtrPtr = &streamPtr;
8670 uint32_t opcode_vkCmdBindIndexBuffer = OP_vkCmdBindIndexBuffer;
8671 memcpy(streamPtr, &opcode_vkCmdBindIndexBuffer, sizeof(uint32_t));
8672 streamPtr += sizeof(uint32_t);
8673 memcpy(streamPtr, &packetSize_vkCmdBindIndexBuffer, sizeof(uint32_t));
8674 streamPtr += sizeof(uint32_t);
8675 if (!queueSubmitWithCommandsEnabled) {
8676 uint64_t cgen_var_0;
8677 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8678 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8679 *streamPtrPtr += 1 * 8;
8680 }
8681 uint64_t cgen_var_0;
8682 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_buffer));
8683 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8684 *streamPtrPtr += 1 * 8;
8685 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
8686 *streamPtrPtr += sizeof(VkDeviceSize);
8687 memcpy(*streamPtrPtr, (VkIndexType*)&local_indexType, sizeof(VkIndexType));
8688 *streamPtrPtr += sizeof(VkIndexType);
8689 ++encodeCount;
8690 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8691 pool->freeAll();
8692 stream->clearPool();
8693 }
8694 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8695 }
8696
vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets,uint32_t doLock)8697 void VkEncoder::vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding,
8698 uint32_t bindingCount, const VkBuffer* pBuffers,
8699 const VkDeviceSize* pOffsets, uint32_t doLock) {
8700 (void)doLock;
8701 bool queueSubmitWithCommandsEnabled =
8702 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8703 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8704 auto stream = mImpl->stream();
8705 auto pool = mImpl->pool();
8706 VkCommandBuffer local_commandBuffer;
8707 uint32_t local_firstBinding;
8708 uint32_t local_bindingCount;
8709 VkBuffer* local_pBuffers;
8710 VkDeviceSize* local_pOffsets;
8711 local_commandBuffer = commandBuffer;
8712 local_firstBinding = firstBinding;
8713 local_bindingCount = bindingCount;
8714 // Avoiding deepcopy for pBuffers
8715 local_pBuffers = (VkBuffer*)pBuffers;
8716 // Avoiding deepcopy for pOffsets
8717 local_pOffsets = (VkDeviceSize*)pOffsets;
8718 size_t count = 0;
8719 size_t* countPtr = &count;
8720 {
8721 uint64_t cgen_var_0;
8722 *countPtr += 1 * 8;
8723 *countPtr += sizeof(uint32_t);
8724 *countPtr += sizeof(uint32_t);
8725 if (((bindingCount))) {
8726 *countPtr += ((bindingCount)) * 8;
8727 }
8728 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
8729 }
8730 uint32_t packetSize_vkCmdBindVertexBuffers = 4 + 4 + count;
8731 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindVertexBuffers -= 8;
8732 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindVertexBuffers);
8733 uint8_t* packetBeginPtr = streamPtr;
8734 uint8_t** streamPtrPtr = &streamPtr;
8735 uint32_t opcode_vkCmdBindVertexBuffers = OP_vkCmdBindVertexBuffers;
8736 memcpy(streamPtr, &opcode_vkCmdBindVertexBuffers, sizeof(uint32_t));
8737 streamPtr += sizeof(uint32_t);
8738 memcpy(streamPtr, &packetSize_vkCmdBindVertexBuffers, sizeof(uint32_t));
8739 streamPtr += sizeof(uint32_t);
8740 if (!queueSubmitWithCommandsEnabled) {
8741 uint64_t cgen_var_0;
8742 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8743 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8744 *streamPtrPtr += 1 * 8;
8745 }
8746 memcpy(*streamPtrPtr, (uint32_t*)&local_firstBinding, sizeof(uint32_t));
8747 *streamPtrPtr += sizeof(uint32_t);
8748 memcpy(*streamPtrPtr, (uint32_t*)&local_bindingCount, sizeof(uint32_t));
8749 *streamPtrPtr += sizeof(uint32_t);
8750 if (((bindingCount))) {
8751 uint8_t* cgen_var_0_ptr = (uint8_t*)(*streamPtrPtr);
8752 for (uint32_t k = 0; k < ((bindingCount)); ++k) {
8753 uint64_t tmpval = get_host_u64_VkBuffer(local_pBuffers[k]);
8754 memcpy(cgen_var_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
8755 }
8756 *streamPtrPtr += 8 * ((bindingCount));
8757 }
8758 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pOffsets, ((bindingCount)) * sizeof(VkDeviceSize));
8759 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
8760 ++encodeCount;
8761 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8762 pool->freeAll();
8763 stream->clearPool();
8764 }
8765 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8766 }
8767
vkCmdDraw(VkCommandBuffer commandBuffer,uint32_t vertexCount,uint32_t instanceCount,uint32_t firstVertex,uint32_t firstInstance,uint32_t doLock)8768 void VkEncoder::vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount,
8769 uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance,
8770 uint32_t doLock) {
8771 (void)doLock;
8772 bool queueSubmitWithCommandsEnabled =
8773 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8774 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8775 auto stream = mImpl->stream();
8776 auto pool = mImpl->pool();
8777 VkCommandBuffer local_commandBuffer;
8778 uint32_t local_vertexCount;
8779 uint32_t local_instanceCount;
8780 uint32_t local_firstVertex;
8781 uint32_t local_firstInstance;
8782 local_commandBuffer = commandBuffer;
8783 local_vertexCount = vertexCount;
8784 local_instanceCount = instanceCount;
8785 local_firstVertex = firstVertex;
8786 local_firstInstance = firstInstance;
8787 size_t count = 0;
8788 size_t* countPtr = &count;
8789 {
8790 uint64_t cgen_var_0;
8791 *countPtr += 1 * 8;
8792 *countPtr += sizeof(uint32_t);
8793 *countPtr += sizeof(uint32_t);
8794 *countPtr += sizeof(uint32_t);
8795 *countPtr += sizeof(uint32_t);
8796 }
8797 uint32_t packetSize_vkCmdDraw = 4 + 4 + count;
8798 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDraw -= 8;
8799 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdDraw);
8800 uint8_t* packetBeginPtr = streamPtr;
8801 uint8_t** streamPtrPtr = &streamPtr;
8802 uint32_t opcode_vkCmdDraw = OP_vkCmdDraw;
8803 memcpy(streamPtr, &opcode_vkCmdDraw, sizeof(uint32_t));
8804 streamPtr += sizeof(uint32_t);
8805 memcpy(streamPtr, &packetSize_vkCmdDraw, sizeof(uint32_t));
8806 streamPtr += sizeof(uint32_t);
8807 if (!queueSubmitWithCommandsEnabled) {
8808 uint64_t cgen_var_0;
8809 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8810 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8811 *streamPtrPtr += 1 * 8;
8812 }
8813 memcpy(*streamPtrPtr, (uint32_t*)&local_vertexCount, sizeof(uint32_t));
8814 *streamPtrPtr += sizeof(uint32_t);
8815 memcpy(*streamPtrPtr, (uint32_t*)&local_instanceCount, sizeof(uint32_t));
8816 *streamPtrPtr += sizeof(uint32_t);
8817 memcpy(*streamPtrPtr, (uint32_t*)&local_firstVertex, sizeof(uint32_t));
8818 *streamPtrPtr += sizeof(uint32_t);
8819 memcpy(*streamPtrPtr, (uint32_t*)&local_firstInstance, sizeof(uint32_t));
8820 *streamPtrPtr += sizeof(uint32_t);
8821 ++encodeCount;
8822 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8823 pool->freeAll();
8824 stream->clearPool();
8825 }
8826 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8827 }
8828
vkCmdDrawIndexed(VkCommandBuffer commandBuffer,uint32_t indexCount,uint32_t instanceCount,uint32_t firstIndex,int32_t vertexOffset,uint32_t firstInstance,uint32_t doLock)8829 void VkEncoder::vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount,
8830 uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset,
8831 uint32_t firstInstance, uint32_t doLock) {
8832 (void)doLock;
8833 bool queueSubmitWithCommandsEnabled =
8834 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8835 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8836 auto stream = mImpl->stream();
8837 auto pool = mImpl->pool();
8838 VkCommandBuffer local_commandBuffer;
8839 uint32_t local_indexCount;
8840 uint32_t local_instanceCount;
8841 uint32_t local_firstIndex;
8842 int32_t local_vertexOffset;
8843 uint32_t local_firstInstance;
8844 local_commandBuffer = commandBuffer;
8845 local_indexCount = indexCount;
8846 local_instanceCount = instanceCount;
8847 local_firstIndex = firstIndex;
8848 local_vertexOffset = vertexOffset;
8849 local_firstInstance = firstInstance;
8850 size_t count = 0;
8851 size_t* countPtr = &count;
8852 {
8853 uint64_t cgen_var_0;
8854 *countPtr += 1 * 8;
8855 *countPtr += sizeof(uint32_t);
8856 *countPtr += sizeof(uint32_t);
8857 *countPtr += sizeof(uint32_t);
8858 *countPtr += sizeof(int32_t);
8859 *countPtr += sizeof(uint32_t);
8860 }
8861 uint32_t packetSize_vkCmdDrawIndexed = 4 + 4 + count;
8862 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDrawIndexed -= 8;
8863 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdDrawIndexed);
8864 uint8_t* packetBeginPtr = streamPtr;
8865 uint8_t** streamPtrPtr = &streamPtr;
8866 uint32_t opcode_vkCmdDrawIndexed = OP_vkCmdDrawIndexed;
8867 memcpy(streamPtr, &opcode_vkCmdDrawIndexed, sizeof(uint32_t));
8868 streamPtr += sizeof(uint32_t);
8869 memcpy(streamPtr, &packetSize_vkCmdDrawIndexed, sizeof(uint32_t));
8870 streamPtr += sizeof(uint32_t);
8871 if (!queueSubmitWithCommandsEnabled) {
8872 uint64_t cgen_var_0;
8873 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8874 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8875 *streamPtrPtr += 1 * 8;
8876 }
8877 memcpy(*streamPtrPtr, (uint32_t*)&local_indexCount, sizeof(uint32_t));
8878 *streamPtrPtr += sizeof(uint32_t);
8879 memcpy(*streamPtrPtr, (uint32_t*)&local_instanceCount, sizeof(uint32_t));
8880 *streamPtrPtr += sizeof(uint32_t);
8881 memcpy(*streamPtrPtr, (uint32_t*)&local_firstIndex, sizeof(uint32_t));
8882 *streamPtrPtr += sizeof(uint32_t);
8883 memcpy(*streamPtrPtr, (int32_t*)&local_vertexOffset, sizeof(int32_t));
8884 *streamPtrPtr += sizeof(int32_t);
8885 memcpy(*streamPtrPtr, (uint32_t*)&local_firstInstance, sizeof(uint32_t));
8886 *streamPtrPtr += sizeof(uint32_t);
8887 ++encodeCount;
8888 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8889 pool->freeAll();
8890 stream->clearPool();
8891 }
8892 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8893 }
8894
vkCmdDrawIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride,uint32_t doLock)8895 void VkEncoder::vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer,
8896 VkDeviceSize offset, uint32_t drawCount, uint32_t stride,
8897 uint32_t doLock) {
8898 (void)doLock;
8899 bool queueSubmitWithCommandsEnabled =
8900 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8901 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8902 auto stream = mImpl->stream();
8903 auto pool = mImpl->pool();
8904 VkCommandBuffer local_commandBuffer;
8905 VkBuffer local_buffer;
8906 VkDeviceSize local_offset;
8907 uint32_t local_drawCount;
8908 uint32_t local_stride;
8909 local_commandBuffer = commandBuffer;
8910 local_buffer = buffer;
8911 local_offset = offset;
8912 local_drawCount = drawCount;
8913 local_stride = stride;
8914 size_t count = 0;
8915 size_t* countPtr = &count;
8916 {
8917 uint64_t cgen_var_0;
8918 *countPtr += 1 * 8;
8919 uint64_t cgen_var_1;
8920 *countPtr += 1 * 8;
8921 *countPtr += sizeof(VkDeviceSize);
8922 *countPtr += sizeof(uint32_t);
8923 *countPtr += sizeof(uint32_t);
8924 }
8925 uint32_t packetSize_vkCmdDrawIndirect = 4 + 4 + count;
8926 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDrawIndirect -= 8;
8927 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdDrawIndirect);
8928 uint8_t* packetBeginPtr = streamPtr;
8929 uint8_t** streamPtrPtr = &streamPtr;
8930 uint32_t opcode_vkCmdDrawIndirect = OP_vkCmdDrawIndirect;
8931 memcpy(streamPtr, &opcode_vkCmdDrawIndirect, sizeof(uint32_t));
8932 streamPtr += sizeof(uint32_t);
8933 memcpy(streamPtr, &packetSize_vkCmdDrawIndirect, sizeof(uint32_t));
8934 streamPtr += sizeof(uint32_t);
8935 if (!queueSubmitWithCommandsEnabled) {
8936 uint64_t cgen_var_0;
8937 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
8938 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8939 *streamPtrPtr += 1 * 8;
8940 }
8941 uint64_t cgen_var_0;
8942 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_buffer));
8943 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
8944 *streamPtrPtr += 1 * 8;
8945 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
8946 *streamPtrPtr += sizeof(VkDeviceSize);
8947 memcpy(*streamPtrPtr, (uint32_t*)&local_drawCount, sizeof(uint32_t));
8948 *streamPtrPtr += sizeof(uint32_t);
8949 memcpy(*streamPtrPtr, (uint32_t*)&local_stride, sizeof(uint32_t));
8950 *streamPtrPtr += sizeof(uint32_t);
8951 ++encodeCount;
8952 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
8953 pool->freeAll();
8954 stream->clearPool();
8955 }
8956 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
8957 }
8958
vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride,uint32_t doLock)8959 void VkEncoder::vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer,
8960 VkDeviceSize offset, uint32_t drawCount, uint32_t stride,
8961 uint32_t doLock) {
8962 (void)doLock;
8963 bool queueSubmitWithCommandsEnabled =
8964 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
8965 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
8966 auto stream = mImpl->stream();
8967 auto pool = mImpl->pool();
8968 VkCommandBuffer local_commandBuffer;
8969 VkBuffer local_buffer;
8970 VkDeviceSize local_offset;
8971 uint32_t local_drawCount;
8972 uint32_t local_stride;
8973 local_commandBuffer = commandBuffer;
8974 local_buffer = buffer;
8975 local_offset = offset;
8976 local_drawCount = drawCount;
8977 local_stride = stride;
8978 size_t count = 0;
8979 size_t* countPtr = &count;
8980 {
8981 uint64_t cgen_var_0;
8982 *countPtr += 1 * 8;
8983 uint64_t cgen_var_1;
8984 *countPtr += 1 * 8;
8985 *countPtr += sizeof(VkDeviceSize);
8986 *countPtr += sizeof(uint32_t);
8987 *countPtr += sizeof(uint32_t);
8988 }
8989 uint32_t packetSize_vkCmdDrawIndexedIndirect = 4 + 4 + count;
8990 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDrawIndexedIndirect -= 8;
8991 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdDrawIndexedIndirect);
8992 uint8_t* packetBeginPtr = streamPtr;
8993 uint8_t** streamPtrPtr = &streamPtr;
8994 uint32_t opcode_vkCmdDrawIndexedIndirect = OP_vkCmdDrawIndexedIndirect;
8995 memcpy(streamPtr, &opcode_vkCmdDrawIndexedIndirect, sizeof(uint32_t));
8996 streamPtr += sizeof(uint32_t);
8997 memcpy(streamPtr, &packetSize_vkCmdDrawIndexedIndirect, sizeof(uint32_t));
8998 streamPtr += sizeof(uint32_t);
8999 if (!queueSubmitWithCommandsEnabled) {
9000 uint64_t cgen_var_0;
9001 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9002 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9003 *streamPtrPtr += 1 * 8;
9004 }
9005 uint64_t cgen_var_0;
9006 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_buffer));
9007 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9008 *streamPtrPtr += 1 * 8;
9009 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
9010 *streamPtrPtr += sizeof(VkDeviceSize);
9011 memcpy(*streamPtrPtr, (uint32_t*)&local_drawCount, sizeof(uint32_t));
9012 *streamPtrPtr += sizeof(uint32_t);
9013 memcpy(*streamPtrPtr, (uint32_t*)&local_stride, sizeof(uint32_t));
9014 *streamPtrPtr += sizeof(uint32_t);
9015 ++encodeCount;
9016 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9017 pool->freeAll();
9018 stream->clearPool();
9019 }
9020 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9021 }
9022
vkCmdDispatch(VkCommandBuffer commandBuffer,uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ,uint32_t doLock)9023 void VkEncoder::vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t groupCountX,
9024 uint32_t groupCountY, uint32_t groupCountZ, uint32_t doLock) {
9025 (void)doLock;
9026 bool queueSubmitWithCommandsEnabled =
9027 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9028 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9029 auto stream = mImpl->stream();
9030 auto pool = mImpl->pool();
9031 VkCommandBuffer local_commandBuffer;
9032 uint32_t local_groupCountX;
9033 uint32_t local_groupCountY;
9034 uint32_t local_groupCountZ;
9035 local_commandBuffer = commandBuffer;
9036 local_groupCountX = groupCountX;
9037 local_groupCountY = groupCountY;
9038 local_groupCountZ = groupCountZ;
9039 size_t count = 0;
9040 size_t* countPtr = &count;
9041 {
9042 uint64_t cgen_var_0;
9043 *countPtr += 1 * 8;
9044 *countPtr += sizeof(uint32_t);
9045 *countPtr += sizeof(uint32_t);
9046 *countPtr += sizeof(uint32_t);
9047 }
9048 uint32_t packetSize_vkCmdDispatch = 4 + 4 + count;
9049 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDispatch -= 8;
9050 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdDispatch);
9051 uint8_t* packetBeginPtr = streamPtr;
9052 uint8_t** streamPtrPtr = &streamPtr;
9053 uint32_t opcode_vkCmdDispatch = OP_vkCmdDispatch;
9054 memcpy(streamPtr, &opcode_vkCmdDispatch, sizeof(uint32_t));
9055 streamPtr += sizeof(uint32_t);
9056 memcpy(streamPtr, &packetSize_vkCmdDispatch, sizeof(uint32_t));
9057 streamPtr += sizeof(uint32_t);
9058 if (!queueSubmitWithCommandsEnabled) {
9059 uint64_t cgen_var_0;
9060 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9061 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9062 *streamPtrPtr += 1 * 8;
9063 }
9064 memcpy(*streamPtrPtr, (uint32_t*)&local_groupCountX, sizeof(uint32_t));
9065 *streamPtrPtr += sizeof(uint32_t);
9066 memcpy(*streamPtrPtr, (uint32_t*)&local_groupCountY, sizeof(uint32_t));
9067 *streamPtrPtr += sizeof(uint32_t);
9068 memcpy(*streamPtrPtr, (uint32_t*)&local_groupCountZ, sizeof(uint32_t));
9069 *streamPtrPtr += sizeof(uint32_t);
9070 ++encodeCount;
9071 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9072 pool->freeAll();
9073 stream->clearPool();
9074 }
9075 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9076 }
9077
vkCmdDispatchIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t doLock)9078 void VkEncoder::vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer,
9079 VkDeviceSize offset, uint32_t doLock) {
9080 (void)doLock;
9081 bool queueSubmitWithCommandsEnabled =
9082 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9083 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9084 auto stream = mImpl->stream();
9085 auto pool = mImpl->pool();
9086 VkCommandBuffer local_commandBuffer;
9087 VkBuffer local_buffer;
9088 VkDeviceSize local_offset;
9089 local_commandBuffer = commandBuffer;
9090 local_buffer = buffer;
9091 local_offset = offset;
9092 size_t count = 0;
9093 size_t* countPtr = &count;
9094 {
9095 uint64_t cgen_var_0;
9096 *countPtr += 1 * 8;
9097 uint64_t cgen_var_1;
9098 *countPtr += 1 * 8;
9099 *countPtr += sizeof(VkDeviceSize);
9100 }
9101 uint32_t packetSize_vkCmdDispatchIndirect = 4 + 4 + count;
9102 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDispatchIndirect -= 8;
9103 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdDispatchIndirect);
9104 uint8_t* packetBeginPtr = streamPtr;
9105 uint8_t** streamPtrPtr = &streamPtr;
9106 uint32_t opcode_vkCmdDispatchIndirect = OP_vkCmdDispatchIndirect;
9107 memcpy(streamPtr, &opcode_vkCmdDispatchIndirect, sizeof(uint32_t));
9108 streamPtr += sizeof(uint32_t);
9109 memcpy(streamPtr, &packetSize_vkCmdDispatchIndirect, sizeof(uint32_t));
9110 streamPtr += sizeof(uint32_t);
9111 if (!queueSubmitWithCommandsEnabled) {
9112 uint64_t cgen_var_0;
9113 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9114 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9115 *streamPtrPtr += 1 * 8;
9116 }
9117 uint64_t cgen_var_0;
9118 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_buffer));
9119 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9120 *streamPtrPtr += 1 * 8;
9121 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
9122 *streamPtrPtr += sizeof(VkDeviceSize);
9123 ++encodeCount;
9124 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9125 pool->freeAll();
9126 stream->clearPool();
9127 }
9128 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9129 }
9130
vkCmdCopyBuffer(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkBuffer dstBuffer,uint32_t regionCount,const VkBufferCopy * pRegions,uint32_t doLock)9131 void VkEncoder::vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer,
9132 VkBuffer dstBuffer, uint32_t regionCount,
9133 const VkBufferCopy* pRegions, uint32_t doLock) {
9134 (void)doLock;
9135 bool queueSubmitWithCommandsEnabled =
9136 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9137 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9138 auto stream = mImpl->stream();
9139 auto pool = mImpl->pool();
9140 VkCommandBuffer local_commandBuffer;
9141 VkBuffer local_srcBuffer;
9142 VkBuffer local_dstBuffer;
9143 uint32_t local_regionCount;
9144 VkBufferCopy* local_pRegions;
9145 local_commandBuffer = commandBuffer;
9146 local_srcBuffer = srcBuffer;
9147 local_dstBuffer = dstBuffer;
9148 local_regionCount = regionCount;
9149 local_pRegions = nullptr;
9150 if (pRegions) {
9151 local_pRegions = (VkBufferCopy*)pool->alloc(((regionCount)) * sizeof(const VkBufferCopy));
9152 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9153 deepcopy_VkBufferCopy(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i,
9154 (VkBufferCopy*)(local_pRegions + i));
9155 }
9156 }
9157 if (local_pRegions) {
9158 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9159 transform_tohost_VkBufferCopy(sResourceTracker, (VkBufferCopy*)(local_pRegions + i));
9160 }
9161 }
9162 size_t count = 0;
9163 size_t* countPtr = &count;
9164 {
9165 uint64_t cgen_var_0;
9166 *countPtr += 1 * 8;
9167 uint64_t cgen_var_1;
9168 *countPtr += 1 * 8;
9169 uint64_t cgen_var_2;
9170 *countPtr += 1 * 8;
9171 *countPtr += sizeof(uint32_t);
9172 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9173 count_VkBufferCopy(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
9174 (VkBufferCopy*)(local_pRegions + i), countPtr);
9175 }
9176 }
9177 uint32_t packetSize_vkCmdCopyBuffer = 4 + 4 + count;
9178 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyBuffer -= 8;
9179 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyBuffer);
9180 uint8_t* packetBeginPtr = streamPtr;
9181 uint8_t** streamPtrPtr = &streamPtr;
9182 uint32_t opcode_vkCmdCopyBuffer = OP_vkCmdCopyBuffer;
9183 memcpy(streamPtr, &opcode_vkCmdCopyBuffer, sizeof(uint32_t));
9184 streamPtr += sizeof(uint32_t);
9185 memcpy(streamPtr, &packetSize_vkCmdCopyBuffer, sizeof(uint32_t));
9186 streamPtr += sizeof(uint32_t);
9187 if (!queueSubmitWithCommandsEnabled) {
9188 uint64_t cgen_var_0;
9189 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9190 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9191 *streamPtrPtr += 1 * 8;
9192 }
9193 uint64_t cgen_var_0;
9194 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_srcBuffer));
9195 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9196 *streamPtrPtr += 1 * 8;
9197 uint64_t cgen_var_1;
9198 *&cgen_var_1 = get_host_u64_VkBuffer((*&local_dstBuffer));
9199 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
9200 *streamPtrPtr += 1 * 8;
9201 memcpy(*streamPtrPtr, (uint32_t*)&local_regionCount, sizeof(uint32_t));
9202 *streamPtrPtr += sizeof(uint32_t);
9203 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9204 reservedmarshal_VkBufferCopy(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
9205 (VkBufferCopy*)(local_pRegions + i), streamPtrPtr);
9206 }
9207 ++encodeCount;
9208 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9209 pool->freeAll();
9210 stream->clearPool();
9211 }
9212 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9213 }
9214
vkCmdCopyImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageCopy * pRegions,uint32_t doLock)9215 void VkEncoder::vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage,
9216 VkImageLayout srcImageLayout, VkImage dstImage,
9217 VkImageLayout dstImageLayout, uint32_t regionCount,
9218 const VkImageCopy* pRegions, uint32_t doLock) {
9219 (void)doLock;
9220 bool queueSubmitWithCommandsEnabled =
9221 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9222 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9223 auto stream = mImpl->stream();
9224 auto pool = mImpl->pool();
9225 VkCommandBuffer local_commandBuffer;
9226 VkImage local_srcImage;
9227 VkImageLayout local_srcImageLayout;
9228 VkImage local_dstImage;
9229 VkImageLayout local_dstImageLayout;
9230 uint32_t local_regionCount;
9231 VkImageCopy* local_pRegions;
9232 local_commandBuffer = commandBuffer;
9233 local_srcImage = srcImage;
9234 local_srcImageLayout = srcImageLayout;
9235 local_dstImage = dstImage;
9236 local_dstImageLayout = dstImageLayout;
9237 local_regionCount = regionCount;
9238 local_pRegions = nullptr;
9239 if (pRegions) {
9240 local_pRegions = (VkImageCopy*)pool->alloc(((regionCount)) * sizeof(const VkImageCopy));
9241 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9242 deepcopy_VkImageCopy(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i,
9243 (VkImageCopy*)(local_pRegions + i));
9244 }
9245 }
9246 if (local_pRegions) {
9247 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9248 transform_tohost_VkImageCopy(sResourceTracker, (VkImageCopy*)(local_pRegions + i));
9249 }
9250 }
9251 size_t count = 0;
9252 size_t* countPtr = &count;
9253 {
9254 uint64_t cgen_var_0;
9255 *countPtr += 1 * 8;
9256 uint64_t cgen_var_1;
9257 *countPtr += 1 * 8;
9258 *countPtr += sizeof(VkImageLayout);
9259 uint64_t cgen_var_2;
9260 *countPtr += 1 * 8;
9261 *countPtr += sizeof(VkImageLayout);
9262 *countPtr += sizeof(uint32_t);
9263 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9264 count_VkImageCopy(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
9265 (VkImageCopy*)(local_pRegions + i), countPtr);
9266 }
9267 }
9268 uint32_t packetSize_vkCmdCopyImage = 4 + 4 + count;
9269 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyImage -= 8;
9270 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyImage);
9271 uint8_t* packetBeginPtr = streamPtr;
9272 uint8_t** streamPtrPtr = &streamPtr;
9273 uint32_t opcode_vkCmdCopyImage = OP_vkCmdCopyImage;
9274 memcpy(streamPtr, &opcode_vkCmdCopyImage, sizeof(uint32_t));
9275 streamPtr += sizeof(uint32_t);
9276 memcpy(streamPtr, &packetSize_vkCmdCopyImage, sizeof(uint32_t));
9277 streamPtr += sizeof(uint32_t);
9278 if (!queueSubmitWithCommandsEnabled) {
9279 uint64_t cgen_var_0;
9280 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9281 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9282 *streamPtrPtr += 1 * 8;
9283 }
9284 uint64_t cgen_var_0;
9285 *&cgen_var_0 = get_host_u64_VkImage((*&local_srcImage));
9286 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9287 *streamPtrPtr += 1 * 8;
9288 memcpy(*streamPtrPtr, (VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
9289 *streamPtrPtr += sizeof(VkImageLayout);
9290 uint64_t cgen_var_1;
9291 *&cgen_var_1 = get_host_u64_VkImage((*&local_dstImage));
9292 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
9293 *streamPtrPtr += 1 * 8;
9294 memcpy(*streamPtrPtr, (VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
9295 *streamPtrPtr += sizeof(VkImageLayout);
9296 memcpy(*streamPtrPtr, (uint32_t*)&local_regionCount, sizeof(uint32_t));
9297 *streamPtrPtr += sizeof(uint32_t);
9298 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9299 reservedmarshal_VkImageCopy(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
9300 (VkImageCopy*)(local_pRegions + i), streamPtrPtr);
9301 }
9302 ++encodeCount;
9303 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9304 pool->freeAll();
9305 stream->clearPool();
9306 }
9307 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9308 }
9309
vkCmdBlitImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageBlit * pRegions,VkFilter filter,uint32_t doLock)9310 void VkEncoder::vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage,
9311 VkImageLayout srcImageLayout, VkImage dstImage,
9312 VkImageLayout dstImageLayout, uint32_t regionCount,
9313 const VkImageBlit* pRegions, VkFilter filter, uint32_t doLock) {
9314 (void)doLock;
9315 bool queueSubmitWithCommandsEnabled =
9316 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9317 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9318 auto stream = mImpl->stream();
9319 auto pool = mImpl->pool();
9320 VkCommandBuffer local_commandBuffer;
9321 VkImage local_srcImage;
9322 VkImageLayout local_srcImageLayout;
9323 VkImage local_dstImage;
9324 VkImageLayout local_dstImageLayout;
9325 uint32_t local_regionCount;
9326 VkImageBlit* local_pRegions;
9327 VkFilter local_filter;
9328 local_commandBuffer = commandBuffer;
9329 local_srcImage = srcImage;
9330 local_srcImageLayout = srcImageLayout;
9331 local_dstImage = dstImage;
9332 local_dstImageLayout = dstImageLayout;
9333 local_regionCount = regionCount;
9334 local_pRegions = nullptr;
9335 if (pRegions) {
9336 local_pRegions = (VkImageBlit*)pool->alloc(((regionCount)) * sizeof(const VkImageBlit));
9337 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9338 deepcopy_VkImageBlit(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i,
9339 (VkImageBlit*)(local_pRegions + i));
9340 }
9341 }
9342 local_filter = filter;
9343 if (local_pRegions) {
9344 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9345 transform_tohost_VkImageBlit(sResourceTracker, (VkImageBlit*)(local_pRegions + i));
9346 }
9347 }
9348 size_t count = 0;
9349 size_t* countPtr = &count;
9350 {
9351 uint64_t cgen_var_0;
9352 *countPtr += 1 * 8;
9353 uint64_t cgen_var_1;
9354 *countPtr += 1 * 8;
9355 *countPtr += sizeof(VkImageLayout);
9356 uint64_t cgen_var_2;
9357 *countPtr += 1 * 8;
9358 *countPtr += sizeof(VkImageLayout);
9359 *countPtr += sizeof(uint32_t);
9360 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9361 count_VkImageBlit(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
9362 (VkImageBlit*)(local_pRegions + i), countPtr);
9363 }
9364 *countPtr += sizeof(VkFilter);
9365 }
9366 uint32_t packetSize_vkCmdBlitImage = 4 + 4 + count;
9367 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBlitImage -= 8;
9368 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBlitImage);
9369 uint8_t* packetBeginPtr = streamPtr;
9370 uint8_t** streamPtrPtr = &streamPtr;
9371 uint32_t opcode_vkCmdBlitImage = OP_vkCmdBlitImage;
9372 memcpy(streamPtr, &opcode_vkCmdBlitImage, sizeof(uint32_t));
9373 streamPtr += sizeof(uint32_t);
9374 memcpy(streamPtr, &packetSize_vkCmdBlitImage, sizeof(uint32_t));
9375 streamPtr += sizeof(uint32_t);
9376 if (!queueSubmitWithCommandsEnabled) {
9377 uint64_t cgen_var_0;
9378 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9379 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9380 *streamPtrPtr += 1 * 8;
9381 }
9382 uint64_t cgen_var_0;
9383 *&cgen_var_0 = get_host_u64_VkImage((*&local_srcImage));
9384 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9385 *streamPtrPtr += 1 * 8;
9386 memcpy(*streamPtrPtr, (VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
9387 *streamPtrPtr += sizeof(VkImageLayout);
9388 uint64_t cgen_var_1;
9389 *&cgen_var_1 = get_host_u64_VkImage((*&local_dstImage));
9390 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
9391 *streamPtrPtr += 1 * 8;
9392 memcpy(*streamPtrPtr, (VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
9393 *streamPtrPtr += sizeof(VkImageLayout);
9394 memcpy(*streamPtrPtr, (uint32_t*)&local_regionCount, sizeof(uint32_t));
9395 *streamPtrPtr += sizeof(uint32_t);
9396 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9397 reservedmarshal_VkImageBlit(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
9398 (VkImageBlit*)(local_pRegions + i), streamPtrPtr);
9399 }
9400 memcpy(*streamPtrPtr, (VkFilter*)&local_filter, sizeof(VkFilter));
9401 *streamPtrPtr += sizeof(VkFilter);
9402 ++encodeCount;
9403 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9404 pool->freeAll();
9405 stream->clearPool();
9406 }
9407 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9408 }
9409
vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkBufferImageCopy * pRegions,uint32_t doLock)9410 void VkEncoder::vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer,
9411 VkImage dstImage, VkImageLayout dstImageLayout,
9412 uint32_t regionCount, const VkBufferImageCopy* pRegions,
9413 uint32_t doLock) {
9414 (void)doLock;
9415 bool queueSubmitWithCommandsEnabled =
9416 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9417 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9418 auto stream = mImpl->stream();
9419 auto pool = mImpl->pool();
9420 VkCommandBuffer local_commandBuffer;
9421 VkBuffer local_srcBuffer;
9422 VkImage local_dstImage;
9423 VkImageLayout local_dstImageLayout;
9424 uint32_t local_regionCount;
9425 VkBufferImageCopy* local_pRegions;
9426 local_commandBuffer = commandBuffer;
9427 local_srcBuffer = srcBuffer;
9428 local_dstImage = dstImage;
9429 local_dstImageLayout = dstImageLayout;
9430 local_regionCount = regionCount;
9431 local_pRegions = nullptr;
9432 if (pRegions) {
9433 local_pRegions =
9434 (VkBufferImageCopy*)pool->alloc(((regionCount)) * sizeof(const VkBufferImageCopy));
9435 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9436 deepcopy_VkBufferImageCopy(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i,
9437 (VkBufferImageCopy*)(local_pRegions + i));
9438 }
9439 }
9440 if (local_pRegions) {
9441 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9442 transform_tohost_VkBufferImageCopy(sResourceTracker,
9443 (VkBufferImageCopy*)(local_pRegions + i));
9444 }
9445 }
9446 size_t count = 0;
9447 size_t* countPtr = &count;
9448 {
9449 uint64_t cgen_var_0;
9450 *countPtr += 1 * 8;
9451 uint64_t cgen_var_1;
9452 *countPtr += 1 * 8;
9453 uint64_t cgen_var_2;
9454 *countPtr += 1 * 8;
9455 *countPtr += sizeof(VkImageLayout);
9456 *countPtr += sizeof(uint32_t);
9457 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9458 count_VkBufferImageCopy(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
9459 (VkBufferImageCopy*)(local_pRegions + i), countPtr);
9460 }
9461 }
9462 uint32_t packetSize_vkCmdCopyBufferToImage = 4 + 4 + count;
9463 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyBufferToImage -= 8;
9464 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyBufferToImage);
9465 uint8_t* packetBeginPtr = streamPtr;
9466 uint8_t** streamPtrPtr = &streamPtr;
9467 uint32_t opcode_vkCmdCopyBufferToImage = OP_vkCmdCopyBufferToImage;
9468 memcpy(streamPtr, &opcode_vkCmdCopyBufferToImage, sizeof(uint32_t));
9469 streamPtr += sizeof(uint32_t);
9470 memcpy(streamPtr, &packetSize_vkCmdCopyBufferToImage, sizeof(uint32_t));
9471 streamPtr += sizeof(uint32_t);
9472 if (!queueSubmitWithCommandsEnabled) {
9473 uint64_t cgen_var_0;
9474 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9475 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9476 *streamPtrPtr += 1 * 8;
9477 }
9478 uint64_t cgen_var_0;
9479 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_srcBuffer));
9480 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9481 *streamPtrPtr += 1 * 8;
9482 uint64_t cgen_var_1;
9483 *&cgen_var_1 = get_host_u64_VkImage((*&local_dstImage));
9484 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
9485 *streamPtrPtr += 1 * 8;
9486 memcpy(*streamPtrPtr, (VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
9487 *streamPtrPtr += sizeof(VkImageLayout);
9488 memcpy(*streamPtrPtr, (uint32_t*)&local_regionCount, sizeof(uint32_t));
9489 *streamPtrPtr += sizeof(uint32_t);
9490 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9491 reservedmarshal_VkBufferImageCopy(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
9492 (VkBufferImageCopy*)(local_pRegions + i), streamPtrPtr);
9493 }
9494 ++encodeCount;
9495 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9496 pool->freeAll();
9497 stream->clearPool();
9498 }
9499 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9500 }
9501
vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkBuffer dstBuffer,uint32_t regionCount,const VkBufferImageCopy * pRegions,uint32_t doLock)9502 void VkEncoder::vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage,
9503 VkImageLayout srcImageLayout, VkBuffer dstBuffer,
9504 uint32_t regionCount, const VkBufferImageCopy* pRegions,
9505 uint32_t doLock) {
9506 (void)doLock;
9507 bool queueSubmitWithCommandsEnabled =
9508 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9509 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9510 auto stream = mImpl->stream();
9511 auto pool = mImpl->pool();
9512 VkCommandBuffer local_commandBuffer;
9513 VkImage local_srcImage;
9514 VkImageLayout local_srcImageLayout;
9515 VkBuffer local_dstBuffer;
9516 uint32_t local_regionCount;
9517 VkBufferImageCopy* local_pRegions;
9518 local_commandBuffer = commandBuffer;
9519 local_srcImage = srcImage;
9520 local_srcImageLayout = srcImageLayout;
9521 local_dstBuffer = dstBuffer;
9522 local_regionCount = regionCount;
9523 local_pRegions = nullptr;
9524 if (pRegions) {
9525 local_pRegions =
9526 (VkBufferImageCopy*)pool->alloc(((regionCount)) * sizeof(const VkBufferImageCopy));
9527 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9528 deepcopy_VkBufferImageCopy(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i,
9529 (VkBufferImageCopy*)(local_pRegions + i));
9530 }
9531 }
9532 if (local_pRegions) {
9533 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9534 transform_tohost_VkBufferImageCopy(sResourceTracker,
9535 (VkBufferImageCopy*)(local_pRegions + i));
9536 }
9537 }
9538 size_t count = 0;
9539 size_t* countPtr = &count;
9540 {
9541 uint64_t cgen_var_0;
9542 *countPtr += 1 * 8;
9543 uint64_t cgen_var_1;
9544 *countPtr += 1 * 8;
9545 *countPtr += sizeof(VkImageLayout);
9546 uint64_t cgen_var_2;
9547 *countPtr += 1 * 8;
9548 *countPtr += sizeof(uint32_t);
9549 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9550 count_VkBufferImageCopy(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
9551 (VkBufferImageCopy*)(local_pRegions + i), countPtr);
9552 }
9553 }
9554 uint32_t packetSize_vkCmdCopyImageToBuffer = 4 + 4 + count;
9555 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyImageToBuffer -= 8;
9556 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyImageToBuffer);
9557 uint8_t* packetBeginPtr = streamPtr;
9558 uint8_t** streamPtrPtr = &streamPtr;
9559 uint32_t opcode_vkCmdCopyImageToBuffer = OP_vkCmdCopyImageToBuffer;
9560 memcpy(streamPtr, &opcode_vkCmdCopyImageToBuffer, sizeof(uint32_t));
9561 streamPtr += sizeof(uint32_t);
9562 memcpy(streamPtr, &packetSize_vkCmdCopyImageToBuffer, sizeof(uint32_t));
9563 streamPtr += sizeof(uint32_t);
9564 if (!queueSubmitWithCommandsEnabled) {
9565 uint64_t cgen_var_0;
9566 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9567 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9568 *streamPtrPtr += 1 * 8;
9569 }
9570 uint64_t cgen_var_0;
9571 *&cgen_var_0 = get_host_u64_VkImage((*&local_srcImage));
9572 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9573 *streamPtrPtr += 1 * 8;
9574 memcpy(*streamPtrPtr, (VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
9575 *streamPtrPtr += sizeof(VkImageLayout);
9576 uint64_t cgen_var_1;
9577 *&cgen_var_1 = get_host_u64_VkBuffer((*&local_dstBuffer));
9578 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
9579 *streamPtrPtr += 1 * 8;
9580 memcpy(*streamPtrPtr, (uint32_t*)&local_regionCount, sizeof(uint32_t));
9581 *streamPtrPtr += sizeof(uint32_t);
9582 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
9583 reservedmarshal_VkBufferImageCopy(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
9584 (VkBufferImageCopy*)(local_pRegions + i), streamPtrPtr);
9585 }
9586 ++encodeCount;
9587 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9588 pool->freeAll();
9589 stream->clearPool();
9590 }
9591 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9592 }
9593
vkCmdUpdateBuffer(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize dataSize,const void * pData,uint32_t doLock)9594 void VkEncoder::vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer,
9595 VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData,
9596 uint32_t doLock) {
9597 (void)doLock;
9598 bool queueSubmitWithCommandsEnabled =
9599 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9600 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9601 auto stream = mImpl->stream();
9602 auto pool = mImpl->pool();
9603 VkCommandBuffer local_commandBuffer;
9604 VkBuffer local_dstBuffer;
9605 VkDeviceSize local_dstOffset;
9606 VkDeviceSize local_dataSize;
9607 void* local_pData;
9608 local_commandBuffer = commandBuffer;
9609 local_dstBuffer = dstBuffer;
9610 local_dstOffset = dstOffset;
9611 local_dataSize = dataSize;
9612 // Avoiding deepcopy for pData
9613 local_pData = (void*)pData;
9614 size_t count = 0;
9615 size_t* countPtr = &count;
9616 {
9617 uint64_t cgen_var_0;
9618 *countPtr += 1 * 8;
9619 uint64_t cgen_var_1;
9620 *countPtr += 1 * 8;
9621 *countPtr += sizeof(VkDeviceSize);
9622 *countPtr += sizeof(VkDeviceSize);
9623 *countPtr += ((dataSize)) * sizeof(uint8_t);
9624 }
9625 uint32_t packetSize_vkCmdUpdateBuffer = 4 + 4 + count;
9626 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdUpdateBuffer -= 8;
9627 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdUpdateBuffer);
9628 uint8_t* packetBeginPtr = streamPtr;
9629 uint8_t** streamPtrPtr = &streamPtr;
9630 uint32_t opcode_vkCmdUpdateBuffer = OP_vkCmdUpdateBuffer;
9631 memcpy(streamPtr, &opcode_vkCmdUpdateBuffer, sizeof(uint32_t));
9632 streamPtr += sizeof(uint32_t);
9633 memcpy(streamPtr, &packetSize_vkCmdUpdateBuffer, sizeof(uint32_t));
9634 streamPtr += sizeof(uint32_t);
9635 if (!queueSubmitWithCommandsEnabled) {
9636 uint64_t cgen_var_0;
9637 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9638 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9639 *streamPtrPtr += 1 * 8;
9640 }
9641 uint64_t cgen_var_0;
9642 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_dstBuffer));
9643 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9644 *streamPtrPtr += 1 * 8;
9645 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
9646 *streamPtrPtr += sizeof(VkDeviceSize);
9647 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_dataSize, sizeof(VkDeviceSize));
9648 *streamPtrPtr += sizeof(VkDeviceSize);
9649 memcpy(*streamPtrPtr, (void*)local_pData, ((dataSize)) * sizeof(uint8_t));
9650 *streamPtrPtr += ((dataSize)) * sizeof(uint8_t);
9651 ++encodeCount;
9652 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9653 pool->freeAll();
9654 stream->clearPool();
9655 }
9656 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9657 }
9658
vkCmdFillBuffer(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize size,uint32_t data,uint32_t doLock)9659 void VkEncoder::vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer,
9660 VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data,
9661 uint32_t doLock) {
9662 (void)doLock;
9663 bool queueSubmitWithCommandsEnabled =
9664 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9665 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9666 auto stream = mImpl->stream();
9667 auto pool = mImpl->pool();
9668 VkCommandBuffer local_commandBuffer;
9669 VkBuffer local_dstBuffer;
9670 VkDeviceSize local_dstOffset;
9671 VkDeviceSize local_size;
9672 uint32_t local_data;
9673 local_commandBuffer = commandBuffer;
9674 local_dstBuffer = dstBuffer;
9675 local_dstOffset = dstOffset;
9676 local_size = size;
9677 local_data = data;
9678 size_t count = 0;
9679 size_t* countPtr = &count;
9680 {
9681 uint64_t cgen_var_0;
9682 *countPtr += 1 * 8;
9683 uint64_t cgen_var_1;
9684 *countPtr += 1 * 8;
9685 *countPtr += sizeof(VkDeviceSize);
9686 *countPtr += sizeof(VkDeviceSize);
9687 *countPtr += sizeof(uint32_t);
9688 }
9689 uint32_t packetSize_vkCmdFillBuffer = 4 + 4 + count;
9690 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdFillBuffer -= 8;
9691 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdFillBuffer);
9692 uint8_t* packetBeginPtr = streamPtr;
9693 uint8_t** streamPtrPtr = &streamPtr;
9694 uint32_t opcode_vkCmdFillBuffer = OP_vkCmdFillBuffer;
9695 memcpy(streamPtr, &opcode_vkCmdFillBuffer, sizeof(uint32_t));
9696 streamPtr += sizeof(uint32_t);
9697 memcpy(streamPtr, &packetSize_vkCmdFillBuffer, sizeof(uint32_t));
9698 streamPtr += sizeof(uint32_t);
9699 if (!queueSubmitWithCommandsEnabled) {
9700 uint64_t cgen_var_0;
9701 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9702 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9703 *streamPtrPtr += 1 * 8;
9704 }
9705 uint64_t cgen_var_0;
9706 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_dstBuffer));
9707 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9708 *streamPtrPtr += 1 * 8;
9709 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
9710 *streamPtrPtr += sizeof(VkDeviceSize);
9711 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_size, sizeof(VkDeviceSize));
9712 *streamPtrPtr += sizeof(VkDeviceSize);
9713 memcpy(*streamPtrPtr, (uint32_t*)&local_data, sizeof(uint32_t));
9714 *streamPtrPtr += sizeof(uint32_t);
9715 ++encodeCount;
9716 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9717 pool->freeAll();
9718 stream->clearPool();
9719 }
9720 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9721 }
9722
vkCmdClearColorImage(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const VkClearColorValue * pColor,uint32_t rangeCount,const VkImageSubresourceRange * pRanges,uint32_t doLock)9723 void VkEncoder::vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image,
9724 VkImageLayout imageLayout, const VkClearColorValue* pColor,
9725 uint32_t rangeCount, const VkImageSubresourceRange* pRanges,
9726 uint32_t doLock) {
9727 (void)doLock;
9728 bool queueSubmitWithCommandsEnabled =
9729 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9730 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9731 auto stream = mImpl->stream();
9732 auto pool = mImpl->pool();
9733 VkCommandBuffer local_commandBuffer;
9734 VkImage local_image;
9735 VkImageLayout local_imageLayout;
9736 VkClearColorValue* local_pColor;
9737 uint32_t local_rangeCount;
9738 VkImageSubresourceRange* local_pRanges;
9739 local_commandBuffer = commandBuffer;
9740 local_image = image;
9741 local_imageLayout = imageLayout;
9742 local_pColor = nullptr;
9743 if (pColor) {
9744 local_pColor = (VkClearColorValue*)pool->alloc(sizeof(const VkClearColorValue));
9745 deepcopy_VkClearColorValue(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pColor,
9746 (VkClearColorValue*)(local_pColor));
9747 }
9748 local_rangeCount = rangeCount;
9749 local_pRanges = nullptr;
9750 if (pRanges) {
9751 local_pRanges = (VkImageSubresourceRange*)pool->alloc(
9752 ((rangeCount)) * sizeof(const VkImageSubresourceRange));
9753 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
9754 deepcopy_VkImageSubresourceRange(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRanges + i,
9755 (VkImageSubresourceRange*)(local_pRanges + i));
9756 }
9757 }
9758 if (local_pColor) {
9759 transform_tohost_VkClearColorValue(sResourceTracker, (VkClearColorValue*)(local_pColor));
9760 }
9761 if (local_pRanges) {
9762 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
9763 transform_tohost_VkImageSubresourceRange(sResourceTracker,
9764 (VkImageSubresourceRange*)(local_pRanges + i));
9765 }
9766 }
9767 size_t count = 0;
9768 size_t* countPtr = &count;
9769 {
9770 uint64_t cgen_var_0;
9771 *countPtr += 1 * 8;
9772 uint64_t cgen_var_1;
9773 *countPtr += 1 * 8;
9774 *countPtr += sizeof(VkImageLayout);
9775 count_VkClearColorValue(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
9776 (VkClearColorValue*)(local_pColor), countPtr);
9777 *countPtr += sizeof(uint32_t);
9778 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
9779 count_VkImageSubresourceRange(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
9780 (VkImageSubresourceRange*)(local_pRanges + i), countPtr);
9781 }
9782 }
9783 uint32_t packetSize_vkCmdClearColorImage = 4 + 4 + count;
9784 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdClearColorImage -= 8;
9785 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdClearColorImage);
9786 uint8_t* packetBeginPtr = streamPtr;
9787 uint8_t** streamPtrPtr = &streamPtr;
9788 uint32_t opcode_vkCmdClearColorImage = OP_vkCmdClearColorImage;
9789 memcpy(streamPtr, &opcode_vkCmdClearColorImage, sizeof(uint32_t));
9790 streamPtr += sizeof(uint32_t);
9791 memcpy(streamPtr, &packetSize_vkCmdClearColorImage, sizeof(uint32_t));
9792 streamPtr += sizeof(uint32_t);
9793 if (!queueSubmitWithCommandsEnabled) {
9794 uint64_t cgen_var_0;
9795 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9796 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9797 *streamPtrPtr += 1 * 8;
9798 }
9799 uint64_t cgen_var_0;
9800 *&cgen_var_0 = get_host_u64_VkImage((*&local_image));
9801 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9802 *streamPtrPtr += 1 * 8;
9803 memcpy(*streamPtrPtr, (VkImageLayout*)&local_imageLayout, sizeof(VkImageLayout));
9804 *streamPtrPtr += sizeof(VkImageLayout);
9805 reservedmarshal_VkClearColorValue(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
9806 (VkClearColorValue*)(local_pColor), streamPtrPtr);
9807 memcpy(*streamPtrPtr, (uint32_t*)&local_rangeCount, sizeof(uint32_t));
9808 *streamPtrPtr += sizeof(uint32_t);
9809 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
9810 reservedmarshal_VkImageSubresourceRange(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
9811 (VkImageSubresourceRange*)(local_pRanges + i),
9812 streamPtrPtr);
9813 }
9814 ++encodeCount;
9815 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9816 pool->freeAll();
9817 stream->clearPool();
9818 }
9819 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9820 }
9821
vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const VkClearDepthStencilValue * pDepthStencil,uint32_t rangeCount,const VkImageSubresourceRange * pRanges,uint32_t doLock)9822 void VkEncoder::vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image,
9823 VkImageLayout imageLayout,
9824 const VkClearDepthStencilValue* pDepthStencil,
9825 uint32_t rangeCount,
9826 const VkImageSubresourceRange* pRanges,
9827 uint32_t doLock) {
9828 (void)doLock;
9829 bool queueSubmitWithCommandsEnabled =
9830 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9831 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9832 auto stream = mImpl->stream();
9833 auto pool = mImpl->pool();
9834 VkCommandBuffer local_commandBuffer;
9835 VkImage local_image;
9836 VkImageLayout local_imageLayout;
9837 VkClearDepthStencilValue* local_pDepthStencil;
9838 uint32_t local_rangeCount;
9839 VkImageSubresourceRange* local_pRanges;
9840 local_commandBuffer = commandBuffer;
9841 local_image = image;
9842 local_imageLayout = imageLayout;
9843 local_pDepthStencil = nullptr;
9844 if (pDepthStencil) {
9845 local_pDepthStencil =
9846 (VkClearDepthStencilValue*)pool->alloc(sizeof(const VkClearDepthStencilValue));
9847 deepcopy_VkClearDepthStencilValue(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDepthStencil,
9848 (VkClearDepthStencilValue*)(local_pDepthStencil));
9849 }
9850 local_rangeCount = rangeCount;
9851 local_pRanges = nullptr;
9852 if (pRanges) {
9853 local_pRanges = (VkImageSubresourceRange*)pool->alloc(
9854 ((rangeCount)) * sizeof(const VkImageSubresourceRange));
9855 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
9856 deepcopy_VkImageSubresourceRange(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRanges + i,
9857 (VkImageSubresourceRange*)(local_pRanges + i));
9858 }
9859 }
9860 if (local_pDepthStencil) {
9861 transform_tohost_VkClearDepthStencilValue(sResourceTracker,
9862 (VkClearDepthStencilValue*)(local_pDepthStencil));
9863 }
9864 if (local_pRanges) {
9865 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
9866 transform_tohost_VkImageSubresourceRange(sResourceTracker,
9867 (VkImageSubresourceRange*)(local_pRanges + i));
9868 }
9869 }
9870 size_t count = 0;
9871 size_t* countPtr = &count;
9872 {
9873 uint64_t cgen_var_0;
9874 *countPtr += 1 * 8;
9875 uint64_t cgen_var_1;
9876 *countPtr += 1 * 8;
9877 *countPtr += sizeof(VkImageLayout);
9878 count_VkClearDepthStencilValue(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
9879 (VkClearDepthStencilValue*)(local_pDepthStencil), countPtr);
9880 *countPtr += sizeof(uint32_t);
9881 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
9882 count_VkImageSubresourceRange(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
9883 (VkImageSubresourceRange*)(local_pRanges + i), countPtr);
9884 }
9885 }
9886 uint32_t packetSize_vkCmdClearDepthStencilImage = 4 + 4 + count;
9887 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdClearDepthStencilImage -= 8;
9888 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdClearDepthStencilImage);
9889 uint8_t* packetBeginPtr = streamPtr;
9890 uint8_t** streamPtrPtr = &streamPtr;
9891 uint32_t opcode_vkCmdClearDepthStencilImage = OP_vkCmdClearDepthStencilImage;
9892 memcpy(streamPtr, &opcode_vkCmdClearDepthStencilImage, sizeof(uint32_t));
9893 streamPtr += sizeof(uint32_t);
9894 memcpy(streamPtr, &packetSize_vkCmdClearDepthStencilImage, sizeof(uint32_t));
9895 streamPtr += sizeof(uint32_t);
9896 if (!queueSubmitWithCommandsEnabled) {
9897 uint64_t cgen_var_0;
9898 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
9899 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9900 *streamPtrPtr += 1 * 8;
9901 }
9902 uint64_t cgen_var_0;
9903 *&cgen_var_0 = get_host_u64_VkImage((*&local_image));
9904 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
9905 *streamPtrPtr += 1 * 8;
9906 memcpy(*streamPtrPtr, (VkImageLayout*)&local_imageLayout, sizeof(VkImageLayout));
9907 *streamPtrPtr += sizeof(VkImageLayout);
9908 reservedmarshal_VkClearDepthStencilValue(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
9909 (VkClearDepthStencilValue*)(local_pDepthStencil),
9910 streamPtrPtr);
9911 memcpy(*streamPtrPtr, (uint32_t*)&local_rangeCount, sizeof(uint32_t));
9912 *streamPtrPtr += sizeof(uint32_t);
9913 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i) {
9914 reservedmarshal_VkImageSubresourceRange(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
9915 (VkImageSubresourceRange*)(local_pRanges + i),
9916 streamPtrPtr);
9917 }
9918 ++encodeCount;
9919 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
9920 pool->freeAll();
9921 stream->clearPool();
9922 }
9923 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
9924 }
9925
vkCmdClearAttachments(VkCommandBuffer commandBuffer,uint32_t attachmentCount,const VkClearAttachment * pAttachments,uint32_t rectCount,const VkClearRect * pRects,uint32_t doLock)9926 void VkEncoder::vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount,
9927 const VkClearAttachment* pAttachments, uint32_t rectCount,
9928 const VkClearRect* pRects, uint32_t doLock) {
9929 (void)doLock;
9930 bool queueSubmitWithCommandsEnabled =
9931 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
9932 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
9933 auto stream = mImpl->stream();
9934 auto pool = mImpl->pool();
9935 VkCommandBuffer local_commandBuffer;
9936 uint32_t local_attachmentCount;
9937 VkClearAttachment* local_pAttachments;
9938 uint32_t local_rectCount;
9939 VkClearRect* local_pRects;
9940 local_commandBuffer = commandBuffer;
9941 local_attachmentCount = attachmentCount;
9942 local_pAttachments = nullptr;
9943 if (pAttachments) {
9944 local_pAttachments =
9945 (VkClearAttachment*)pool->alloc(((attachmentCount)) * sizeof(const VkClearAttachment));
9946 for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i) {
9947 deepcopy_VkClearAttachment(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAttachments + i,
9948 (VkClearAttachment*)(local_pAttachments + i));
9949 }
9950 }
9951 local_rectCount = rectCount;
9952 local_pRects = nullptr;
9953 if (pRects) {
9954 local_pRects = (VkClearRect*)pool->alloc(((rectCount)) * sizeof(const VkClearRect));
9955 for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i) {
9956 deepcopy_VkClearRect(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRects + i,
9957 (VkClearRect*)(local_pRects + i));
9958 }
9959 }
9960 if (local_pAttachments) {
9961 for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i) {
9962 transform_tohost_VkClearAttachment(sResourceTracker,
9963 (VkClearAttachment*)(local_pAttachments + i));
9964 }
9965 }
9966 if (local_pRects) {
9967 for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i) {
9968 transform_tohost_VkClearRect(sResourceTracker, (VkClearRect*)(local_pRects + i));
9969 }
9970 }
9971 size_t count = 0;
9972 size_t* countPtr = &count;
9973 {
9974 uint64_t cgen_var_0;
9975 *countPtr += 1 * 8;
9976 *countPtr += sizeof(uint32_t);
9977 for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i) {
9978 count_VkClearAttachment(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
9979 (VkClearAttachment*)(local_pAttachments + i), countPtr);
9980 }
9981 *countPtr += sizeof(uint32_t);
9982 for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i) {
9983 count_VkClearRect(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
9984 (VkClearRect*)(local_pRects + i), countPtr);
9985 }
9986 }
9987 uint32_t packetSize_vkCmdClearAttachments = 4 + 4 + count;
9988 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdClearAttachments -= 8;
9989 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdClearAttachments);
9990 uint8_t* packetBeginPtr = streamPtr;
9991 uint8_t** streamPtrPtr = &streamPtr;
9992 uint32_t opcode_vkCmdClearAttachments = OP_vkCmdClearAttachments;
9993 memcpy(streamPtr, &opcode_vkCmdClearAttachments, sizeof(uint32_t));
9994 streamPtr += sizeof(uint32_t);
9995 memcpy(streamPtr, &packetSize_vkCmdClearAttachments, sizeof(uint32_t));
9996 streamPtr += sizeof(uint32_t);
9997 if (!queueSubmitWithCommandsEnabled) {
9998 uint64_t cgen_var_0;
9999 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10000 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10001 *streamPtrPtr += 1 * 8;
10002 }
10003 memcpy(*streamPtrPtr, (uint32_t*)&local_attachmentCount, sizeof(uint32_t));
10004 *streamPtrPtr += sizeof(uint32_t);
10005 for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i) {
10006 reservedmarshal_VkClearAttachment(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
10007 (VkClearAttachment*)(local_pAttachments + i),
10008 streamPtrPtr);
10009 }
10010 memcpy(*streamPtrPtr, (uint32_t*)&local_rectCount, sizeof(uint32_t));
10011 *streamPtrPtr += sizeof(uint32_t);
10012 for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i) {
10013 reservedmarshal_VkClearRect(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
10014 (VkClearRect*)(local_pRects + i), streamPtrPtr);
10015 }
10016 ++encodeCount;
10017 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10018 pool->freeAll();
10019 stream->clearPool();
10020 }
10021 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10022 }
10023
vkCmdResolveImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageResolve * pRegions,uint32_t doLock)10024 void VkEncoder::vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage,
10025 VkImageLayout srcImageLayout, VkImage dstImage,
10026 VkImageLayout dstImageLayout, uint32_t regionCount,
10027 const VkImageResolve* pRegions, uint32_t doLock) {
10028 (void)doLock;
10029 bool queueSubmitWithCommandsEnabled =
10030 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10031 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10032 auto stream = mImpl->stream();
10033 auto pool = mImpl->pool();
10034 VkCommandBuffer local_commandBuffer;
10035 VkImage local_srcImage;
10036 VkImageLayout local_srcImageLayout;
10037 VkImage local_dstImage;
10038 VkImageLayout local_dstImageLayout;
10039 uint32_t local_regionCount;
10040 VkImageResolve* local_pRegions;
10041 local_commandBuffer = commandBuffer;
10042 local_srcImage = srcImage;
10043 local_srcImageLayout = srcImageLayout;
10044 local_dstImage = dstImage;
10045 local_dstImageLayout = dstImageLayout;
10046 local_regionCount = regionCount;
10047 local_pRegions = nullptr;
10048 if (pRegions) {
10049 local_pRegions =
10050 (VkImageResolve*)pool->alloc(((regionCount)) * sizeof(const VkImageResolve));
10051 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
10052 deepcopy_VkImageResolve(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i,
10053 (VkImageResolve*)(local_pRegions + i));
10054 }
10055 }
10056 if (local_pRegions) {
10057 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
10058 transform_tohost_VkImageResolve(sResourceTracker,
10059 (VkImageResolve*)(local_pRegions + i));
10060 }
10061 }
10062 size_t count = 0;
10063 size_t* countPtr = &count;
10064 {
10065 uint64_t cgen_var_0;
10066 *countPtr += 1 * 8;
10067 uint64_t cgen_var_1;
10068 *countPtr += 1 * 8;
10069 *countPtr += sizeof(VkImageLayout);
10070 uint64_t cgen_var_2;
10071 *countPtr += 1 * 8;
10072 *countPtr += sizeof(VkImageLayout);
10073 *countPtr += sizeof(uint32_t);
10074 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
10075 count_VkImageResolve(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
10076 (VkImageResolve*)(local_pRegions + i), countPtr);
10077 }
10078 }
10079 uint32_t packetSize_vkCmdResolveImage = 4 + 4 + count;
10080 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdResolveImage -= 8;
10081 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdResolveImage);
10082 uint8_t* packetBeginPtr = streamPtr;
10083 uint8_t** streamPtrPtr = &streamPtr;
10084 uint32_t opcode_vkCmdResolveImage = OP_vkCmdResolveImage;
10085 memcpy(streamPtr, &opcode_vkCmdResolveImage, sizeof(uint32_t));
10086 streamPtr += sizeof(uint32_t);
10087 memcpy(streamPtr, &packetSize_vkCmdResolveImage, sizeof(uint32_t));
10088 streamPtr += sizeof(uint32_t);
10089 if (!queueSubmitWithCommandsEnabled) {
10090 uint64_t cgen_var_0;
10091 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10092 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10093 *streamPtrPtr += 1 * 8;
10094 }
10095 uint64_t cgen_var_0;
10096 *&cgen_var_0 = get_host_u64_VkImage((*&local_srcImage));
10097 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10098 *streamPtrPtr += 1 * 8;
10099 memcpy(*streamPtrPtr, (VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
10100 *streamPtrPtr += sizeof(VkImageLayout);
10101 uint64_t cgen_var_1;
10102 *&cgen_var_1 = get_host_u64_VkImage((*&local_dstImage));
10103 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
10104 *streamPtrPtr += 1 * 8;
10105 memcpy(*streamPtrPtr, (VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
10106 *streamPtrPtr += sizeof(VkImageLayout);
10107 memcpy(*streamPtrPtr, (uint32_t*)&local_regionCount, sizeof(uint32_t));
10108 *streamPtrPtr += sizeof(uint32_t);
10109 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i) {
10110 reservedmarshal_VkImageResolve(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
10111 (VkImageResolve*)(local_pRegions + i), streamPtrPtr);
10112 }
10113 ++encodeCount;
10114 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10115 pool->freeAll();
10116 stream->clearPool();
10117 }
10118 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10119 }
10120
vkCmdSetEvent(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask,uint32_t doLock)10121 void VkEncoder::vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event,
10122 VkPipelineStageFlags stageMask, uint32_t doLock) {
10123 (void)doLock;
10124 bool queueSubmitWithCommandsEnabled =
10125 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10126 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10127 auto stream = mImpl->stream();
10128 auto pool = mImpl->pool();
10129 VkCommandBuffer local_commandBuffer;
10130 VkEvent local_event;
10131 VkPipelineStageFlags local_stageMask;
10132 local_commandBuffer = commandBuffer;
10133 local_event = event;
10134 local_stageMask = stageMask;
10135 size_t count = 0;
10136 size_t* countPtr = &count;
10137 {
10138 uint64_t cgen_var_0;
10139 *countPtr += 1 * 8;
10140 uint64_t cgen_var_1;
10141 *countPtr += 1 * 8;
10142 *countPtr += sizeof(VkPipelineStageFlags);
10143 }
10144 uint32_t packetSize_vkCmdSetEvent = 4 + 4 + count;
10145 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetEvent -= 8;
10146 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetEvent);
10147 uint8_t* packetBeginPtr = streamPtr;
10148 uint8_t** streamPtrPtr = &streamPtr;
10149 uint32_t opcode_vkCmdSetEvent = OP_vkCmdSetEvent;
10150 memcpy(streamPtr, &opcode_vkCmdSetEvent, sizeof(uint32_t));
10151 streamPtr += sizeof(uint32_t);
10152 memcpy(streamPtr, &packetSize_vkCmdSetEvent, sizeof(uint32_t));
10153 streamPtr += sizeof(uint32_t);
10154 if (!queueSubmitWithCommandsEnabled) {
10155 uint64_t cgen_var_0;
10156 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10157 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10158 *streamPtrPtr += 1 * 8;
10159 }
10160 uint64_t cgen_var_0;
10161 *&cgen_var_0 = get_host_u64_VkEvent((*&local_event));
10162 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10163 *streamPtrPtr += 1 * 8;
10164 memcpy(*streamPtrPtr, (VkPipelineStageFlags*)&local_stageMask, sizeof(VkPipelineStageFlags));
10165 *streamPtrPtr += sizeof(VkPipelineStageFlags);
10166 ++encodeCount;
10167 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10168 pool->freeAll();
10169 stream->clearPool();
10170 }
10171 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10172 }
10173
vkCmdResetEvent(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask,uint32_t doLock)10174 void VkEncoder::vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event,
10175 VkPipelineStageFlags stageMask, uint32_t doLock) {
10176 (void)doLock;
10177 bool queueSubmitWithCommandsEnabled =
10178 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10179 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10180 auto stream = mImpl->stream();
10181 auto pool = mImpl->pool();
10182 VkCommandBuffer local_commandBuffer;
10183 VkEvent local_event;
10184 VkPipelineStageFlags local_stageMask;
10185 local_commandBuffer = commandBuffer;
10186 local_event = event;
10187 local_stageMask = stageMask;
10188 size_t count = 0;
10189 size_t* countPtr = &count;
10190 {
10191 uint64_t cgen_var_0;
10192 *countPtr += 1 * 8;
10193 uint64_t cgen_var_1;
10194 *countPtr += 1 * 8;
10195 *countPtr += sizeof(VkPipelineStageFlags);
10196 }
10197 uint32_t packetSize_vkCmdResetEvent = 4 + 4 + count;
10198 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdResetEvent -= 8;
10199 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdResetEvent);
10200 uint8_t* packetBeginPtr = streamPtr;
10201 uint8_t** streamPtrPtr = &streamPtr;
10202 uint32_t opcode_vkCmdResetEvent = OP_vkCmdResetEvent;
10203 memcpy(streamPtr, &opcode_vkCmdResetEvent, sizeof(uint32_t));
10204 streamPtr += sizeof(uint32_t);
10205 memcpy(streamPtr, &packetSize_vkCmdResetEvent, sizeof(uint32_t));
10206 streamPtr += sizeof(uint32_t);
10207 if (!queueSubmitWithCommandsEnabled) {
10208 uint64_t cgen_var_0;
10209 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10210 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10211 *streamPtrPtr += 1 * 8;
10212 }
10213 uint64_t cgen_var_0;
10214 *&cgen_var_0 = get_host_u64_VkEvent((*&local_event));
10215 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10216 *streamPtrPtr += 1 * 8;
10217 memcpy(*streamPtrPtr, (VkPipelineStageFlags*)&local_stageMask, sizeof(VkPipelineStageFlags));
10218 *streamPtrPtr += sizeof(VkPipelineStageFlags);
10219 ++encodeCount;
10220 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10221 pool->freeAll();
10222 stream->clearPool();
10223 }
10224 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10225 }
10226
vkCmdWaitEvents(VkCommandBuffer commandBuffer,uint32_t eventCount,const VkEvent * pEvents,VkPipelineStageFlags srcStageMask,VkPipelineStageFlags dstStageMask,uint32_t memoryBarrierCount,const VkMemoryBarrier * pMemoryBarriers,uint32_t bufferMemoryBarrierCount,const VkBufferMemoryBarrier * pBufferMemoryBarriers,uint32_t imageMemoryBarrierCount,const VkImageMemoryBarrier * pImageMemoryBarriers,uint32_t doLock)10227 void VkEncoder::vkCmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount,
10228 const VkEvent* pEvents, VkPipelineStageFlags srcStageMask,
10229 VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount,
10230 const VkMemoryBarrier* pMemoryBarriers,
10231 uint32_t bufferMemoryBarrierCount,
10232 const VkBufferMemoryBarrier* pBufferMemoryBarriers,
10233 uint32_t imageMemoryBarrierCount,
10234 const VkImageMemoryBarrier* pImageMemoryBarriers, uint32_t doLock) {
10235 (void)doLock;
10236 bool queueSubmitWithCommandsEnabled =
10237 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10238 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10239 auto stream = mImpl->stream();
10240 auto pool = mImpl->pool();
10241 VkCommandBuffer local_commandBuffer;
10242 uint32_t local_eventCount;
10243 VkEvent* local_pEvents;
10244 VkPipelineStageFlags local_srcStageMask;
10245 VkPipelineStageFlags local_dstStageMask;
10246 uint32_t local_memoryBarrierCount;
10247 VkMemoryBarrier* local_pMemoryBarriers;
10248 uint32_t local_bufferMemoryBarrierCount;
10249 VkBufferMemoryBarrier* local_pBufferMemoryBarriers;
10250 uint32_t local_imageMemoryBarrierCount;
10251 VkImageMemoryBarrier* local_pImageMemoryBarriers;
10252 local_commandBuffer = commandBuffer;
10253 local_eventCount = eventCount;
10254 // Avoiding deepcopy for pEvents
10255 local_pEvents = (VkEvent*)pEvents;
10256 local_srcStageMask = srcStageMask;
10257 local_dstStageMask = dstStageMask;
10258 local_memoryBarrierCount = memoryBarrierCount;
10259 local_pMemoryBarriers = nullptr;
10260 if (pMemoryBarriers) {
10261 local_pMemoryBarriers =
10262 (VkMemoryBarrier*)pool->alloc(((memoryBarrierCount)) * sizeof(const VkMemoryBarrier));
10263 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
10264 deepcopy_VkMemoryBarrier(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMemoryBarriers + i,
10265 (VkMemoryBarrier*)(local_pMemoryBarriers + i));
10266 }
10267 }
10268 local_bufferMemoryBarrierCount = bufferMemoryBarrierCount;
10269 local_pBufferMemoryBarriers = nullptr;
10270 if (pBufferMemoryBarriers) {
10271 local_pBufferMemoryBarriers = (VkBufferMemoryBarrier*)pool->alloc(
10272 ((bufferMemoryBarrierCount)) * sizeof(const VkBufferMemoryBarrier));
10273 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
10274 deepcopy_VkBufferMemoryBarrier(
10275 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBufferMemoryBarriers + i,
10276 (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
10277 }
10278 }
10279 local_imageMemoryBarrierCount = imageMemoryBarrierCount;
10280 local_pImageMemoryBarriers = nullptr;
10281 if (pImageMemoryBarriers) {
10282 local_pImageMemoryBarriers = (VkImageMemoryBarrier*)pool->alloc(
10283 ((imageMemoryBarrierCount)) * sizeof(const VkImageMemoryBarrier));
10284 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
10285 deepcopy_VkImageMemoryBarrier(pool, VK_STRUCTURE_TYPE_MAX_ENUM,
10286 pImageMemoryBarriers + i,
10287 (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
10288 }
10289 }
10290 if (local_pMemoryBarriers) {
10291 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
10292 transform_tohost_VkMemoryBarrier(sResourceTracker,
10293 (VkMemoryBarrier*)(local_pMemoryBarriers + i));
10294 }
10295 }
10296 if (local_pBufferMemoryBarriers) {
10297 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
10298 transform_tohost_VkBufferMemoryBarrier(
10299 sResourceTracker, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
10300 }
10301 }
10302 if (local_pImageMemoryBarriers) {
10303 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
10304 transform_tohost_VkImageMemoryBarrier(
10305 sResourceTracker, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
10306 }
10307 }
10308 size_t count = 0;
10309 size_t* countPtr = &count;
10310 {
10311 uint64_t cgen_var_0;
10312 *countPtr += 1 * 8;
10313 *countPtr += sizeof(uint32_t);
10314 if (((eventCount))) {
10315 *countPtr += ((eventCount)) * 8;
10316 }
10317 *countPtr += sizeof(VkPipelineStageFlags);
10318 *countPtr += sizeof(VkPipelineStageFlags);
10319 *countPtr += sizeof(uint32_t);
10320 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
10321 count_VkMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
10322 (VkMemoryBarrier*)(local_pMemoryBarriers + i), countPtr);
10323 }
10324 *countPtr += sizeof(uint32_t);
10325 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
10326 count_VkBufferMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
10327 (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i),
10328 countPtr);
10329 }
10330 *countPtr += sizeof(uint32_t);
10331 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
10332 count_VkImageMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
10333 (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i),
10334 countPtr);
10335 }
10336 }
10337 uint32_t packetSize_vkCmdWaitEvents = 4 + 4 + count;
10338 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdWaitEvents -= 8;
10339 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdWaitEvents);
10340 uint8_t* packetBeginPtr = streamPtr;
10341 uint8_t** streamPtrPtr = &streamPtr;
10342 uint32_t opcode_vkCmdWaitEvents = OP_vkCmdWaitEvents;
10343 memcpy(streamPtr, &opcode_vkCmdWaitEvents, sizeof(uint32_t));
10344 streamPtr += sizeof(uint32_t);
10345 memcpy(streamPtr, &packetSize_vkCmdWaitEvents, sizeof(uint32_t));
10346 streamPtr += sizeof(uint32_t);
10347 if (!queueSubmitWithCommandsEnabled) {
10348 uint64_t cgen_var_0;
10349 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10350 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10351 *streamPtrPtr += 1 * 8;
10352 }
10353 memcpy(*streamPtrPtr, (uint32_t*)&local_eventCount, sizeof(uint32_t));
10354 *streamPtrPtr += sizeof(uint32_t);
10355 if (((eventCount))) {
10356 uint8_t* cgen_var_0_ptr = (uint8_t*)(*streamPtrPtr);
10357 for (uint32_t k = 0; k < ((eventCount)); ++k) {
10358 uint64_t tmpval = get_host_u64_VkEvent(local_pEvents[k]);
10359 memcpy(cgen_var_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
10360 }
10361 *streamPtrPtr += 8 * ((eventCount));
10362 }
10363 memcpy(*streamPtrPtr, (VkPipelineStageFlags*)&local_srcStageMask, sizeof(VkPipelineStageFlags));
10364 *streamPtrPtr += sizeof(VkPipelineStageFlags);
10365 memcpy(*streamPtrPtr, (VkPipelineStageFlags*)&local_dstStageMask, sizeof(VkPipelineStageFlags));
10366 *streamPtrPtr += sizeof(VkPipelineStageFlags);
10367 memcpy(*streamPtrPtr, (uint32_t*)&local_memoryBarrierCount, sizeof(uint32_t));
10368 *streamPtrPtr += sizeof(uint32_t);
10369 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
10370 reservedmarshal_VkMemoryBarrier(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
10371 (VkMemoryBarrier*)(local_pMemoryBarriers + i),
10372 streamPtrPtr);
10373 }
10374 memcpy(*streamPtrPtr, (uint32_t*)&local_bufferMemoryBarrierCount, sizeof(uint32_t));
10375 *streamPtrPtr += sizeof(uint32_t);
10376 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
10377 reservedmarshal_VkBufferMemoryBarrier(
10378 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
10379 (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i), streamPtrPtr);
10380 }
10381 memcpy(*streamPtrPtr, (uint32_t*)&local_imageMemoryBarrierCount, sizeof(uint32_t));
10382 *streamPtrPtr += sizeof(uint32_t);
10383 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
10384 reservedmarshal_VkImageMemoryBarrier(
10385 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
10386 (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i), streamPtrPtr);
10387 }
10388 ++encodeCount;
10389 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10390 pool->freeAll();
10391 stream->clearPool();
10392 }
10393 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10394 }
10395
vkCmdPipelineBarrier(VkCommandBuffer commandBuffer,VkPipelineStageFlags srcStageMask,VkPipelineStageFlags dstStageMask,VkDependencyFlags dependencyFlags,uint32_t memoryBarrierCount,const VkMemoryBarrier * pMemoryBarriers,uint32_t bufferMemoryBarrierCount,const VkBufferMemoryBarrier * pBufferMemoryBarriers,uint32_t imageMemoryBarrierCount,const VkImageMemoryBarrier * pImageMemoryBarriers,uint32_t doLock)10396 void VkEncoder::vkCmdPipelineBarrier(
10397 VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask,
10398 VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags,
10399 uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers,
10400 uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers,
10401 uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers,
10402 uint32_t doLock) {
10403 (void)doLock;
10404 bool queueSubmitWithCommandsEnabled =
10405 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10406 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10407 auto stream = mImpl->stream();
10408 auto pool = mImpl->pool();
10409 VkCommandBuffer local_commandBuffer;
10410 VkPipelineStageFlags local_srcStageMask;
10411 VkPipelineStageFlags local_dstStageMask;
10412 VkDependencyFlags local_dependencyFlags;
10413 uint32_t local_memoryBarrierCount;
10414 VkMemoryBarrier* local_pMemoryBarriers;
10415 uint32_t local_bufferMemoryBarrierCount;
10416 VkBufferMemoryBarrier* local_pBufferMemoryBarriers;
10417 uint32_t local_imageMemoryBarrierCount;
10418 VkImageMemoryBarrier* local_pImageMemoryBarriers;
10419 local_commandBuffer = commandBuffer;
10420 local_srcStageMask = srcStageMask;
10421 local_dstStageMask = dstStageMask;
10422 local_dependencyFlags = dependencyFlags;
10423 local_memoryBarrierCount = memoryBarrierCount;
10424 local_pMemoryBarriers = nullptr;
10425 if (pMemoryBarriers) {
10426 local_pMemoryBarriers =
10427 (VkMemoryBarrier*)pool->alloc(((memoryBarrierCount)) * sizeof(const VkMemoryBarrier));
10428 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
10429 deepcopy_VkMemoryBarrier(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMemoryBarriers + i,
10430 (VkMemoryBarrier*)(local_pMemoryBarriers + i));
10431 }
10432 }
10433 local_bufferMemoryBarrierCount = bufferMemoryBarrierCount;
10434 local_pBufferMemoryBarriers = nullptr;
10435 if (pBufferMemoryBarriers) {
10436 local_pBufferMemoryBarriers = (VkBufferMemoryBarrier*)pool->alloc(
10437 ((bufferMemoryBarrierCount)) * sizeof(const VkBufferMemoryBarrier));
10438 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
10439 deepcopy_VkBufferMemoryBarrier(
10440 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBufferMemoryBarriers + i,
10441 (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
10442 }
10443 }
10444 local_imageMemoryBarrierCount = imageMemoryBarrierCount;
10445 local_pImageMemoryBarriers = nullptr;
10446 if (pImageMemoryBarriers) {
10447 local_pImageMemoryBarriers = (VkImageMemoryBarrier*)pool->alloc(
10448 ((imageMemoryBarrierCount)) * sizeof(const VkImageMemoryBarrier));
10449 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
10450 deepcopy_VkImageMemoryBarrier(pool, VK_STRUCTURE_TYPE_MAX_ENUM,
10451 pImageMemoryBarriers + i,
10452 (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
10453 }
10454 }
10455 if (local_pMemoryBarriers) {
10456 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
10457 transform_tohost_VkMemoryBarrier(sResourceTracker,
10458 (VkMemoryBarrier*)(local_pMemoryBarriers + i));
10459 }
10460 }
10461 if (local_pBufferMemoryBarriers) {
10462 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
10463 transform_tohost_VkBufferMemoryBarrier(
10464 sResourceTracker, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
10465 }
10466 }
10467 if (local_pImageMemoryBarriers) {
10468 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
10469 transform_tohost_VkImageMemoryBarrier(
10470 sResourceTracker, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
10471 }
10472 }
10473 size_t count = 0;
10474 size_t* countPtr = &count;
10475 {
10476 uint64_t cgen_var_0;
10477 *countPtr += 1 * 8;
10478 *countPtr += sizeof(VkPipelineStageFlags);
10479 *countPtr += sizeof(VkPipelineStageFlags);
10480 *countPtr += sizeof(VkDependencyFlags);
10481 *countPtr += sizeof(uint32_t);
10482 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
10483 count_VkMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
10484 (VkMemoryBarrier*)(local_pMemoryBarriers + i), countPtr);
10485 }
10486 *countPtr += sizeof(uint32_t);
10487 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
10488 count_VkBufferMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
10489 (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i),
10490 countPtr);
10491 }
10492 *countPtr += sizeof(uint32_t);
10493 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
10494 count_VkImageMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
10495 (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i),
10496 countPtr);
10497 }
10498 }
10499 uint32_t packetSize_vkCmdPipelineBarrier = 4 + 4 + count;
10500 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdPipelineBarrier -= 8;
10501 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdPipelineBarrier);
10502 uint8_t* packetBeginPtr = streamPtr;
10503 uint8_t** streamPtrPtr = &streamPtr;
10504 uint32_t opcode_vkCmdPipelineBarrier = OP_vkCmdPipelineBarrier;
10505 memcpy(streamPtr, &opcode_vkCmdPipelineBarrier, sizeof(uint32_t));
10506 streamPtr += sizeof(uint32_t);
10507 memcpy(streamPtr, &packetSize_vkCmdPipelineBarrier, sizeof(uint32_t));
10508 streamPtr += sizeof(uint32_t);
10509 if (!queueSubmitWithCommandsEnabled) {
10510 uint64_t cgen_var_0;
10511 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10512 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10513 *streamPtrPtr += 1 * 8;
10514 }
10515 memcpy(*streamPtrPtr, (VkPipelineStageFlags*)&local_srcStageMask, sizeof(VkPipelineStageFlags));
10516 *streamPtrPtr += sizeof(VkPipelineStageFlags);
10517 memcpy(*streamPtrPtr, (VkPipelineStageFlags*)&local_dstStageMask, sizeof(VkPipelineStageFlags));
10518 *streamPtrPtr += sizeof(VkPipelineStageFlags);
10519 memcpy(*streamPtrPtr, (VkDependencyFlags*)&local_dependencyFlags, sizeof(VkDependencyFlags));
10520 *streamPtrPtr += sizeof(VkDependencyFlags);
10521 memcpy(*streamPtrPtr, (uint32_t*)&local_memoryBarrierCount, sizeof(uint32_t));
10522 *streamPtrPtr += sizeof(uint32_t);
10523 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i) {
10524 reservedmarshal_VkMemoryBarrier(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
10525 (VkMemoryBarrier*)(local_pMemoryBarriers + i),
10526 streamPtrPtr);
10527 }
10528 memcpy(*streamPtrPtr, (uint32_t*)&local_bufferMemoryBarrierCount, sizeof(uint32_t));
10529 *streamPtrPtr += sizeof(uint32_t);
10530 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i) {
10531 reservedmarshal_VkBufferMemoryBarrier(
10532 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
10533 (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i), streamPtrPtr);
10534 }
10535 memcpy(*streamPtrPtr, (uint32_t*)&local_imageMemoryBarrierCount, sizeof(uint32_t));
10536 *streamPtrPtr += sizeof(uint32_t);
10537 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i) {
10538 reservedmarshal_VkImageMemoryBarrier(
10539 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
10540 (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i), streamPtrPtr);
10541 }
10542 ++encodeCount;
10543 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10544 pool->freeAll();
10545 stream->clearPool();
10546 }
10547 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10548 }
10549
vkCmdBeginQuery(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,VkQueryControlFlags flags,uint32_t doLock)10550 void VkEncoder::vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
10551 uint32_t query, VkQueryControlFlags flags, uint32_t doLock) {
10552 (void)doLock;
10553 bool queueSubmitWithCommandsEnabled =
10554 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10555 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10556 auto stream = mImpl->stream();
10557 auto pool = mImpl->pool();
10558 VkCommandBuffer local_commandBuffer;
10559 VkQueryPool local_queryPool;
10560 uint32_t local_query;
10561 VkQueryControlFlags local_flags;
10562 local_commandBuffer = commandBuffer;
10563 local_queryPool = queryPool;
10564 local_query = query;
10565 local_flags = flags;
10566 size_t count = 0;
10567 size_t* countPtr = &count;
10568 {
10569 uint64_t cgen_var_0;
10570 *countPtr += 1 * 8;
10571 uint64_t cgen_var_1;
10572 *countPtr += 1 * 8;
10573 *countPtr += sizeof(uint32_t);
10574 *countPtr += sizeof(VkQueryControlFlags);
10575 }
10576 uint32_t packetSize_vkCmdBeginQuery = 4 + 4 + count;
10577 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginQuery -= 8;
10578 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginQuery);
10579 uint8_t* packetBeginPtr = streamPtr;
10580 uint8_t** streamPtrPtr = &streamPtr;
10581 uint32_t opcode_vkCmdBeginQuery = OP_vkCmdBeginQuery;
10582 memcpy(streamPtr, &opcode_vkCmdBeginQuery, sizeof(uint32_t));
10583 streamPtr += sizeof(uint32_t);
10584 memcpy(streamPtr, &packetSize_vkCmdBeginQuery, sizeof(uint32_t));
10585 streamPtr += sizeof(uint32_t);
10586 if (!queueSubmitWithCommandsEnabled) {
10587 uint64_t cgen_var_0;
10588 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10589 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10590 *streamPtrPtr += 1 * 8;
10591 }
10592 uint64_t cgen_var_0;
10593 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
10594 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10595 *streamPtrPtr += 1 * 8;
10596 memcpy(*streamPtrPtr, (uint32_t*)&local_query, sizeof(uint32_t));
10597 *streamPtrPtr += sizeof(uint32_t);
10598 memcpy(*streamPtrPtr, (VkQueryControlFlags*)&local_flags, sizeof(VkQueryControlFlags));
10599 *streamPtrPtr += sizeof(VkQueryControlFlags);
10600 ++encodeCount;
10601 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10602 pool->freeAll();
10603 stream->clearPool();
10604 }
10605 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10606 }
10607
vkCmdEndQuery(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,uint32_t doLock)10608 void VkEncoder::vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query,
10609 uint32_t doLock) {
10610 (void)doLock;
10611 bool queueSubmitWithCommandsEnabled =
10612 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10613 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10614 auto stream = mImpl->stream();
10615 auto pool = mImpl->pool();
10616 VkCommandBuffer local_commandBuffer;
10617 VkQueryPool local_queryPool;
10618 uint32_t local_query;
10619 local_commandBuffer = commandBuffer;
10620 local_queryPool = queryPool;
10621 local_query = query;
10622 size_t count = 0;
10623 size_t* countPtr = &count;
10624 {
10625 uint64_t cgen_var_0;
10626 *countPtr += 1 * 8;
10627 uint64_t cgen_var_1;
10628 *countPtr += 1 * 8;
10629 *countPtr += sizeof(uint32_t);
10630 }
10631 uint32_t packetSize_vkCmdEndQuery = 4 + 4 + count;
10632 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndQuery -= 8;
10633 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndQuery);
10634 uint8_t* packetBeginPtr = streamPtr;
10635 uint8_t** streamPtrPtr = &streamPtr;
10636 uint32_t opcode_vkCmdEndQuery = OP_vkCmdEndQuery;
10637 memcpy(streamPtr, &opcode_vkCmdEndQuery, sizeof(uint32_t));
10638 streamPtr += sizeof(uint32_t);
10639 memcpy(streamPtr, &packetSize_vkCmdEndQuery, sizeof(uint32_t));
10640 streamPtr += sizeof(uint32_t);
10641 if (!queueSubmitWithCommandsEnabled) {
10642 uint64_t cgen_var_0;
10643 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10644 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10645 *streamPtrPtr += 1 * 8;
10646 }
10647 uint64_t cgen_var_0;
10648 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
10649 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10650 *streamPtrPtr += 1 * 8;
10651 memcpy(*streamPtrPtr, (uint32_t*)&local_query, sizeof(uint32_t));
10652 *streamPtrPtr += sizeof(uint32_t);
10653 ++encodeCount;
10654 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10655 pool->freeAll();
10656 stream->clearPool();
10657 }
10658 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10659 }
10660
vkCmdResetQueryPool(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,uint32_t doLock)10661 void VkEncoder::vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
10662 uint32_t firstQuery, uint32_t queryCount, uint32_t doLock) {
10663 (void)doLock;
10664 bool queueSubmitWithCommandsEnabled =
10665 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10666 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10667 auto stream = mImpl->stream();
10668 auto pool = mImpl->pool();
10669 VkCommandBuffer local_commandBuffer;
10670 VkQueryPool local_queryPool;
10671 uint32_t local_firstQuery;
10672 uint32_t local_queryCount;
10673 local_commandBuffer = commandBuffer;
10674 local_queryPool = queryPool;
10675 local_firstQuery = firstQuery;
10676 local_queryCount = queryCount;
10677 size_t count = 0;
10678 size_t* countPtr = &count;
10679 {
10680 uint64_t cgen_var_0;
10681 *countPtr += 1 * 8;
10682 uint64_t cgen_var_1;
10683 *countPtr += 1 * 8;
10684 *countPtr += sizeof(uint32_t);
10685 *countPtr += sizeof(uint32_t);
10686 }
10687 uint32_t packetSize_vkCmdResetQueryPool = 4 + 4 + count;
10688 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdResetQueryPool -= 8;
10689 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdResetQueryPool);
10690 uint8_t* packetBeginPtr = streamPtr;
10691 uint8_t** streamPtrPtr = &streamPtr;
10692 uint32_t opcode_vkCmdResetQueryPool = OP_vkCmdResetQueryPool;
10693 memcpy(streamPtr, &opcode_vkCmdResetQueryPool, sizeof(uint32_t));
10694 streamPtr += sizeof(uint32_t);
10695 memcpy(streamPtr, &packetSize_vkCmdResetQueryPool, sizeof(uint32_t));
10696 streamPtr += sizeof(uint32_t);
10697 if (!queueSubmitWithCommandsEnabled) {
10698 uint64_t cgen_var_0;
10699 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10700 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10701 *streamPtrPtr += 1 * 8;
10702 }
10703 uint64_t cgen_var_0;
10704 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
10705 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10706 *streamPtrPtr += 1 * 8;
10707 memcpy(*streamPtrPtr, (uint32_t*)&local_firstQuery, sizeof(uint32_t));
10708 *streamPtrPtr += sizeof(uint32_t);
10709 memcpy(*streamPtrPtr, (uint32_t*)&local_queryCount, sizeof(uint32_t));
10710 *streamPtrPtr += sizeof(uint32_t);
10711 ++encodeCount;
10712 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10713 pool->freeAll();
10714 stream->clearPool();
10715 }
10716 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10717 }
10718
vkCmdWriteTimestamp(VkCommandBuffer commandBuffer,VkPipelineStageFlagBits pipelineStage,VkQueryPool queryPool,uint32_t query,uint32_t doLock)10719 void VkEncoder::vkCmdWriteTimestamp(VkCommandBuffer commandBuffer,
10720 VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool,
10721 uint32_t query, uint32_t doLock) {
10722 (void)doLock;
10723 bool queueSubmitWithCommandsEnabled =
10724 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10725 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10726 auto stream = mImpl->stream();
10727 auto pool = mImpl->pool();
10728 VkCommandBuffer local_commandBuffer;
10729 VkPipelineStageFlagBits local_pipelineStage;
10730 VkQueryPool local_queryPool;
10731 uint32_t local_query;
10732 local_commandBuffer = commandBuffer;
10733 local_pipelineStage = pipelineStage;
10734 local_queryPool = queryPool;
10735 local_query = query;
10736 size_t count = 0;
10737 size_t* countPtr = &count;
10738 {
10739 uint64_t cgen_var_0;
10740 *countPtr += 1 * 8;
10741 *countPtr += sizeof(VkPipelineStageFlagBits);
10742 uint64_t cgen_var_1;
10743 *countPtr += 1 * 8;
10744 *countPtr += sizeof(uint32_t);
10745 }
10746 uint32_t packetSize_vkCmdWriteTimestamp = 4 + 4 + count;
10747 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdWriteTimestamp -= 8;
10748 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdWriteTimestamp);
10749 uint8_t* packetBeginPtr = streamPtr;
10750 uint8_t** streamPtrPtr = &streamPtr;
10751 uint32_t opcode_vkCmdWriteTimestamp = OP_vkCmdWriteTimestamp;
10752 memcpy(streamPtr, &opcode_vkCmdWriteTimestamp, sizeof(uint32_t));
10753 streamPtr += sizeof(uint32_t);
10754 memcpy(streamPtr, &packetSize_vkCmdWriteTimestamp, sizeof(uint32_t));
10755 streamPtr += sizeof(uint32_t);
10756 if (!queueSubmitWithCommandsEnabled) {
10757 uint64_t cgen_var_0;
10758 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10759 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10760 *streamPtrPtr += 1 * 8;
10761 }
10762 memcpy(*streamPtrPtr, (VkPipelineStageFlagBits*)&local_pipelineStage,
10763 sizeof(VkPipelineStageFlagBits));
10764 *streamPtrPtr += sizeof(VkPipelineStageFlagBits);
10765 uint64_t cgen_var_0;
10766 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
10767 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10768 *streamPtrPtr += 1 * 8;
10769 memcpy(*streamPtrPtr, (uint32_t*)&local_query, sizeof(uint32_t));
10770 *streamPtrPtr += sizeof(uint32_t);
10771 ++encodeCount;
10772 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10773 pool->freeAll();
10774 stream->clearPool();
10775 }
10776 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10777 }
10778
vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize stride,VkQueryResultFlags flags,uint32_t doLock)10779 void VkEncoder::vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
10780 uint32_t firstQuery, uint32_t queryCount,
10781 VkBuffer dstBuffer, VkDeviceSize dstOffset,
10782 VkDeviceSize stride, VkQueryResultFlags flags,
10783 uint32_t doLock) {
10784 (void)doLock;
10785 bool queueSubmitWithCommandsEnabled =
10786 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10787 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10788 auto stream = mImpl->stream();
10789 auto pool = mImpl->pool();
10790 VkCommandBuffer local_commandBuffer;
10791 VkQueryPool local_queryPool;
10792 uint32_t local_firstQuery;
10793 uint32_t local_queryCount;
10794 VkBuffer local_dstBuffer;
10795 VkDeviceSize local_dstOffset;
10796 VkDeviceSize local_stride;
10797 VkQueryResultFlags local_flags;
10798 local_commandBuffer = commandBuffer;
10799 local_queryPool = queryPool;
10800 local_firstQuery = firstQuery;
10801 local_queryCount = queryCount;
10802 local_dstBuffer = dstBuffer;
10803 local_dstOffset = dstOffset;
10804 local_stride = stride;
10805 local_flags = flags;
10806 size_t count = 0;
10807 size_t* countPtr = &count;
10808 {
10809 uint64_t cgen_var_0;
10810 *countPtr += 1 * 8;
10811 uint64_t cgen_var_1;
10812 *countPtr += 1 * 8;
10813 *countPtr += sizeof(uint32_t);
10814 *countPtr += sizeof(uint32_t);
10815 uint64_t cgen_var_2;
10816 *countPtr += 1 * 8;
10817 *countPtr += sizeof(VkDeviceSize);
10818 *countPtr += sizeof(VkDeviceSize);
10819 *countPtr += sizeof(VkQueryResultFlags);
10820 }
10821 uint32_t packetSize_vkCmdCopyQueryPoolResults = 4 + 4 + count;
10822 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyQueryPoolResults -= 8;
10823 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyQueryPoolResults);
10824 uint8_t* packetBeginPtr = streamPtr;
10825 uint8_t** streamPtrPtr = &streamPtr;
10826 uint32_t opcode_vkCmdCopyQueryPoolResults = OP_vkCmdCopyQueryPoolResults;
10827 memcpy(streamPtr, &opcode_vkCmdCopyQueryPoolResults, sizeof(uint32_t));
10828 streamPtr += sizeof(uint32_t);
10829 memcpy(streamPtr, &packetSize_vkCmdCopyQueryPoolResults, sizeof(uint32_t));
10830 streamPtr += sizeof(uint32_t);
10831 if (!queueSubmitWithCommandsEnabled) {
10832 uint64_t cgen_var_0;
10833 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10834 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10835 *streamPtrPtr += 1 * 8;
10836 }
10837 uint64_t cgen_var_0;
10838 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
10839 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10840 *streamPtrPtr += 1 * 8;
10841 memcpy(*streamPtrPtr, (uint32_t*)&local_firstQuery, sizeof(uint32_t));
10842 *streamPtrPtr += sizeof(uint32_t);
10843 memcpy(*streamPtrPtr, (uint32_t*)&local_queryCount, sizeof(uint32_t));
10844 *streamPtrPtr += sizeof(uint32_t);
10845 uint64_t cgen_var_1;
10846 *&cgen_var_1 = get_host_u64_VkBuffer((*&local_dstBuffer));
10847 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
10848 *streamPtrPtr += 1 * 8;
10849 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
10850 *streamPtrPtr += sizeof(VkDeviceSize);
10851 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_stride, sizeof(VkDeviceSize));
10852 *streamPtrPtr += sizeof(VkDeviceSize);
10853 memcpy(*streamPtrPtr, (VkQueryResultFlags*)&local_flags, sizeof(VkQueryResultFlags));
10854 *streamPtrPtr += sizeof(VkQueryResultFlags);
10855 ++encodeCount;
10856 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10857 pool->freeAll();
10858 stream->clearPool();
10859 }
10860 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10861 }
10862
vkCmdPushConstants(VkCommandBuffer commandBuffer,VkPipelineLayout layout,VkShaderStageFlags stageFlags,uint32_t offset,uint32_t size,const void * pValues,uint32_t doLock)10863 void VkEncoder::vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout,
10864 VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size,
10865 const void* pValues, uint32_t doLock) {
10866 (void)doLock;
10867 bool queueSubmitWithCommandsEnabled =
10868 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10869 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10870 auto stream = mImpl->stream();
10871 auto pool = mImpl->pool();
10872 VkCommandBuffer local_commandBuffer;
10873 VkPipelineLayout local_layout;
10874 VkShaderStageFlags local_stageFlags;
10875 uint32_t local_offset;
10876 uint32_t local_size;
10877 void* local_pValues;
10878 local_commandBuffer = commandBuffer;
10879 local_layout = layout;
10880 local_stageFlags = stageFlags;
10881 local_offset = offset;
10882 local_size = size;
10883 // Avoiding deepcopy for pValues
10884 local_pValues = (void*)pValues;
10885 size_t count = 0;
10886 size_t* countPtr = &count;
10887 {
10888 uint64_t cgen_var_0;
10889 *countPtr += 1 * 8;
10890 uint64_t cgen_var_1;
10891 *countPtr += 1 * 8;
10892 *countPtr += sizeof(VkShaderStageFlags);
10893 *countPtr += sizeof(uint32_t);
10894 *countPtr += sizeof(uint32_t);
10895 *countPtr += ((size)) * sizeof(uint8_t);
10896 }
10897 uint32_t packetSize_vkCmdPushConstants = 4 + 4 + count;
10898 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdPushConstants -= 8;
10899 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdPushConstants);
10900 uint8_t* packetBeginPtr = streamPtr;
10901 uint8_t** streamPtrPtr = &streamPtr;
10902 uint32_t opcode_vkCmdPushConstants = OP_vkCmdPushConstants;
10903 memcpy(streamPtr, &opcode_vkCmdPushConstants, sizeof(uint32_t));
10904 streamPtr += sizeof(uint32_t);
10905 memcpy(streamPtr, &packetSize_vkCmdPushConstants, sizeof(uint32_t));
10906 streamPtr += sizeof(uint32_t);
10907 if (!queueSubmitWithCommandsEnabled) {
10908 uint64_t cgen_var_0;
10909 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10910 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10911 *streamPtrPtr += 1 * 8;
10912 }
10913 uint64_t cgen_var_0;
10914 *&cgen_var_0 = get_host_u64_VkPipelineLayout((*&local_layout));
10915 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10916 *streamPtrPtr += 1 * 8;
10917 memcpy(*streamPtrPtr, (VkShaderStageFlags*)&local_stageFlags, sizeof(VkShaderStageFlags));
10918 *streamPtrPtr += sizeof(VkShaderStageFlags);
10919 memcpy(*streamPtrPtr, (uint32_t*)&local_offset, sizeof(uint32_t));
10920 *streamPtrPtr += sizeof(uint32_t);
10921 memcpy(*streamPtrPtr, (uint32_t*)&local_size, sizeof(uint32_t));
10922 *streamPtrPtr += sizeof(uint32_t);
10923 memcpy(*streamPtrPtr, (void*)local_pValues, ((size)) * sizeof(uint8_t));
10924 *streamPtrPtr += ((size)) * sizeof(uint8_t);
10925 ++encodeCount;
10926 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10927 pool->freeAll();
10928 stream->clearPool();
10929 }
10930 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10931 }
10932
vkCmdBeginRenderPass(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,VkSubpassContents contents,uint32_t doLock)10933 void VkEncoder::vkCmdBeginRenderPass(VkCommandBuffer commandBuffer,
10934 const VkRenderPassBeginInfo* pRenderPassBegin,
10935 VkSubpassContents contents, uint32_t doLock) {
10936 (void)doLock;
10937 bool queueSubmitWithCommandsEnabled =
10938 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
10939 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
10940 auto stream = mImpl->stream();
10941 auto pool = mImpl->pool();
10942 VkCommandBuffer local_commandBuffer;
10943 VkRenderPassBeginInfo* local_pRenderPassBegin;
10944 VkSubpassContents local_contents;
10945 local_commandBuffer = commandBuffer;
10946 local_pRenderPassBegin = nullptr;
10947 if (pRenderPassBegin) {
10948 local_pRenderPassBegin =
10949 (VkRenderPassBeginInfo*)pool->alloc(sizeof(const VkRenderPassBeginInfo));
10950 deepcopy_VkRenderPassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderPassBegin,
10951 (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
10952 }
10953 local_contents = contents;
10954 if (local_pRenderPassBegin) {
10955 transform_tohost_VkRenderPassBeginInfo(sResourceTracker,
10956 (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
10957 }
10958 size_t count = 0;
10959 size_t* countPtr = &count;
10960 {
10961 uint64_t cgen_var_0;
10962 *countPtr += 1 * 8;
10963 count_VkRenderPassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
10964 (VkRenderPassBeginInfo*)(local_pRenderPassBegin), countPtr);
10965 *countPtr += sizeof(VkSubpassContents);
10966 }
10967 uint32_t packetSize_vkCmdBeginRenderPass = 4 + 4 + count;
10968 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginRenderPass -= 8;
10969 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginRenderPass);
10970 uint8_t* packetBeginPtr = streamPtr;
10971 uint8_t** streamPtrPtr = &streamPtr;
10972 uint32_t opcode_vkCmdBeginRenderPass = OP_vkCmdBeginRenderPass;
10973 memcpy(streamPtr, &opcode_vkCmdBeginRenderPass, sizeof(uint32_t));
10974 streamPtr += sizeof(uint32_t);
10975 memcpy(streamPtr, &packetSize_vkCmdBeginRenderPass, sizeof(uint32_t));
10976 streamPtr += sizeof(uint32_t);
10977 if (!queueSubmitWithCommandsEnabled) {
10978 uint64_t cgen_var_0;
10979 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
10980 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
10981 *streamPtrPtr += 1 * 8;
10982 }
10983 reservedmarshal_VkRenderPassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
10984 (VkRenderPassBeginInfo*)(local_pRenderPassBegin),
10985 streamPtrPtr);
10986 memcpy(*streamPtrPtr, (VkSubpassContents*)&local_contents, sizeof(VkSubpassContents));
10987 *streamPtrPtr += sizeof(VkSubpassContents);
10988 ++encodeCount;
10989 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
10990 pool->freeAll();
10991 stream->clearPool();
10992 }
10993 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
10994 }
10995
vkCmdNextSubpass(VkCommandBuffer commandBuffer,VkSubpassContents contents,uint32_t doLock)10996 void VkEncoder::vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents,
10997 uint32_t doLock) {
10998 (void)doLock;
10999 bool queueSubmitWithCommandsEnabled =
11000 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11001 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11002 auto stream = mImpl->stream();
11003 auto pool = mImpl->pool();
11004 VkCommandBuffer local_commandBuffer;
11005 VkSubpassContents local_contents;
11006 local_commandBuffer = commandBuffer;
11007 local_contents = contents;
11008 size_t count = 0;
11009 size_t* countPtr = &count;
11010 {
11011 uint64_t cgen_var_0;
11012 *countPtr += 1 * 8;
11013 *countPtr += sizeof(VkSubpassContents);
11014 }
11015 uint32_t packetSize_vkCmdNextSubpass = 4 + 4 + count;
11016 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdNextSubpass -= 8;
11017 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdNextSubpass);
11018 uint8_t* packetBeginPtr = streamPtr;
11019 uint8_t** streamPtrPtr = &streamPtr;
11020 uint32_t opcode_vkCmdNextSubpass = OP_vkCmdNextSubpass;
11021 memcpy(streamPtr, &opcode_vkCmdNextSubpass, sizeof(uint32_t));
11022 streamPtr += sizeof(uint32_t);
11023 memcpy(streamPtr, &packetSize_vkCmdNextSubpass, sizeof(uint32_t));
11024 streamPtr += sizeof(uint32_t);
11025 if (!queueSubmitWithCommandsEnabled) {
11026 uint64_t cgen_var_0;
11027 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
11028 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11029 *streamPtrPtr += 1 * 8;
11030 }
11031 memcpy(*streamPtrPtr, (VkSubpassContents*)&local_contents, sizeof(VkSubpassContents));
11032 *streamPtrPtr += sizeof(VkSubpassContents);
11033 ++encodeCount;
11034 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11035 pool->freeAll();
11036 stream->clearPool();
11037 }
11038 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11039 }
11040
vkCmdEndRenderPass(VkCommandBuffer commandBuffer,uint32_t doLock)11041 void VkEncoder::vkCmdEndRenderPass(VkCommandBuffer commandBuffer, uint32_t doLock) {
11042 (void)doLock;
11043 bool queueSubmitWithCommandsEnabled =
11044 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11045 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11046 auto stream = mImpl->stream();
11047 auto pool = mImpl->pool();
11048 VkCommandBuffer local_commandBuffer;
11049 local_commandBuffer = commandBuffer;
11050 size_t count = 0;
11051 size_t* countPtr = &count;
11052 {
11053 uint64_t cgen_var_0;
11054 *countPtr += 1 * 8;
11055 }
11056 uint32_t packetSize_vkCmdEndRenderPass = 4 + 4 + count;
11057 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndRenderPass -= 8;
11058 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndRenderPass);
11059 uint8_t* packetBeginPtr = streamPtr;
11060 uint8_t** streamPtrPtr = &streamPtr;
11061 uint32_t opcode_vkCmdEndRenderPass = OP_vkCmdEndRenderPass;
11062 memcpy(streamPtr, &opcode_vkCmdEndRenderPass, sizeof(uint32_t));
11063 streamPtr += sizeof(uint32_t);
11064 memcpy(streamPtr, &packetSize_vkCmdEndRenderPass, sizeof(uint32_t));
11065 streamPtr += sizeof(uint32_t);
11066 if (!queueSubmitWithCommandsEnabled) {
11067 uint64_t cgen_var_0;
11068 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
11069 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11070 *streamPtrPtr += 1 * 8;
11071 }
11072 ++encodeCount;
11073 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11074 pool->freeAll();
11075 stream->clearPool();
11076 }
11077 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11078 }
11079
vkCmdExecuteCommands(VkCommandBuffer commandBuffer,uint32_t commandBufferCount,const VkCommandBuffer * pCommandBuffers,uint32_t doLock)11080 void VkEncoder::vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount,
11081 const VkCommandBuffer* pCommandBuffers, uint32_t doLock) {
11082 (void)doLock;
11083 bool queueSubmitWithCommandsEnabled =
11084 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11085 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11086 auto stream = mImpl->stream();
11087 auto pool = mImpl->pool();
11088 VkCommandBuffer local_commandBuffer;
11089 uint32_t local_commandBufferCount;
11090 VkCommandBuffer* local_pCommandBuffers;
11091 local_commandBuffer = commandBuffer;
11092 local_commandBufferCount = commandBufferCount;
11093 // Avoiding deepcopy for pCommandBuffers
11094 local_pCommandBuffers = (VkCommandBuffer*)pCommandBuffers;
11095 size_t count = 0;
11096 size_t* countPtr = &count;
11097 {
11098 uint64_t cgen_var_0;
11099 *countPtr += 1 * 8;
11100 *countPtr += sizeof(uint32_t);
11101 if (((commandBufferCount))) {
11102 *countPtr += ((commandBufferCount)) * 8;
11103 }
11104 }
11105 uint32_t packetSize_vkCmdExecuteCommands = 4 + 4 + count;
11106 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdExecuteCommands -= 8;
11107 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdExecuteCommands);
11108 uint8_t* packetBeginPtr = streamPtr;
11109 uint8_t** streamPtrPtr = &streamPtr;
11110 uint32_t opcode_vkCmdExecuteCommands = OP_vkCmdExecuteCommands;
11111 memcpy(streamPtr, &opcode_vkCmdExecuteCommands, sizeof(uint32_t));
11112 streamPtr += sizeof(uint32_t);
11113 memcpy(streamPtr, &packetSize_vkCmdExecuteCommands, sizeof(uint32_t));
11114 streamPtr += sizeof(uint32_t);
11115 if (!queueSubmitWithCommandsEnabled) {
11116 uint64_t cgen_var_0;
11117 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
11118 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11119 *streamPtrPtr += 1 * 8;
11120 }
11121 memcpy(*streamPtrPtr, (uint32_t*)&local_commandBufferCount, sizeof(uint32_t));
11122 *streamPtrPtr += sizeof(uint32_t);
11123 if (((commandBufferCount))) {
11124 uint8_t* cgen_var_0_ptr = (uint8_t*)(*streamPtrPtr);
11125 for (uint32_t k = 0; k < ((commandBufferCount)); ++k) {
11126 uint64_t tmpval = get_host_u64_VkCommandBuffer(local_pCommandBuffers[k]);
11127 memcpy(cgen_var_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
11128 }
11129 *streamPtrPtr += 8 * ((commandBufferCount));
11130 }
11131 ++encodeCount;
11132 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11133 pool->freeAll();
11134 stream->clearPool();
11135 }
11136 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11137 }
11138
11139 #endif
11140 #ifdef VK_VERSION_1_1
vkEnumerateInstanceVersion(uint32_t * pApiVersion,uint32_t doLock)11141 VkResult VkEncoder::vkEnumerateInstanceVersion(uint32_t* pApiVersion, uint32_t doLock) {
11142 (void)doLock;
11143 bool queueSubmitWithCommandsEnabled =
11144 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11145 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11146 auto stream = mImpl->stream();
11147 auto pool = mImpl->pool();
11148 size_t count = 0;
11149 size_t* countPtr = &count;
11150 {
11151 *countPtr += sizeof(uint32_t);
11152 }
11153 uint32_t packetSize_vkEnumerateInstanceVersion =
11154 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
11155 uint8_t* streamPtr = stream->reserve(packetSize_vkEnumerateInstanceVersion);
11156 uint8_t* packetBeginPtr = streamPtr;
11157 uint8_t** streamPtrPtr = &streamPtr;
11158 uint32_t opcode_vkEnumerateInstanceVersion = OP_vkEnumerateInstanceVersion;
11159 uint32_t seqno;
11160 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
11161 memcpy(streamPtr, &opcode_vkEnumerateInstanceVersion, sizeof(uint32_t));
11162 streamPtr += sizeof(uint32_t);
11163 memcpy(streamPtr, &packetSize_vkEnumerateInstanceVersion, sizeof(uint32_t));
11164 streamPtr += sizeof(uint32_t);
11165 if (queueSubmitWithCommandsEnabled) {
11166 memcpy(streamPtr, &seqno, sizeof(uint32_t));
11167 streamPtr += sizeof(uint32_t);
11168 }
11169 memcpy(*streamPtrPtr, (uint32_t*)pApiVersion, sizeof(uint32_t));
11170 *streamPtrPtr += sizeof(uint32_t);
11171 stream->read((uint32_t*)pApiVersion, sizeof(uint32_t));
11172 VkResult vkEnumerateInstanceVersion_VkResult_return = (VkResult)0;
11173 stream->read(&vkEnumerateInstanceVersion_VkResult_return, sizeof(VkResult));
11174 ++encodeCount;
11175 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11176 pool->freeAll();
11177 stream->clearPool();
11178 }
11179 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11180 return vkEnumerateInstanceVersion_VkResult_return;
11181 }
11182
vkBindBufferMemory2(VkDevice device,uint32_t bindInfoCount,const VkBindBufferMemoryInfo * pBindInfos,uint32_t doLock)11183 VkResult VkEncoder::vkBindBufferMemory2(VkDevice device, uint32_t bindInfoCount,
11184 const VkBindBufferMemoryInfo* pBindInfos, uint32_t doLock) {
11185 (void)doLock;
11186 bool queueSubmitWithCommandsEnabled =
11187 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11188 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11189 auto stream = mImpl->stream();
11190 auto pool = mImpl->pool();
11191 VkDevice local_device;
11192 uint32_t local_bindInfoCount;
11193 VkBindBufferMemoryInfo* local_pBindInfos;
11194 local_device = device;
11195 local_bindInfoCount = bindInfoCount;
11196 local_pBindInfos = nullptr;
11197 if (pBindInfos) {
11198 local_pBindInfos = (VkBindBufferMemoryInfo*)pool->alloc(
11199 ((bindInfoCount)) * sizeof(const VkBindBufferMemoryInfo));
11200 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
11201 deepcopy_VkBindBufferMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfos + i,
11202 (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
11203 }
11204 }
11205 if (local_pBindInfos) {
11206 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
11207 transform_tohost_VkBindBufferMemoryInfo(
11208 sResourceTracker, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
11209 }
11210 }
11211 size_t count = 0;
11212 size_t* countPtr = &count;
11213 {
11214 uint64_t cgen_var_0;
11215 *countPtr += 1 * 8;
11216 *countPtr += sizeof(uint32_t);
11217 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
11218 count_VkBindBufferMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
11219 (VkBindBufferMemoryInfo*)(local_pBindInfos + i), countPtr);
11220 }
11221 }
11222 uint32_t packetSize_vkBindBufferMemory2 =
11223 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
11224 uint8_t* streamPtr = stream->reserve(packetSize_vkBindBufferMemory2);
11225 uint8_t* packetBeginPtr = streamPtr;
11226 uint8_t** streamPtrPtr = &streamPtr;
11227 uint32_t opcode_vkBindBufferMemory2 = OP_vkBindBufferMemory2;
11228 uint32_t seqno;
11229 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
11230 memcpy(streamPtr, &opcode_vkBindBufferMemory2, sizeof(uint32_t));
11231 streamPtr += sizeof(uint32_t);
11232 memcpy(streamPtr, &packetSize_vkBindBufferMemory2, sizeof(uint32_t));
11233 streamPtr += sizeof(uint32_t);
11234 if (queueSubmitWithCommandsEnabled) {
11235 memcpy(streamPtr, &seqno, sizeof(uint32_t));
11236 streamPtr += sizeof(uint32_t);
11237 }
11238 uint64_t cgen_var_0;
11239 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
11240 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11241 *streamPtrPtr += 1 * 8;
11242 memcpy(*streamPtrPtr, (uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
11243 *streamPtrPtr += sizeof(uint32_t);
11244 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
11245 reservedmarshal_VkBindBufferMemoryInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11246 (VkBindBufferMemoryInfo*)(local_pBindInfos + i),
11247 streamPtrPtr);
11248 }
11249 VkResult vkBindBufferMemory2_VkResult_return = (VkResult)0;
11250 stream->read(&vkBindBufferMemory2_VkResult_return, sizeof(VkResult));
11251 ++encodeCount;
11252 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11253 pool->freeAll();
11254 stream->clearPool();
11255 }
11256 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11257 return vkBindBufferMemory2_VkResult_return;
11258 }
11259
vkBindImageMemory2(VkDevice device,uint32_t bindInfoCount,const VkBindImageMemoryInfo * pBindInfos,uint32_t doLock)11260 VkResult VkEncoder::vkBindImageMemory2(VkDevice device, uint32_t bindInfoCount,
11261 const VkBindImageMemoryInfo* pBindInfos, uint32_t doLock) {
11262 (void)doLock;
11263 bool queueSubmitWithCommandsEnabled =
11264 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11265 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11266 auto stream = mImpl->stream();
11267 auto pool = mImpl->pool();
11268 VkDevice local_device;
11269 uint32_t local_bindInfoCount;
11270 VkBindImageMemoryInfo* local_pBindInfos;
11271 local_device = device;
11272 local_bindInfoCount = bindInfoCount;
11273 local_pBindInfos = nullptr;
11274 if (pBindInfos) {
11275 local_pBindInfos = (VkBindImageMemoryInfo*)pool->alloc(((bindInfoCount)) *
11276 sizeof(const VkBindImageMemoryInfo));
11277 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
11278 deepcopy_VkBindImageMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfos + i,
11279 (VkBindImageMemoryInfo*)(local_pBindInfos + i));
11280 }
11281 }
11282 sResourceTracker->unwrap_VkBindImageMemory2_pBindInfos(bindInfoCount, pBindInfos,
11283 local_pBindInfos);
11284 if (local_pBindInfos) {
11285 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
11286 transform_tohost_VkBindImageMemoryInfo(sResourceTracker,
11287 (VkBindImageMemoryInfo*)(local_pBindInfos + i));
11288 }
11289 }
11290 size_t count = 0;
11291 size_t* countPtr = &count;
11292 {
11293 uint64_t cgen_var_0;
11294 *countPtr += 1 * 8;
11295 *countPtr += sizeof(uint32_t);
11296 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
11297 count_VkBindImageMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
11298 (VkBindImageMemoryInfo*)(local_pBindInfos + i), countPtr);
11299 }
11300 }
11301 uint32_t packetSize_vkBindImageMemory2 =
11302 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
11303 uint8_t* streamPtr = stream->reserve(packetSize_vkBindImageMemory2);
11304 uint8_t* packetBeginPtr = streamPtr;
11305 uint8_t** streamPtrPtr = &streamPtr;
11306 uint32_t opcode_vkBindImageMemory2 = OP_vkBindImageMemory2;
11307 uint32_t seqno;
11308 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
11309 memcpy(streamPtr, &opcode_vkBindImageMemory2, sizeof(uint32_t));
11310 streamPtr += sizeof(uint32_t);
11311 memcpy(streamPtr, &packetSize_vkBindImageMemory2, sizeof(uint32_t));
11312 streamPtr += sizeof(uint32_t);
11313 if (queueSubmitWithCommandsEnabled) {
11314 memcpy(streamPtr, &seqno, sizeof(uint32_t));
11315 streamPtr += sizeof(uint32_t);
11316 }
11317 uint64_t cgen_var_0;
11318 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
11319 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11320 *streamPtrPtr += 1 * 8;
11321 memcpy(*streamPtrPtr, (uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
11322 *streamPtrPtr += sizeof(uint32_t);
11323 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
11324 reservedmarshal_VkBindImageMemoryInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11325 (VkBindImageMemoryInfo*)(local_pBindInfos + i),
11326 streamPtrPtr);
11327 }
11328 VkResult vkBindImageMemory2_VkResult_return = (VkResult)0;
11329 stream->read(&vkBindImageMemory2_VkResult_return, sizeof(VkResult));
11330 ++encodeCount;
11331 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11332 pool->freeAll();
11333 stream->clearPool();
11334 }
11335 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11336 return vkBindImageMemory2_VkResult_return;
11337 }
11338
vkGetDeviceGroupPeerMemoryFeatures(VkDevice device,uint32_t heapIndex,uint32_t localDeviceIndex,uint32_t remoteDeviceIndex,VkPeerMemoryFeatureFlags * pPeerMemoryFeatures,uint32_t doLock)11339 void VkEncoder::vkGetDeviceGroupPeerMemoryFeatures(VkDevice device, uint32_t heapIndex,
11340 uint32_t localDeviceIndex,
11341 uint32_t remoteDeviceIndex,
11342 VkPeerMemoryFeatureFlags* pPeerMemoryFeatures,
11343 uint32_t doLock) {
11344 (void)doLock;
11345 bool queueSubmitWithCommandsEnabled =
11346 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11347 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11348 auto stream = mImpl->stream();
11349 auto pool = mImpl->pool();
11350 VkDevice local_device;
11351 uint32_t local_heapIndex;
11352 uint32_t local_localDeviceIndex;
11353 uint32_t local_remoteDeviceIndex;
11354 local_device = device;
11355 local_heapIndex = heapIndex;
11356 local_localDeviceIndex = localDeviceIndex;
11357 local_remoteDeviceIndex = remoteDeviceIndex;
11358 size_t count = 0;
11359 size_t* countPtr = &count;
11360 {
11361 uint64_t cgen_var_0;
11362 *countPtr += 1 * 8;
11363 *countPtr += sizeof(uint32_t);
11364 *countPtr += sizeof(uint32_t);
11365 *countPtr += sizeof(uint32_t);
11366 *countPtr += sizeof(VkPeerMemoryFeatureFlags);
11367 }
11368 uint32_t packetSize_vkGetDeviceGroupPeerMemoryFeatures =
11369 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
11370 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceGroupPeerMemoryFeatures);
11371 uint8_t* packetBeginPtr = streamPtr;
11372 uint8_t** streamPtrPtr = &streamPtr;
11373 uint32_t opcode_vkGetDeviceGroupPeerMemoryFeatures = OP_vkGetDeviceGroupPeerMemoryFeatures;
11374 uint32_t seqno;
11375 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
11376 memcpy(streamPtr, &opcode_vkGetDeviceGroupPeerMemoryFeatures, sizeof(uint32_t));
11377 streamPtr += sizeof(uint32_t);
11378 memcpy(streamPtr, &packetSize_vkGetDeviceGroupPeerMemoryFeatures, sizeof(uint32_t));
11379 streamPtr += sizeof(uint32_t);
11380 if (queueSubmitWithCommandsEnabled) {
11381 memcpy(streamPtr, &seqno, sizeof(uint32_t));
11382 streamPtr += sizeof(uint32_t);
11383 }
11384 uint64_t cgen_var_0;
11385 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
11386 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11387 *streamPtrPtr += 1 * 8;
11388 memcpy(*streamPtrPtr, (uint32_t*)&local_heapIndex, sizeof(uint32_t));
11389 *streamPtrPtr += sizeof(uint32_t);
11390 memcpy(*streamPtrPtr, (uint32_t*)&local_localDeviceIndex, sizeof(uint32_t));
11391 *streamPtrPtr += sizeof(uint32_t);
11392 memcpy(*streamPtrPtr, (uint32_t*)&local_remoteDeviceIndex, sizeof(uint32_t));
11393 *streamPtrPtr += sizeof(uint32_t);
11394 memcpy(*streamPtrPtr, (VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures,
11395 sizeof(VkPeerMemoryFeatureFlags));
11396 *streamPtrPtr += sizeof(VkPeerMemoryFeatureFlags);
11397 stream->read((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
11398 ++encodeCount;
11399 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11400 pool->freeAll();
11401 stream->clearPool();
11402 }
11403 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11404 }
11405
vkCmdSetDeviceMask(VkCommandBuffer commandBuffer,uint32_t deviceMask,uint32_t doLock)11406 void VkEncoder::vkCmdSetDeviceMask(VkCommandBuffer commandBuffer, uint32_t deviceMask,
11407 uint32_t doLock) {
11408 (void)doLock;
11409 bool queueSubmitWithCommandsEnabled =
11410 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11411 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11412 auto stream = mImpl->stream();
11413 auto pool = mImpl->pool();
11414 VkCommandBuffer local_commandBuffer;
11415 uint32_t local_deviceMask;
11416 local_commandBuffer = commandBuffer;
11417 local_deviceMask = deviceMask;
11418 size_t count = 0;
11419 size_t* countPtr = &count;
11420 {
11421 uint64_t cgen_var_0;
11422 *countPtr += 1 * 8;
11423 *countPtr += sizeof(uint32_t);
11424 }
11425 uint32_t packetSize_vkCmdSetDeviceMask = 4 + 4 + count;
11426 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDeviceMask -= 8;
11427 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDeviceMask);
11428 uint8_t* packetBeginPtr = streamPtr;
11429 uint8_t** streamPtrPtr = &streamPtr;
11430 uint32_t opcode_vkCmdSetDeviceMask = OP_vkCmdSetDeviceMask;
11431 memcpy(streamPtr, &opcode_vkCmdSetDeviceMask, sizeof(uint32_t));
11432 streamPtr += sizeof(uint32_t);
11433 memcpy(streamPtr, &packetSize_vkCmdSetDeviceMask, sizeof(uint32_t));
11434 streamPtr += sizeof(uint32_t);
11435 if (!queueSubmitWithCommandsEnabled) {
11436 uint64_t cgen_var_0;
11437 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
11438 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11439 *streamPtrPtr += 1 * 8;
11440 }
11441 memcpy(*streamPtrPtr, (uint32_t*)&local_deviceMask, sizeof(uint32_t));
11442 *streamPtrPtr += sizeof(uint32_t);
11443 ++encodeCount;
11444 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11445 pool->freeAll();
11446 stream->clearPool();
11447 }
11448 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11449 }
11450
vkCmdDispatchBase(VkCommandBuffer commandBuffer,uint32_t baseGroupX,uint32_t baseGroupY,uint32_t baseGroupZ,uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ,uint32_t doLock)11451 void VkEncoder::vkCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX,
11452 uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX,
11453 uint32_t groupCountY, uint32_t groupCountZ, uint32_t doLock) {
11454 (void)doLock;
11455 bool queueSubmitWithCommandsEnabled =
11456 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11457 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11458 auto stream = mImpl->stream();
11459 auto pool = mImpl->pool();
11460 VkCommandBuffer local_commandBuffer;
11461 uint32_t local_baseGroupX;
11462 uint32_t local_baseGroupY;
11463 uint32_t local_baseGroupZ;
11464 uint32_t local_groupCountX;
11465 uint32_t local_groupCountY;
11466 uint32_t local_groupCountZ;
11467 local_commandBuffer = commandBuffer;
11468 local_baseGroupX = baseGroupX;
11469 local_baseGroupY = baseGroupY;
11470 local_baseGroupZ = baseGroupZ;
11471 local_groupCountX = groupCountX;
11472 local_groupCountY = groupCountY;
11473 local_groupCountZ = groupCountZ;
11474 size_t count = 0;
11475 size_t* countPtr = &count;
11476 {
11477 uint64_t cgen_var_0;
11478 *countPtr += 1 * 8;
11479 *countPtr += sizeof(uint32_t);
11480 *countPtr += sizeof(uint32_t);
11481 *countPtr += sizeof(uint32_t);
11482 *countPtr += sizeof(uint32_t);
11483 *countPtr += sizeof(uint32_t);
11484 *countPtr += sizeof(uint32_t);
11485 }
11486 uint32_t packetSize_vkCmdDispatchBase = 4 + 4 + count;
11487 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDispatchBase -= 8;
11488 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdDispatchBase);
11489 uint8_t* packetBeginPtr = streamPtr;
11490 uint8_t** streamPtrPtr = &streamPtr;
11491 uint32_t opcode_vkCmdDispatchBase = OP_vkCmdDispatchBase;
11492 memcpy(streamPtr, &opcode_vkCmdDispatchBase, sizeof(uint32_t));
11493 streamPtr += sizeof(uint32_t);
11494 memcpy(streamPtr, &packetSize_vkCmdDispatchBase, sizeof(uint32_t));
11495 streamPtr += sizeof(uint32_t);
11496 if (!queueSubmitWithCommandsEnabled) {
11497 uint64_t cgen_var_0;
11498 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
11499 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11500 *streamPtrPtr += 1 * 8;
11501 }
11502 memcpy(*streamPtrPtr, (uint32_t*)&local_baseGroupX, sizeof(uint32_t));
11503 *streamPtrPtr += sizeof(uint32_t);
11504 memcpy(*streamPtrPtr, (uint32_t*)&local_baseGroupY, sizeof(uint32_t));
11505 *streamPtrPtr += sizeof(uint32_t);
11506 memcpy(*streamPtrPtr, (uint32_t*)&local_baseGroupZ, sizeof(uint32_t));
11507 *streamPtrPtr += sizeof(uint32_t);
11508 memcpy(*streamPtrPtr, (uint32_t*)&local_groupCountX, sizeof(uint32_t));
11509 *streamPtrPtr += sizeof(uint32_t);
11510 memcpy(*streamPtrPtr, (uint32_t*)&local_groupCountY, sizeof(uint32_t));
11511 *streamPtrPtr += sizeof(uint32_t);
11512 memcpy(*streamPtrPtr, (uint32_t*)&local_groupCountZ, sizeof(uint32_t));
11513 *streamPtrPtr += sizeof(uint32_t);
11514 ++encodeCount;
11515 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11516 pool->freeAll();
11517 stream->clearPool();
11518 }
11519 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11520 }
11521
vkEnumeratePhysicalDeviceGroups(VkInstance instance,uint32_t * pPhysicalDeviceGroupCount,VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties,uint32_t doLock)11522 VkResult VkEncoder::vkEnumeratePhysicalDeviceGroups(
11523 VkInstance instance, uint32_t* pPhysicalDeviceGroupCount,
11524 VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties, uint32_t doLock) {
11525 (void)doLock;
11526 bool queueSubmitWithCommandsEnabled =
11527 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11528 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11529 auto stream = mImpl->stream();
11530 auto pool = mImpl->pool();
11531 VkInstance local_instance;
11532 local_instance = instance;
11533 size_t count = 0;
11534 size_t* countPtr = &count;
11535 {
11536 uint64_t cgen_var_0;
11537 *countPtr += 1 * 8;
11538 // WARNING PTR CHECK
11539 *countPtr += 8;
11540 if (pPhysicalDeviceGroupCount) {
11541 *countPtr += sizeof(uint32_t);
11542 }
11543 // WARNING PTR CHECK
11544 *countPtr += 8;
11545 if (pPhysicalDeviceGroupProperties) {
11546 if (pPhysicalDeviceGroupCount) {
11547 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
11548 count_VkPhysicalDeviceGroupProperties(
11549 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
11550 (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i),
11551 countPtr);
11552 }
11553 }
11554 }
11555 }
11556 uint32_t packetSize_vkEnumeratePhysicalDeviceGroups =
11557 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
11558 uint8_t* streamPtr = stream->reserve(packetSize_vkEnumeratePhysicalDeviceGroups);
11559 uint8_t* packetBeginPtr = streamPtr;
11560 uint8_t** streamPtrPtr = &streamPtr;
11561 uint32_t opcode_vkEnumeratePhysicalDeviceGroups = OP_vkEnumeratePhysicalDeviceGroups;
11562 uint32_t seqno;
11563 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
11564 memcpy(streamPtr, &opcode_vkEnumeratePhysicalDeviceGroups, sizeof(uint32_t));
11565 streamPtr += sizeof(uint32_t);
11566 memcpy(streamPtr, &packetSize_vkEnumeratePhysicalDeviceGroups, sizeof(uint32_t));
11567 streamPtr += sizeof(uint32_t);
11568 if (queueSubmitWithCommandsEnabled) {
11569 memcpy(streamPtr, &seqno, sizeof(uint32_t));
11570 streamPtr += sizeof(uint32_t);
11571 }
11572 uint64_t cgen_var_0;
11573 *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
11574 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11575 *streamPtrPtr += 1 * 8;
11576 // WARNING PTR CHECK
11577 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupCount;
11578 memcpy((*streamPtrPtr), &cgen_var_1, 8);
11579 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
11580 *streamPtrPtr += 8;
11581 if (pPhysicalDeviceGroupCount) {
11582 memcpy(*streamPtrPtr, (uint32_t*)pPhysicalDeviceGroupCount, sizeof(uint32_t));
11583 *streamPtrPtr += sizeof(uint32_t);
11584 }
11585 // WARNING PTR CHECK
11586 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupProperties;
11587 memcpy((*streamPtrPtr), &cgen_var_2, 8);
11588 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
11589 *streamPtrPtr += 8;
11590 if (pPhysicalDeviceGroupProperties) {
11591 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
11592 reservedmarshal_VkPhysicalDeviceGroupProperties(
11593 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11594 (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i),
11595 streamPtrPtr);
11596 }
11597 }
11598 // WARNING PTR CHECK
11599 uint32_t* check_pPhysicalDeviceGroupCount;
11600 check_pPhysicalDeviceGroupCount = (uint32_t*)(uintptr_t)stream->getBe64();
11601 if (pPhysicalDeviceGroupCount) {
11602 if (!(check_pPhysicalDeviceGroupCount)) {
11603 fprintf(stderr,
11604 "fatal: pPhysicalDeviceGroupCount inconsistent between guest and host\n");
11605 }
11606 stream->read((uint32_t*)pPhysicalDeviceGroupCount, sizeof(uint32_t));
11607 }
11608 // WARNING PTR CHECK
11609 VkPhysicalDeviceGroupProperties* check_pPhysicalDeviceGroupProperties;
11610 check_pPhysicalDeviceGroupProperties =
11611 (VkPhysicalDeviceGroupProperties*)(uintptr_t)stream->getBe64();
11612 if (pPhysicalDeviceGroupProperties) {
11613 if (!(check_pPhysicalDeviceGroupProperties)) {
11614 fprintf(stderr,
11615 "fatal: pPhysicalDeviceGroupProperties inconsistent between guest and host\n");
11616 }
11617 if (pPhysicalDeviceGroupCount) {
11618 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
11619 unmarshal_VkPhysicalDeviceGroupProperties(
11620 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11621 (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
11622 }
11623 }
11624 }
11625 if (pPhysicalDeviceGroupCount) {
11626 if (pPhysicalDeviceGroupProperties) {
11627 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i) {
11628 transform_fromhost_VkPhysicalDeviceGroupProperties(
11629 sResourceTracker,
11630 (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
11631 }
11632 }
11633 }
11634 VkResult vkEnumeratePhysicalDeviceGroups_VkResult_return = (VkResult)0;
11635 stream->read(&vkEnumeratePhysicalDeviceGroups_VkResult_return, sizeof(VkResult));
11636 ++encodeCount;
11637 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11638 pool->freeAll();
11639 stream->clearPool();
11640 }
11641 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11642 return vkEnumeratePhysicalDeviceGroups_VkResult_return;
11643 }
11644
vkGetImageMemoryRequirements2(VkDevice device,const VkImageMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)11645 void VkEncoder::vkGetImageMemoryRequirements2(VkDevice device,
11646 const VkImageMemoryRequirementsInfo2* pInfo,
11647 VkMemoryRequirements2* pMemoryRequirements,
11648 uint32_t doLock) {
11649 (void)doLock;
11650 bool queueSubmitWithCommandsEnabled =
11651 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11652 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11653 auto stream = mImpl->stream();
11654 auto pool = mImpl->pool();
11655 VkDevice local_device;
11656 VkImageMemoryRequirementsInfo2* local_pInfo;
11657 local_device = device;
11658 local_pInfo = nullptr;
11659 if (pInfo) {
11660 local_pInfo = (VkImageMemoryRequirementsInfo2*)pool->alloc(
11661 sizeof(const VkImageMemoryRequirementsInfo2));
11662 deepcopy_VkImageMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
11663 (VkImageMemoryRequirementsInfo2*)(local_pInfo));
11664 }
11665 if (local_pInfo) {
11666 transform_tohost_VkImageMemoryRequirementsInfo2(
11667 sResourceTracker, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
11668 }
11669 size_t count = 0;
11670 size_t* countPtr = &count;
11671 {
11672 uint64_t cgen_var_0;
11673 *countPtr += 1 * 8;
11674 count_VkImageMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
11675 (VkImageMemoryRequirementsInfo2*)(local_pInfo),
11676 countPtr);
11677 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
11678 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
11679 }
11680 uint32_t packetSize_vkGetImageMemoryRequirements2 =
11681 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
11682 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageMemoryRequirements2);
11683 uint8_t* packetBeginPtr = streamPtr;
11684 uint8_t** streamPtrPtr = &streamPtr;
11685 uint32_t opcode_vkGetImageMemoryRequirements2 = OP_vkGetImageMemoryRequirements2;
11686 uint32_t seqno;
11687 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
11688 memcpy(streamPtr, &opcode_vkGetImageMemoryRequirements2, sizeof(uint32_t));
11689 streamPtr += sizeof(uint32_t);
11690 memcpy(streamPtr, &packetSize_vkGetImageMemoryRequirements2, sizeof(uint32_t));
11691 streamPtr += sizeof(uint32_t);
11692 if (queueSubmitWithCommandsEnabled) {
11693 memcpy(streamPtr, &seqno, sizeof(uint32_t));
11694 streamPtr += sizeof(uint32_t);
11695 }
11696 uint64_t cgen_var_0;
11697 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
11698 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11699 *streamPtrPtr += 1 * 8;
11700 reservedmarshal_VkImageMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11701 (VkImageMemoryRequirementsInfo2*)(local_pInfo),
11702 streamPtrPtr);
11703 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11704 (VkMemoryRequirements2*)(pMemoryRequirements),
11705 streamPtrPtr);
11706 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11707 (VkMemoryRequirements2*)(pMemoryRequirements));
11708 if (pMemoryRequirements) {
11709 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
11710 (VkMemoryRequirements2*)(pMemoryRequirements));
11711 }
11712 ++encodeCount;
11713 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11714 pool->freeAll();
11715 stream->clearPool();
11716 }
11717 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11718 }
11719
vkGetBufferMemoryRequirements2(VkDevice device,const VkBufferMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)11720 void VkEncoder::vkGetBufferMemoryRequirements2(VkDevice device,
11721 const VkBufferMemoryRequirementsInfo2* pInfo,
11722 VkMemoryRequirements2* pMemoryRequirements,
11723 uint32_t doLock) {
11724 (void)doLock;
11725 bool queueSubmitWithCommandsEnabled =
11726 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11727 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11728 auto stream = mImpl->stream();
11729 auto pool = mImpl->pool();
11730 VkDevice local_device;
11731 VkBufferMemoryRequirementsInfo2* local_pInfo;
11732 local_device = device;
11733 local_pInfo = nullptr;
11734 if (pInfo) {
11735 local_pInfo = (VkBufferMemoryRequirementsInfo2*)pool->alloc(
11736 sizeof(const VkBufferMemoryRequirementsInfo2));
11737 deepcopy_VkBufferMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
11738 (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
11739 }
11740 if (local_pInfo) {
11741 transform_tohost_VkBufferMemoryRequirementsInfo2(
11742 sResourceTracker, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
11743 }
11744 size_t count = 0;
11745 size_t* countPtr = &count;
11746 {
11747 uint64_t cgen_var_0;
11748 *countPtr += 1 * 8;
11749 count_VkBufferMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
11750 (VkBufferMemoryRequirementsInfo2*)(local_pInfo),
11751 countPtr);
11752 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
11753 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
11754 }
11755 uint32_t packetSize_vkGetBufferMemoryRequirements2 =
11756 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
11757 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferMemoryRequirements2);
11758 uint8_t* packetBeginPtr = streamPtr;
11759 uint8_t** streamPtrPtr = &streamPtr;
11760 uint32_t opcode_vkGetBufferMemoryRequirements2 = OP_vkGetBufferMemoryRequirements2;
11761 uint32_t seqno;
11762 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
11763 memcpy(streamPtr, &opcode_vkGetBufferMemoryRequirements2, sizeof(uint32_t));
11764 streamPtr += sizeof(uint32_t);
11765 memcpy(streamPtr, &packetSize_vkGetBufferMemoryRequirements2, sizeof(uint32_t));
11766 streamPtr += sizeof(uint32_t);
11767 if (queueSubmitWithCommandsEnabled) {
11768 memcpy(streamPtr, &seqno, sizeof(uint32_t));
11769 streamPtr += sizeof(uint32_t);
11770 }
11771 uint64_t cgen_var_0;
11772 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
11773 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11774 *streamPtrPtr += 1 * 8;
11775 reservedmarshal_VkBufferMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11776 (VkBufferMemoryRequirementsInfo2*)(local_pInfo),
11777 streamPtrPtr);
11778 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11779 (VkMemoryRequirements2*)(pMemoryRequirements),
11780 streamPtrPtr);
11781 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11782 (VkMemoryRequirements2*)(pMemoryRequirements));
11783 if (pMemoryRequirements) {
11784 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
11785 (VkMemoryRequirements2*)(pMemoryRequirements));
11786 }
11787 ++encodeCount;
11788 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11789 pool->freeAll();
11790 stream->clearPool();
11791 }
11792 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11793 }
11794
vkGetImageSparseMemoryRequirements2(VkDevice device,const VkImageSparseMemoryRequirementsInfo2 * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements,uint32_t doLock)11795 void VkEncoder::vkGetImageSparseMemoryRequirements2(
11796 VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo,
11797 uint32_t* pSparseMemoryRequirementCount,
11798 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements, uint32_t doLock) {
11799 (void)doLock;
11800 bool queueSubmitWithCommandsEnabled =
11801 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11802 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11803 auto stream = mImpl->stream();
11804 auto pool = mImpl->pool();
11805 VkDevice local_device;
11806 VkImageSparseMemoryRequirementsInfo2* local_pInfo;
11807 local_device = device;
11808 local_pInfo = nullptr;
11809 if (pInfo) {
11810 local_pInfo = (VkImageSparseMemoryRequirementsInfo2*)pool->alloc(
11811 sizeof(const VkImageSparseMemoryRequirementsInfo2));
11812 deepcopy_VkImageSparseMemoryRequirementsInfo2(
11813 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
11814 (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
11815 }
11816 if (local_pInfo) {
11817 transform_tohost_VkImageSparseMemoryRequirementsInfo2(
11818 sResourceTracker, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
11819 }
11820 size_t count = 0;
11821 size_t* countPtr = &count;
11822 {
11823 uint64_t cgen_var_0;
11824 *countPtr += 1 * 8;
11825 count_VkImageSparseMemoryRequirementsInfo2(
11826 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
11827 (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo), countPtr);
11828 // WARNING PTR CHECK
11829 *countPtr += 8;
11830 if (pSparseMemoryRequirementCount) {
11831 *countPtr += sizeof(uint32_t);
11832 }
11833 // WARNING PTR CHECK
11834 *countPtr += 8;
11835 if (pSparseMemoryRequirements) {
11836 if (pSparseMemoryRequirementCount) {
11837 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
11838 count_VkSparseImageMemoryRequirements2(
11839 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
11840 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i),
11841 countPtr);
11842 }
11843 }
11844 }
11845 }
11846 uint32_t packetSize_vkGetImageSparseMemoryRequirements2 =
11847 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
11848 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageSparseMemoryRequirements2);
11849 uint8_t* packetBeginPtr = streamPtr;
11850 uint8_t** streamPtrPtr = &streamPtr;
11851 uint32_t opcode_vkGetImageSparseMemoryRequirements2 = OP_vkGetImageSparseMemoryRequirements2;
11852 uint32_t seqno;
11853 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
11854 memcpy(streamPtr, &opcode_vkGetImageSparseMemoryRequirements2, sizeof(uint32_t));
11855 streamPtr += sizeof(uint32_t);
11856 memcpy(streamPtr, &packetSize_vkGetImageSparseMemoryRequirements2, sizeof(uint32_t));
11857 streamPtr += sizeof(uint32_t);
11858 if (queueSubmitWithCommandsEnabled) {
11859 memcpy(streamPtr, &seqno, sizeof(uint32_t));
11860 streamPtr += sizeof(uint32_t);
11861 }
11862 uint64_t cgen_var_0;
11863 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
11864 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11865 *streamPtrPtr += 1 * 8;
11866 reservedmarshal_VkImageSparseMemoryRequirementsInfo2(
11867 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo),
11868 streamPtrPtr);
11869 // WARNING PTR CHECK
11870 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
11871 memcpy((*streamPtrPtr), &cgen_var_1, 8);
11872 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
11873 *streamPtrPtr += 8;
11874 if (pSparseMemoryRequirementCount) {
11875 memcpy(*streamPtrPtr, (uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
11876 *streamPtrPtr += sizeof(uint32_t);
11877 }
11878 // WARNING PTR CHECK
11879 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
11880 memcpy((*streamPtrPtr), &cgen_var_2, 8);
11881 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
11882 *streamPtrPtr += 8;
11883 if (pSparseMemoryRequirements) {
11884 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
11885 reservedmarshal_VkSparseImageMemoryRequirements2(
11886 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11887 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), streamPtrPtr);
11888 }
11889 }
11890 // WARNING PTR CHECK
11891 uint32_t* check_pSparseMemoryRequirementCount;
11892 check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
11893 if (pSparseMemoryRequirementCount) {
11894 if (!(check_pSparseMemoryRequirementCount)) {
11895 fprintf(stderr,
11896 "fatal: pSparseMemoryRequirementCount inconsistent between guest and host\n");
11897 }
11898 stream->read((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
11899 }
11900 // WARNING PTR CHECK
11901 VkSparseImageMemoryRequirements2* check_pSparseMemoryRequirements;
11902 check_pSparseMemoryRequirements =
11903 (VkSparseImageMemoryRequirements2*)(uintptr_t)stream->getBe64();
11904 if (pSparseMemoryRequirements) {
11905 if (!(check_pSparseMemoryRequirements)) {
11906 fprintf(stderr,
11907 "fatal: pSparseMemoryRequirements inconsistent between guest and host\n");
11908 }
11909 if (pSparseMemoryRequirementCount) {
11910 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
11911 unmarshal_VkSparseImageMemoryRequirements2(
11912 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11913 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
11914 }
11915 }
11916 }
11917 if (pSparseMemoryRequirementCount) {
11918 if (pSparseMemoryRequirements) {
11919 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
11920 transform_fromhost_VkSparseImageMemoryRequirements2(
11921 sResourceTracker,
11922 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
11923 }
11924 }
11925 }
11926 ++encodeCount;
11927 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11928 pool->freeAll();
11929 stream->clearPool();
11930 }
11931 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11932 }
11933
vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures2 * pFeatures,uint32_t doLock)11934 void VkEncoder::vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
11935 VkPhysicalDeviceFeatures2* pFeatures,
11936 uint32_t doLock) {
11937 (void)doLock;
11938 bool queueSubmitWithCommandsEnabled =
11939 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11940 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11941 auto stream = mImpl->stream();
11942 auto pool = mImpl->pool();
11943 VkPhysicalDevice local_physicalDevice;
11944 local_physicalDevice = physicalDevice;
11945 size_t count = 0;
11946 size_t* countPtr = &count;
11947 {
11948 uint64_t cgen_var_0;
11949 *countPtr += 1 * 8;
11950 count_VkPhysicalDeviceFeatures2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
11951 (VkPhysicalDeviceFeatures2*)(pFeatures), countPtr);
11952 }
11953 uint32_t packetSize_vkGetPhysicalDeviceFeatures2 =
11954 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
11955 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFeatures2);
11956 uint8_t* packetBeginPtr = streamPtr;
11957 uint8_t** streamPtrPtr = &streamPtr;
11958 uint32_t opcode_vkGetPhysicalDeviceFeatures2 = OP_vkGetPhysicalDeviceFeatures2;
11959 uint32_t seqno;
11960 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
11961 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceFeatures2, sizeof(uint32_t));
11962 streamPtr += sizeof(uint32_t);
11963 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceFeatures2, sizeof(uint32_t));
11964 streamPtr += sizeof(uint32_t);
11965 if (queueSubmitWithCommandsEnabled) {
11966 memcpy(streamPtr, &seqno, sizeof(uint32_t));
11967 streamPtr += sizeof(uint32_t);
11968 }
11969 uint64_t cgen_var_0;
11970 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
11971 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
11972 *streamPtrPtr += 1 * 8;
11973 reservedmarshal_VkPhysicalDeviceFeatures2(
11974 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures2*)(pFeatures), streamPtrPtr);
11975 unmarshal_VkPhysicalDeviceFeatures2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
11976 (VkPhysicalDeviceFeatures2*)(pFeatures));
11977 if (pFeatures) {
11978 transform_fromhost_VkPhysicalDeviceFeatures2(sResourceTracker,
11979 (VkPhysicalDeviceFeatures2*)(pFeatures));
11980 }
11981 sResourceTracker->on_vkGetPhysicalDeviceFeatures2(this, physicalDevice, pFeatures);
11982 ++encodeCount;
11983 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
11984 pool->freeAll();
11985 stream->clearPool();
11986 }
11987 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
11988 }
11989
vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties2 * pProperties,uint32_t doLock)11990 void VkEncoder::vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
11991 VkPhysicalDeviceProperties2* pProperties,
11992 uint32_t doLock) {
11993 (void)doLock;
11994 bool queueSubmitWithCommandsEnabled =
11995 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
11996 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
11997 auto stream = mImpl->stream();
11998 auto pool = mImpl->pool();
11999 VkPhysicalDevice local_physicalDevice;
12000 local_physicalDevice = physicalDevice;
12001 size_t count = 0;
12002 size_t* countPtr = &count;
12003 {
12004 uint64_t cgen_var_0;
12005 *countPtr += 1 * 8;
12006 count_VkPhysicalDeviceProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12007 (VkPhysicalDeviceProperties2*)(pProperties), countPtr);
12008 }
12009 uint32_t packetSize_vkGetPhysicalDeviceProperties2 =
12010 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12011 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceProperties2);
12012 uint8_t* packetBeginPtr = streamPtr;
12013 uint8_t** streamPtrPtr = &streamPtr;
12014 uint32_t opcode_vkGetPhysicalDeviceProperties2 = OP_vkGetPhysicalDeviceProperties2;
12015 uint32_t seqno;
12016 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12017 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceProperties2, sizeof(uint32_t));
12018 streamPtr += sizeof(uint32_t);
12019 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceProperties2, sizeof(uint32_t));
12020 streamPtr += sizeof(uint32_t);
12021 if (queueSubmitWithCommandsEnabled) {
12022 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12023 streamPtr += sizeof(uint32_t);
12024 }
12025 uint64_t cgen_var_0;
12026 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
12027 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12028 *streamPtrPtr += 1 * 8;
12029 reservedmarshal_VkPhysicalDeviceProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12030 (VkPhysicalDeviceProperties2*)(pProperties),
12031 streamPtrPtr);
12032 unmarshal_VkPhysicalDeviceProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12033 (VkPhysicalDeviceProperties2*)(pProperties));
12034 if (pProperties) {
12035 transform_fromhost_VkPhysicalDeviceProperties2(sResourceTracker,
12036 (VkPhysicalDeviceProperties2*)(pProperties));
12037 }
12038 sResourceTracker->on_vkGetPhysicalDeviceProperties2(this, physicalDevice, pProperties);
12039 ++encodeCount;
12040 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
12041 pool->freeAll();
12042 stream->clearPool();
12043 }
12044 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
12045 }
12046
vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties2 * pFormatProperties,uint32_t doLock)12047 void VkEncoder::vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,
12048 VkFormat format,
12049 VkFormatProperties2* pFormatProperties,
12050 uint32_t doLock) {
12051 (void)doLock;
12052 bool queueSubmitWithCommandsEnabled =
12053 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
12054 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
12055 auto stream = mImpl->stream();
12056 auto pool = mImpl->pool();
12057 VkPhysicalDevice local_physicalDevice;
12058 VkFormat local_format;
12059 local_physicalDevice = physicalDevice;
12060 local_format = format;
12061 size_t count = 0;
12062 size_t* countPtr = &count;
12063 {
12064 uint64_t cgen_var_0;
12065 *countPtr += 1 * 8;
12066 *countPtr += sizeof(VkFormat);
12067 count_VkFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12068 (VkFormatProperties2*)(pFormatProperties), countPtr);
12069 }
12070 uint32_t packetSize_vkGetPhysicalDeviceFormatProperties2 =
12071 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12072 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFormatProperties2);
12073 uint8_t* packetBeginPtr = streamPtr;
12074 uint8_t** streamPtrPtr = &streamPtr;
12075 uint32_t opcode_vkGetPhysicalDeviceFormatProperties2 = OP_vkGetPhysicalDeviceFormatProperties2;
12076 uint32_t seqno;
12077 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12078 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceFormatProperties2, sizeof(uint32_t));
12079 streamPtr += sizeof(uint32_t);
12080 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceFormatProperties2, sizeof(uint32_t));
12081 streamPtr += sizeof(uint32_t);
12082 if (queueSubmitWithCommandsEnabled) {
12083 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12084 streamPtr += sizeof(uint32_t);
12085 }
12086 uint64_t cgen_var_0;
12087 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
12088 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12089 *streamPtrPtr += 1 * 8;
12090 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
12091 *streamPtrPtr += sizeof(VkFormat);
12092 reservedmarshal_VkFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12093 (VkFormatProperties2*)(pFormatProperties), streamPtrPtr);
12094 unmarshal_VkFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12095 (VkFormatProperties2*)(pFormatProperties));
12096 if (pFormatProperties) {
12097 transform_fromhost_VkFormatProperties2(sResourceTracker,
12098 (VkFormatProperties2*)(pFormatProperties));
12099 }
12100 ++encodeCount;
12101 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
12102 pool->freeAll();
12103 stream->clearPool();
12104 }
12105 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
12106 }
12107
vkGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo,VkImageFormatProperties2 * pImageFormatProperties,uint32_t doLock)12108 VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2(
12109 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
12110 VkImageFormatProperties2* pImageFormatProperties, uint32_t doLock) {
12111 (void)doLock;
12112 bool queueSubmitWithCommandsEnabled =
12113 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
12114 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
12115 auto stream = mImpl->stream();
12116 auto pool = mImpl->pool();
12117 VkPhysicalDevice local_physicalDevice;
12118 VkPhysicalDeviceImageFormatInfo2* local_pImageFormatInfo;
12119 local_physicalDevice = physicalDevice;
12120 local_pImageFormatInfo = nullptr;
12121 if (pImageFormatInfo) {
12122 local_pImageFormatInfo = (VkPhysicalDeviceImageFormatInfo2*)pool->alloc(
12123 sizeof(const VkPhysicalDeviceImageFormatInfo2));
12124 deepcopy_VkPhysicalDeviceImageFormatInfo2(
12125 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageFormatInfo,
12126 (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
12127 }
12128 if (local_pImageFormatInfo) {
12129 transform_tohost_VkPhysicalDeviceImageFormatInfo2(
12130 sResourceTracker, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
12131 }
12132 size_t count = 0;
12133 size_t* countPtr = &count;
12134 {
12135 uint64_t cgen_var_0;
12136 *countPtr += 1 * 8;
12137 count_VkPhysicalDeviceImageFormatInfo2(
12138 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12139 (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), countPtr);
12140 count_VkImageFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12141 (VkImageFormatProperties2*)(pImageFormatProperties),
12142 countPtr);
12143 }
12144 uint32_t packetSize_vkGetPhysicalDeviceImageFormatProperties2 =
12145 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12146 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceImageFormatProperties2);
12147 uint8_t* packetBeginPtr = streamPtr;
12148 uint8_t** streamPtrPtr = &streamPtr;
12149 uint32_t opcode_vkGetPhysicalDeviceImageFormatProperties2 =
12150 OP_vkGetPhysicalDeviceImageFormatProperties2;
12151 uint32_t seqno;
12152 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12153 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceImageFormatProperties2, sizeof(uint32_t));
12154 streamPtr += sizeof(uint32_t);
12155 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceImageFormatProperties2, sizeof(uint32_t));
12156 streamPtr += sizeof(uint32_t);
12157 if (queueSubmitWithCommandsEnabled) {
12158 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12159 streamPtr += sizeof(uint32_t);
12160 }
12161 uint64_t cgen_var_0;
12162 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
12163 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12164 *streamPtrPtr += 1 * 8;
12165 reservedmarshal_VkPhysicalDeviceImageFormatInfo2(
12166 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12167 (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), streamPtrPtr);
12168 reservedmarshal_VkImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12169 (VkImageFormatProperties2*)(pImageFormatProperties),
12170 streamPtrPtr);
12171 unmarshal_VkImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12172 (VkImageFormatProperties2*)(pImageFormatProperties));
12173 if (pImageFormatProperties) {
12174 transform_fromhost_VkImageFormatProperties2(
12175 sResourceTracker, (VkImageFormatProperties2*)(pImageFormatProperties));
12176 }
12177 VkResult vkGetPhysicalDeviceImageFormatProperties2_VkResult_return = (VkResult)0;
12178 stream->read(&vkGetPhysicalDeviceImageFormatProperties2_VkResult_return, sizeof(VkResult));
12179 ++encodeCount;
12180 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
12181 pool->freeAll();
12182 stream->clearPool();
12183 }
12184 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
12185 return vkGetPhysicalDeviceImageFormatProperties2_VkResult_return;
12186 }
12187
vkGetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties2 * pQueueFamilyProperties,uint32_t doLock)12188 void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties2(
12189 VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount,
12190 VkQueueFamilyProperties2* pQueueFamilyProperties, uint32_t doLock) {
12191 (void)doLock;
12192 bool queueSubmitWithCommandsEnabled =
12193 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
12194 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
12195 auto stream = mImpl->stream();
12196 auto pool = mImpl->pool();
12197 VkPhysicalDevice local_physicalDevice;
12198 local_physicalDevice = physicalDevice;
12199 size_t count = 0;
12200 size_t* countPtr = &count;
12201 {
12202 uint64_t cgen_var_0;
12203 *countPtr += 1 * 8;
12204 // WARNING PTR CHECK
12205 *countPtr += 8;
12206 if (pQueueFamilyPropertyCount) {
12207 *countPtr += sizeof(uint32_t);
12208 }
12209 // WARNING PTR CHECK
12210 *countPtr += 8;
12211 if (pQueueFamilyProperties) {
12212 if (pQueueFamilyPropertyCount) {
12213 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
12214 count_VkQueueFamilyProperties2(
12215 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12216 (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), countPtr);
12217 }
12218 }
12219 }
12220 }
12221 uint32_t packetSize_vkGetPhysicalDeviceQueueFamilyProperties2 =
12222 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12223 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceQueueFamilyProperties2);
12224 uint8_t* packetBeginPtr = streamPtr;
12225 uint8_t** streamPtrPtr = &streamPtr;
12226 uint32_t opcode_vkGetPhysicalDeviceQueueFamilyProperties2 =
12227 OP_vkGetPhysicalDeviceQueueFamilyProperties2;
12228 uint32_t seqno;
12229 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12230 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceQueueFamilyProperties2, sizeof(uint32_t));
12231 streamPtr += sizeof(uint32_t);
12232 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceQueueFamilyProperties2, sizeof(uint32_t));
12233 streamPtr += sizeof(uint32_t);
12234 if (queueSubmitWithCommandsEnabled) {
12235 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12236 streamPtr += sizeof(uint32_t);
12237 }
12238 uint64_t cgen_var_0;
12239 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
12240 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12241 *streamPtrPtr += 1 * 8;
12242 // WARNING PTR CHECK
12243 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
12244 memcpy((*streamPtrPtr), &cgen_var_1, 8);
12245 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
12246 *streamPtrPtr += 8;
12247 if (pQueueFamilyPropertyCount) {
12248 memcpy(*streamPtrPtr, (uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
12249 *streamPtrPtr += sizeof(uint32_t);
12250 }
12251 // WARNING PTR CHECK
12252 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
12253 memcpy((*streamPtrPtr), &cgen_var_2, 8);
12254 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
12255 *streamPtrPtr += 8;
12256 if (pQueueFamilyProperties) {
12257 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
12258 reservedmarshal_VkQueueFamilyProperties2(
12259 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12260 (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), streamPtrPtr);
12261 }
12262 }
12263 // WARNING PTR CHECK
12264 uint32_t* check_pQueueFamilyPropertyCount;
12265 check_pQueueFamilyPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
12266 if (pQueueFamilyPropertyCount) {
12267 if (!(check_pQueueFamilyPropertyCount)) {
12268 fprintf(stderr,
12269 "fatal: pQueueFamilyPropertyCount inconsistent between guest and host\n");
12270 }
12271 stream->read((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
12272 }
12273 // WARNING PTR CHECK
12274 VkQueueFamilyProperties2* check_pQueueFamilyProperties;
12275 check_pQueueFamilyProperties = (VkQueueFamilyProperties2*)(uintptr_t)stream->getBe64();
12276 if (pQueueFamilyProperties) {
12277 if (!(check_pQueueFamilyProperties)) {
12278 fprintf(stderr, "fatal: pQueueFamilyProperties inconsistent between guest and host\n");
12279 }
12280 if (pQueueFamilyPropertyCount) {
12281 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
12282 unmarshal_VkQueueFamilyProperties2(
12283 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12284 (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
12285 }
12286 }
12287 }
12288 if (pQueueFamilyPropertyCount) {
12289 if (pQueueFamilyProperties) {
12290 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
12291 transform_fromhost_VkQueueFamilyProperties2(
12292 sResourceTracker, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
12293 }
12294 }
12295 }
12296 ++encodeCount;
12297 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
12298 pool->freeAll();
12299 stream->clearPool();
12300 }
12301 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
12302 }
12303
vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties2 * pMemoryProperties,uint32_t doLock)12304 void VkEncoder::vkGetPhysicalDeviceMemoryProperties2(
12305 VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties,
12306 uint32_t doLock) {
12307 (void)doLock;
12308 bool queueSubmitWithCommandsEnabled =
12309 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
12310 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
12311 auto stream = mImpl->stream();
12312 auto pool = mImpl->pool();
12313 VkPhysicalDevice local_physicalDevice;
12314 local_physicalDevice = physicalDevice;
12315 size_t count = 0;
12316 size_t* countPtr = &count;
12317 {
12318 uint64_t cgen_var_0;
12319 *countPtr += 1 * 8;
12320 count_VkPhysicalDeviceMemoryProperties2(
12321 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12322 (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), countPtr);
12323 }
12324 uint32_t packetSize_vkGetPhysicalDeviceMemoryProperties2 =
12325 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12326 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceMemoryProperties2);
12327 uint8_t* packetBeginPtr = streamPtr;
12328 uint8_t** streamPtrPtr = &streamPtr;
12329 uint32_t opcode_vkGetPhysicalDeviceMemoryProperties2 = OP_vkGetPhysicalDeviceMemoryProperties2;
12330 uint32_t seqno;
12331 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12332 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceMemoryProperties2, sizeof(uint32_t));
12333 streamPtr += sizeof(uint32_t);
12334 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceMemoryProperties2, sizeof(uint32_t));
12335 streamPtr += sizeof(uint32_t);
12336 if (queueSubmitWithCommandsEnabled) {
12337 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12338 streamPtr += sizeof(uint32_t);
12339 }
12340 uint64_t cgen_var_0;
12341 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
12342 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12343 *streamPtrPtr += 1 * 8;
12344 reservedmarshal_VkPhysicalDeviceMemoryProperties2(
12345 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties),
12346 streamPtrPtr);
12347 unmarshal_VkPhysicalDeviceMemoryProperties2(
12348 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12349 (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
12350 if (pMemoryProperties) {
12351 transform_fromhost_VkPhysicalDeviceMemoryProperties2(
12352 sResourceTracker, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
12353 }
12354 ++encodeCount;
12355 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
12356 pool->freeAll();
12357 stream->clearPool();
12358 }
12359 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
12360 }
12361
vkGetPhysicalDeviceSparseImageFormatProperties2(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo,uint32_t * pPropertyCount,VkSparseImageFormatProperties2 * pProperties,uint32_t doLock)12362 void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2(
12363 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
12364 uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties, uint32_t doLock) {
12365 (void)doLock;
12366 bool queueSubmitWithCommandsEnabled =
12367 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
12368 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
12369 auto stream = mImpl->stream();
12370 auto pool = mImpl->pool();
12371 VkPhysicalDevice local_physicalDevice;
12372 VkPhysicalDeviceSparseImageFormatInfo2* local_pFormatInfo;
12373 local_physicalDevice = physicalDevice;
12374 local_pFormatInfo = nullptr;
12375 if (pFormatInfo) {
12376 local_pFormatInfo = (VkPhysicalDeviceSparseImageFormatInfo2*)pool->alloc(
12377 sizeof(const VkPhysicalDeviceSparseImageFormatInfo2));
12378 deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(
12379 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pFormatInfo,
12380 (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
12381 }
12382 if (local_pFormatInfo) {
12383 transform_tohost_VkPhysicalDeviceSparseImageFormatInfo2(
12384 sResourceTracker, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
12385 }
12386 size_t count = 0;
12387 size_t* countPtr = &count;
12388 {
12389 uint64_t cgen_var_0;
12390 *countPtr += 1 * 8;
12391 count_VkPhysicalDeviceSparseImageFormatInfo2(
12392 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12393 (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), countPtr);
12394 // WARNING PTR CHECK
12395 *countPtr += 8;
12396 if (pPropertyCount) {
12397 *countPtr += sizeof(uint32_t);
12398 }
12399 // WARNING PTR CHECK
12400 *countPtr += 8;
12401 if (pProperties) {
12402 if (pPropertyCount) {
12403 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
12404 count_VkSparseImageFormatProperties2(
12405 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12406 (VkSparseImageFormatProperties2*)(pProperties + i), countPtr);
12407 }
12408 }
12409 }
12410 }
12411 uint32_t packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2 =
12412 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12413 uint8_t* streamPtr =
12414 stream->reserve(packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2);
12415 uint8_t* packetBeginPtr = streamPtr;
12416 uint8_t** streamPtrPtr = &streamPtr;
12417 uint32_t opcode_vkGetPhysicalDeviceSparseImageFormatProperties2 =
12418 OP_vkGetPhysicalDeviceSparseImageFormatProperties2;
12419 uint32_t seqno;
12420 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12421 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceSparseImageFormatProperties2, sizeof(uint32_t));
12422 streamPtr += sizeof(uint32_t);
12423 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2,
12424 sizeof(uint32_t));
12425 streamPtr += sizeof(uint32_t);
12426 if (queueSubmitWithCommandsEnabled) {
12427 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12428 streamPtr += sizeof(uint32_t);
12429 }
12430 uint64_t cgen_var_0;
12431 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
12432 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12433 *streamPtrPtr += 1 * 8;
12434 reservedmarshal_VkPhysicalDeviceSparseImageFormatInfo2(
12435 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12436 (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), streamPtrPtr);
12437 // WARNING PTR CHECK
12438 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pPropertyCount;
12439 memcpy((*streamPtrPtr), &cgen_var_1, 8);
12440 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
12441 *streamPtrPtr += 8;
12442 if (pPropertyCount) {
12443 memcpy(*streamPtrPtr, (uint32_t*)pPropertyCount, sizeof(uint32_t));
12444 *streamPtrPtr += sizeof(uint32_t);
12445 }
12446 // WARNING PTR CHECK
12447 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pProperties;
12448 memcpy((*streamPtrPtr), &cgen_var_2, 8);
12449 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
12450 *streamPtrPtr += 8;
12451 if (pProperties) {
12452 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
12453 reservedmarshal_VkSparseImageFormatProperties2(
12454 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12455 (VkSparseImageFormatProperties2*)(pProperties + i), streamPtrPtr);
12456 }
12457 }
12458 // WARNING PTR CHECK
12459 uint32_t* check_pPropertyCount;
12460 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
12461 if (pPropertyCount) {
12462 if (!(check_pPropertyCount)) {
12463 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
12464 }
12465 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
12466 }
12467 // WARNING PTR CHECK
12468 VkSparseImageFormatProperties2* check_pProperties;
12469 check_pProperties = (VkSparseImageFormatProperties2*)(uintptr_t)stream->getBe64();
12470 if (pProperties) {
12471 if (!(check_pProperties)) {
12472 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
12473 }
12474 if (pPropertyCount) {
12475 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
12476 unmarshal_VkSparseImageFormatProperties2(
12477 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12478 (VkSparseImageFormatProperties2*)(pProperties + i));
12479 }
12480 }
12481 }
12482 if (pPropertyCount) {
12483 if (pProperties) {
12484 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
12485 transform_fromhost_VkSparseImageFormatProperties2(
12486 sResourceTracker, (VkSparseImageFormatProperties2*)(pProperties + i));
12487 }
12488 }
12489 }
12490 ++encodeCount;
12491 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
12492 pool->freeAll();
12493 stream->clearPool();
12494 }
12495 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
12496 }
12497
vkTrimCommandPool(VkDevice device,VkCommandPool commandPool,VkCommandPoolTrimFlags flags,uint32_t doLock)12498 void VkEncoder::vkTrimCommandPool(VkDevice device, VkCommandPool commandPool,
12499 VkCommandPoolTrimFlags flags, uint32_t doLock) {
12500 (void)doLock;
12501 bool queueSubmitWithCommandsEnabled =
12502 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
12503 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
12504 auto stream = mImpl->stream();
12505 auto pool = mImpl->pool();
12506 VkDevice local_device;
12507 VkCommandPool local_commandPool;
12508 VkCommandPoolTrimFlags local_flags;
12509 local_device = device;
12510 local_commandPool = commandPool;
12511 local_flags = flags;
12512 size_t count = 0;
12513 size_t* countPtr = &count;
12514 {
12515 uint64_t cgen_var_0;
12516 *countPtr += 1 * 8;
12517 uint64_t cgen_var_1;
12518 *countPtr += 1 * 8;
12519 *countPtr += sizeof(VkCommandPoolTrimFlags);
12520 }
12521 uint32_t packetSize_vkTrimCommandPool =
12522 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12523 uint8_t* streamPtr = stream->reserve(packetSize_vkTrimCommandPool);
12524 uint8_t* packetBeginPtr = streamPtr;
12525 uint8_t** streamPtrPtr = &streamPtr;
12526 uint32_t opcode_vkTrimCommandPool = OP_vkTrimCommandPool;
12527 uint32_t seqno;
12528 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12529 memcpy(streamPtr, &opcode_vkTrimCommandPool, sizeof(uint32_t));
12530 streamPtr += sizeof(uint32_t);
12531 memcpy(streamPtr, &packetSize_vkTrimCommandPool, sizeof(uint32_t));
12532 streamPtr += sizeof(uint32_t);
12533 if (queueSubmitWithCommandsEnabled) {
12534 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12535 streamPtr += sizeof(uint32_t);
12536 }
12537 uint64_t cgen_var_0;
12538 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
12539 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12540 *streamPtrPtr += 1 * 8;
12541 uint64_t cgen_var_1;
12542 *&cgen_var_1 = get_host_u64_VkCommandPool((*&local_commandPool));
12543 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
12544 *streamPtrPtr += 1 * 8;
12545 memcpy(*streamPtrPtr, (VkCommandPoolTrimFlags*)&local_flags, sizeof(VkCommandPoolTrimFlags));
12546 *streamPtrPtr += sizeof(VkCommandPoolTrimFlags);
12547 stream->flush();
12548 ++encodeCount;
12549 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
12550 pool->freeAll();
12551 stream->clearPool();
12552 }
12553 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
12554 }
12555
vkGetDeviceQueue2(VkDevice device,const VkDeviceQueueInfo2 * pQueueInfo,VkQueue * pQueue,uint32_t doLock)12556 void VkEncoder::vkGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo,
12557 VkQueue* pQueue, uint32_t doLock) {
12558 (void)doLock;
12559 bool queueSubmitWithCommandsEnabled =
12560 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
12561 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
12562 auto stream = mImpl->stream();
12563 auto pool = mImpl->pool();
12564 VkDevice local_device;
12565 VkDeviceQueueInfo2* local_pQueueInfo;
12566 local_device = device;
12567 local_pQueueInfo = nullptr;
12568 if (pQueueInfo) {
12569 local_pQueueInfo = (VkDeviceQueueInfo2*)pool->alloc(sizeof(const VkDeviceQueueInfo2));
12570 deepcopy_VkDeviceQueueInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pQueueInfo,
12571 (VkDeviceQueueInfo2*)(local_pQueueInfo));
12572 }
12573 if (local_pQueueInfo) {
12574 transform_tohost_VkDeviceQueueInfo2(sResourceTracker,
12575 (VkDeviceQueueInfo2*)(local_pQueueInfo));
12576 }
12577 size_t count = 0;
12578 size_t* countPtr = &count;
12579 {
12580 uint64_t cgen_var_0;
12581 *countPtr += 1 * 8;
12582 count_VkDeviceQueueInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12583 (VkDeviceQueueInfo2*)(local_pQueueInfo), countPtr);
12584 uint64_t cgen_var_1;
12585 *countPtr += 8;
12586 }
12587 uint32_t packetSize_vkGetDeviceQueue2 =
12588 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12589 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceQueue2);
12590 uint8_t* packetBeginPtr = streamPtr;
12591 uint8_t** streamPtrPtr = &streamPtr;
12592 uint32_t opcode_vkGetDeviceQueue2 = OP_vkGetDeviceQueue2;
12593 uint32_t seqno;
12594 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12595 memcpy(streamPtr, &opcode_vkGetDeviceQueue2, sizeof(uint32_t));
12596 streamPtr += sizeof(uint32_t);
12597 memcpy(streamPtr, &packetSize_vkGetDeviceQueue2, sizeof(uint32_t));
12598 streamPtr += sizeof(uint32_t);
12599 if (queueSubmitWithCommandsEnabled) {
12600 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12601 streamPtr += sizeof(uint32_t);
12602 }
12603 uint64_t cgen_var_0;
12604 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
12605 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12606 *streamPtrPtr += 1 * 8;
12607 reservedmarshal_VkDeviceQueueInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12608 (VkDeviceQueueInfo2*)(local_pQueueInfo), streamPtrPtr);
12609 /* is handle, possibly out */;
12610 uint64_t cgen_var_1;
12611 *&cgen_var_1 = (uint64_t)((*pQueue));
12612 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 8);
12613 *streamPtrPtr += 8;
12614 /* is handle, possibly out */;
12615 stream->setHandleMapping(sResourceTracker->createMapping());
12616 uint64_t cgen_var_2;
12617 stream->read((uint64_t*)&cgen_var_2, 8);
12618 stream->handleMapping()->mapHandles_u64_VkQueue(&cgen_var_2, (VkQueue*)pQueue, 1);
12619 stream->unsetHandleMapping();
12620 sResourceTracker->on_vkGetDeviceQueue2(this, device, pQueueInfo, pQueue);
12621 ++encodeCount;
12622 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
12623 pool->freeAll();
12624 stream->clearPool();
12625 }
12626 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
12627 }
12628
vkCreateSamplerYcbcrConversion(VkDevice device,const VkSamplerYcbcrConversionCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSamplerYcbcrConversion * pYcbcrConversion,uint32_t doLock)12629 VkResult VkEncoder::vkCreateSamplerYcbcrConversion(
12630 VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
12631 const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion,
12632 uint32_t doLock) {
12633 (void)doLock;
12634 bool queueSubmitWithCommandsEnabled =
12635 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
12636 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
12637 auto stream = mImpl->stream();
12638 auto pool = mImpl->pool();
12639 VkDevice local_device;
12640 VkSamplerYcbcrConversionCreateInfo* local_pCreateInfo;
12641 VkAllocationCallbacks* local_pAllocator;
12642 local_device = device;
12643 local_pCreateInfo = nullptr;
12644 if (pCreateInfo) {
12645 local_pCreateInfo = (VkSamplerYcbcrConversionCreateInfo*)pool->alloc(
12646 sizeof(const VkSamplerYcbcrConversionCreateInfo));
12647 deepcopy_VkSamplerYcbcrConversionCreateInfo(
12648 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
12649 (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
12650 }
12651 local_pAllocator = nullptr;
12652 if (pAllocator) {
12653 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
12654 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
12655 (VkAllocationCallbacks*)(local_pAllocator));
12656 }
12657 local_pAllocator = nullptr;
12658 if (local_pCreateInfo) {
12659 transform_tohost_VkSamplerYcbcrConversionCreateInfo(
12660 sResourceTracker, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
12661 }
12662 if (local_pAllocator) {
12663 transform_tohost_VkAllocationCallbacks(sResourceTracker,
12664 (VkAllocationCallbacks*)(local_pAllocator));
12665 }
12666 size_t count = 0;
12667 size_t* countPtr = &count;
12668 {
12669 uint64_t cgen_var_0;
12670 *countPtr += 1 * 8;
12671 count_VkSamplerYcbcrConversionCreateInfo(
12672 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12673 (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), countPtr);
12674 // WARNING PTR CHECK
12675 *countPtr += 8;
12676 if (local_pAllocator) {
12677 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12678 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
12679 }
12680 uint64_t cgen_var_1;
12681 *countPtr += 8;
12682 }
12683 uint32_t packetSize_vkCreateSamplerYcbcrConversion =
12684 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12685 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateSamplerYcbcrConversion);
12686 uint8_t* packetBeginPtr = streamPtr;
12687 uint8_t** streamPtrPtr = &streamPtr;
12688 uint32_t opcode_vkCreateSamplerYcbcrConversion = OP_vkCreateSamplerYcbcrConversion;
12689 uint32_t seqno;
12690 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12691 memcpy(streamPtr, &opcode_vkCreateSamplerYcbcrConversion, sizeof(uint32_t));
12692 streamPtr += sizeof(uint32_t);
12693 memcpy(streamPtr, &packetSize_vkCreateSamplerYcbcrConversion, sizeof(uint32_t));
12694 streamPtr += sizeof(uint32_t);
12695 if (queueSubmitWithCommandsEnabled) {
12696 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12697 streamPtr += sizeof(uint32_t);
12698 }
12699 uint64_t cgen_var_0;
12700 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
12701 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12702 *streamPtrPtr += 1 * 8;
12703 reservedmarshal_VkSamplerYcbcrConversionCreateInfo(
12704 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12705 (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), streamPtrPtr);
12706 // WARNING PTR CHECK
12707 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
12708 memcpy((*streamPtrPtr), &cgen_var_1, 8);
12709 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
12710 *streamPtrPtr += 8;
12711 if (local_pAllocator) {
12712 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12713 (VkAllocationCallbacks*)(local_pAllocator),
12714 streamPtrPtr);
12715 }
12716 /* is handle, possibly out */;
12717 uint64_t cgen_var_2;
12718 *&cgen_var_2 = (uint64_t)((*pYcbcrConversion));
12719 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
12720 *streamPtrPtr += 8;
12721 /* is handle, possibly out */;
12722 stream->setHandleMapping(sResourceTracker->createMapping());
12723 uint64_t cgen_var_3;
12724 stream->read((uint64_t*)&cgen_var_3, 8);
12725 stream->handleMapping()->mapHandles_u64_VkSamplerYcbcrConversion(
12726 &cgen_var_3, (VkSamplerYcbcrConversion*)pYcbcrConversion, 1);
12727 stream->unsetHandleMapping();
12728 VkResult vkCreateSamplerYcbcrConversion_VkResult_return = (VkResult)0;
12729 stream->read(&vkCreateSamplerYcbcrConversion_VkResult_return, sizeof(VkResult));
12730 ++encodeCount;
12731 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
12732 pool->freeAll();
12733 stream->clearPool();
12734 }
12735 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
12736 return vkCreateSamplerYcbcrConversion_VkResult_return;
12737 }
12738
vkDestroySamplerYcbcrConversion(VkDevice device,VkSamplerYcbcrConversion ycbcrConversion,const VkAllocationCallbacks * pAllocator,uint32_t doLock)12739 void VkEncoder::vkDestroySamplerYcbcrConversion(VkDevice device,
12740 VkSamplerYcbcrConversion ycbcrConversion,
12741 const VkAllocationCallbacks* pAllocator,
12742 uint32_t doLock) {
12743 (void)doLock;
12744 bool queueSubmitWithCommandsEnabled =
12745 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
12746 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
12747 auto stream = mImpl->stream();
12748 auto pool = mImpl->pool();
12749 VkDevice local_device;
12750 VkSamplerYcbcrConversion local_ycbcrConversion;
12751 VkAllocationCallbacks* local_pAllocator;
12752 local_device = device;
12753 local_ycbcrConversion = ycbcrConversion;
12754 local_pAllocator = nullptr;
12755 if (pAllocator) {
12756 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
12757 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
12758 (VkAllocationCallbacks*)(local_pAllocator));
12759 }
12760 local_pAllocator = nullptr;
12761 if (local_pAllocator) {
12762 transform_tohost_VkAllocationCallbacks(sResourceTracker,
12763 (VkAllocationCallbacks*)(local_pAllocator));
12764 }
12765 size_t count = 0;
12766 size_t* countPtr = &count;
12767 {
12768 uint64_t cgen_var_0;
12769 *countPtr += 1 * 8;
12770 uint64_t cgen_var_1;
12771 *countPtr += 1 * 8;
12772 // WARNING PTR CHECK
12773 *countPtr += 8;
12774 if (local_pAllocator) {
12775 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12776 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
12777 }
12778 }
12779 uint32_t packetSize_vkDestroySamplerYcbcrConversion =
12780 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12781 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroySamplerYcbcrConversion);
12782 uint8_t* packetBeginPtr = streamPtr;
12783 uint8_t** streamPtrPtr = &streamPtr;
12784 uint32_t opcode_vkDestroySamplerYcbcrConversion = OP_vkDestroySamplerYcbcrConversion;
12785 uint32_t seqno;
12786 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12787 memcpy(streamPtr, &opcode_vkDestroySamplerYcbcrConversion, sizeof(uint32_t));
12788 streamPtr += sizeof(uint32_t);
12789 memcpy(streamPtr, &packetSize_vkDestroySamplerYcbcrConversion, sizeof(uint32_t));
12790 streamPtr += sizeof(uint32_t);
12791 if (queueSubmitWithCommandsEnabled) {
12792 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12793 streamPtr += sizeof(uint32_t);
12794 }
12795 uint64_t cgen_var_0;
12796 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
12797 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12798 *streamPtrPtr += 1 * 8;
12799 uint64_t cgen_var_1;
12800 *&cgen_var_1 = get_host_u64_VkSamplerYcbcrConversion((*&local_ycbcrConversion));
12801 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
12802 *streamPtrPtr += 1 * 8;
12803 // WARNING PTR CHECK
12804 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
12805 memcpy((*streamPtrPtr), &cgen_var_2, 8);
12806 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
12807 *streamPtrPtr += 8;
12808 if (local_pAllocator) {
12809 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12810 (VkAllocationCallbacks*)(local_pAllocator),
12811 streamPtrPtr);
12812 }
12813 sResourceTracker->destroyMapping()->mapHandles_VkSamplerYcbcrConversion(
12814 (VkSamplerYcbcrConversion*)&ycbcrConversion);
12815 stream->flush();
12816 ++encodeCount;
12817 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
12818 pool->freeAll();
12819 stream->clearPool();
12820 }
12821 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
12822 }
12823
vkCreateDescriptorUpdateTemplate(VkDevice device,const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate,uint32_t doLock)12824 VkResult VkEncoder::vkCreateDescriptorUpdateTemplate(
12825 VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
12826 const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate,
12827 uint32_t doLock) {
12828 (void)doLock;
12829 bool queueSubmitWithCommandsEnabled =
12830 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
12831 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
12832 auto stream = mImpl->stream();
12833 auto pool = mImpl->pool();
12834 VkDevice local_device;
12835 VkDescriptorUpdateTemplateCreateInfo* local_pCreateInfo;
12836 VkAllocationCallbacks* local_pAllocator;
12837 local_device = device;
12838 local_pCreateInfo = nullptr;
12839 if (pCreateInfo) {
12840 local_pCreateInfo = (VkDescriptorUpdateTemplateCreateInfo*)pool->alloc(
12841 sizeof(const VkDescriptorUpdateTemplateCreateInfo));
12842 deepcopy_VkDescriptorUpdateTemplateCreateInfo(
12843 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
12844 (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
12845 }
12846 local_pAllocator = nullptr;
12847 if (pAllocator) {
12848 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
12849 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
12850 (VkAllocationCallbacks*)(local_pAllocator));
12851 }
12852 local_pAllocator = nullptr;
12853 if (local_pCreateInfo) {
12854 transform_tohost_VkDescriptorUpdateTemplateCreateInfo(
12855 sResourceTracker, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
12856 }
12857 if (local_pAllocator) {
12858 transform_tohost_VkAllocationCallbacks(sResourceTracker,
12859 (VkAllocationCallbacks*)(local_pAllocator));
12860 }
12861 size_t count = 0;
12862 size_t* countPtr = &count;
12863 {
12864 uint64_t cgen_var_0;
12865 *countPtr += 1 * 8;
12866 count_VkDescriptorUpdateTemplateCreateInfo(
12867 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12868 (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), countPtr);
12869 // WARNING PTR CHECK
12870 *countPtr += 8;
12871 if (local_pAllocator) {
12872 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12873 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
12874 }
12875 uint64_t cgen_var_1;
12876 *countPtr += 8;
12877 }
12878 uint32_t packetSize_vkCreateDescriptorUpdateTemplate =
12879 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12880 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateDescriptorUpdateTemplate);
12881 uint8_t* packetBeginPtr = streamPtr;
12882 uint8_t** streamPtrPtr = &streamPtr;
12883 uint32_t opcode_vkCreateDescriptorUpdateTemplate = OP_vkCreateDescriptorUpdateTemplate;
12884 uint32_t seqno;
12885 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12886 memcpy(streamPtr, &opcode_vkCreateDescriptorUpdateTemplate, sizeof(uint32_t));
12887 streamPtr += sizeof(uint32_t);
12888 memcpy(streamPtr, &packetSize_vkCreateDescriptorUpdateTemplate, sizeof(uint32_t));
12889 streamPtr += sizeof(uint32_t);
12890 if (queueSubmitWithCommandsEnabled) {
12891 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12892 streamPtr += sizeof(uint32_t);
12893 }
12894 uint64_t cgen_var_0;
12895 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
12896 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12897 *streamPtrPtr += 1 * 8;
12898 reservedmarshal_VkDescriptorUpdateTemplateCreateInfo(
12899 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12900 (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), streamPtrPtr);
12901 // WARNING PTR CHECK
12902 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
12903 memcpy((*streamPtrPtr), &cgen_var_1, 8);
12904 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
12905 *streamPtrPtr += 8;
12906 if (local_pAllocator) {
12907 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
12908 (VkAllocationCallbacks*)(local_pAllocator),
12909 streamPtrPtr);
12910 }
12911 /* is handle, possibly out */;
12912 uint64_t cgen_var_2;
12913 *&cgen_var_2 = (uint64_t)((*pDescriptorUpdateTemplate));
12914 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
12915 *streamPtrPtr += 8;
12916 /* is handle, possibly out */;
12917 stream->setHandleMapping(sResourceTracker->createMapping());
12918 uint64_t cgen_var_3;
12919 stream->read((uint64_t*)&cgen_var_3, 8);
12920 stream->handleMapping()->mapHandles_u64_VkDescriptorUpdateTemplate(
12921 &cgen_var_3, (VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate, 1);
12922 stream->unsetHandleMapping();
12923 VkResult vkCreateDescriptorUpdateTemplate_VkResult_return = (VkResult)0;
12924 stream->read(&vkCreateDescriptorUpdateTemplate_VkResult_return, sizeof(VkResult));
12925 sResourceTracker->on_vkCreateDescriptorUpdateTemplate(
12926 this, vkCreateDescriptorUpdateTemplate_VkResult_return, device, pCreateInfo, pAllocator,
12927 pDescriptorUpdateTemplate);
12928 ++encodeCount;
12929 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
12930 pool->freeAll();
12931 stream->clearPool();
12932 }
12933 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
12934 return vkCreateDescriptorUpdateTemplate_VkResult_return;
12935 }
12936
vkDestroyDescriptorUpdateTemplate(VkDevice device,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const VkAllocationCallbacks * pAllocator,uint32_t doLock)12937 void VkEncoder::vkDestroyDescriptorUpdateTemplate(
12938 VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate,
12939 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
12940 (void)doLock;
12941 bool queueSubmitWithCommandsEnabled =
12942 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
12943 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
12944 auto stream = mImpl->stream();
12945 auto pool = mImpl->pool();
12946 VkDevice local_device;
12947 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
12948 VkAllocationCallbacks* local_pAllocator;
12949 local_device = device;
12950 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
12951 local_pAllocator = nullptr;
12952 if (pAllocator) {
12953 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
12954 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
12955 (VkAllocationCallbacks*)(local_pAllocator));
12956 }
12957 local_pAllocator = nullptr;
12958 if (local_pAllocator) {
12959 transform_tohost_VkAllocationCallbacks(sResourceTracker,
12960 (VkAllocationCallbacks*)(local_pAllocator));
12961 }
12962 size_t count = 0;
12963 size_t* countPtr = &count;
12964 {
12965 uint64_t cgen_var_0;
12966 *countPtr += 1 * 8;
12967 uint64_t cgen_var_1;
12968 *countPtr += 1 * 8;
12969 // WARNING PTR CHECK
12970 *countPtr += 8;
12971 if (local_pAllocator) {
12972 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
12973 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
12974 }
12975 }
12976 uint32_t packetSize_vkDestroyDescriptorUpdateTemplate =
12977 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
12978 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyDescriptorUpdateTemplate);
12979 uint8_t* packetBeginPtr = streamPtr;
12980 uint8_t** streamPtrPtr = &streamPtr;
12981 uint32_t opcode_vkDestroyDescriptorUpdateTemplate = OP_vkDestroyDescriptorUpdateTemplate;
12982 uint32_t seqno;
12983 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
12984 memcpy(streamPtr, &opcode_vkDestroyDescriptorUpdateTemplate, sizeof(uint32_t));
12985 streamPtr += sizeof(uint32_t);
12986 memcpy(streamPtr, &packetSize_vkDestroyDescriptorUpdateTemplate, sizeof(uint32_t));
12987 streamPtr += sizeof(uint32_t);
12988 if (queueSubmitWithCommandsEnabled) {
12989 memcpy(streamPtr, &seqno, sizeof(uint32_t));
12990 streamPtr += sizeof(uint32_t);
12991 }
12992 uint64_t cgen_var_0;
12993 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
12994 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
12995 *streamPtrPtr += 1 * 8;
12996 uint64_t cgen_var_1;
12997 *&cgen_var_1 = get_host_u64_VkDescriptorUpdateTemplate((*&local_descriptorUpdateTemplate));
12998 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
12999 *streamPtrPtr += 1 * 8;
13000 // WARNING PTR CHECK
13001 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
13002 memcpy((*streamPtrPtr), &cgen_var_2, 8);
13003 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
13004 *streamPtrPtr += 8;
13005 if (local_pAllocator) {
13006 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13007 (VkAllocationCallbacks*)(local_pAllocator),
13008 streamPtrPtr);
13009 }
13010 sResourceTracker->destroyMapping()->mapHandles_VkDescriptorUpdateTemplate(
13011 (VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate);
13012 stream->flush();
13013 ++encodeCount;
13014 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13015 pool->freeAll();
13016 stream->clearPool();
13017 }
13018 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13019 }
13020
vkUpdateDescriptorSetWithTemplate(VkDevice device,VkDescriptorSet descriptorSet,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const void * pData,uint32_t doLock)13021 void VkEncoder::vkUpdateDescriptorSetWithTemplate(
13022 VkDevice device, VkDescriptorSet descriptorSet,
13023 VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData, uint32_t doLock) {
13024 (void)doLock;
13025 bool queueSubmitWithCommandsEnabled =
13026 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13027 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13028 auto stream = mImpl->stream();
13029 auto pool = mImpl->pool();
13030 VkDevice local_device;
13031 VkDescriptorSet local_descriptorSet;
13032 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
13033 void* local_pData;
13034 local_device = device;
13035 local_descriptorSet = descriptorSet;
13036 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
13037 // Avoiding deepcopy for pData
13038 local_pData = (void*)pData;
13039 size_t count = 0;
13040 size_t* countPtr = &count;
13041 {
13042 uint64_t cgen_var_0;
13043 *countPtr += 1 * 8;
13044 uint64_t cgen_var_1;
13045 *countPtr += 1 * 8;
13046 uint64_t cgen_var_2;
13047 *countPtr += 1 * 8;
13048 // WARNING PTR CHECK
13049 *countPtr += 8;
13050 if (local_pData) {
13051 *countPtr += sizeof(uint8_t);
13052 }
13053 }
13054 uint32_t packetSize_vkUpdateDescriptorSetWithTemplate =
13055 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
13056 uint8_t* streamPtr = stream->reserve(packetSize_vkUpdateDescriptorSetWithTemplate);
13057 uint8_t* packetBeginPtr = streamPtr;
13058 uint8_t** streamPtrPtr = &streamPtr;
13059 uint32_t opcode_vkUpdateDescriptorSetWithTemplate = OP_vkUpdateDescriptorSetWithTemplate;
13060 uint32_t seqno;
13061 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
13062 memcpy(streamPtr, &opcode_vkUpdateDescriptorSetWithTemplate, sizeof(uint32_t));
13063 streamPtr += sizeof(uint32_t);
13064 memcpy(streamPtr, &packetSize_vkUpdateDescriptorSetWithTemplate, sizeof(uint32_t));
13065 streamPtr += sizeof(uint32_t);
13066 if (queueSubmitWithCommandsEnabled) {
13067 memcpy(streamPtr, &seqno, sizeof(uint32_t));
13068 streamPtr += sizeof(uint32_t);
13069 }
13070 uint64_t cgen_var_0;
13071 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
13072 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13073 *streamPtrPtr += 1 * 8;
13074 uint64_t cgen_var_1;
13075 *&cgen_var_1 = get_host_u64_VkDescriptorSet((*&local_descriptorSet));
13076 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
13077 *streamPtrPtr += 1 * 8;
13078 uint64_t cgen_var_2;
13079 *&cgen_var_2 = get_host_u64_VkDescriptorUpdateTemplate((*&local_descriptorUpdateTemplate));
13080 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
13081 *streamPtrPtr += 1 * 8;
13082 // WARNING PTR CHECK
13083 uint64_t cgen_var_3 = (uint64_t)(uintptr_t)local_pData;
13084 memcpy((*streamPtrPtr), &cgen_var_3, 8);
13085 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
13086 *streamPtrPtr += 8;
13087 if (local_pData) {
13088 memcpy(*streamPtrPtr, (void*)local_pData, sizeof(uint8_t));
13089 *streamPtrPtr += sizeof(uint8_t);
13090 }
13091 stream->flush();
13092 ++encodeCount;
13093 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13094 pool->freeAll();
13095 stream->clearPool();
13096 }
13097 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13098 }
13099
vkGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo,VkExternalBufferProperties * pExternalBufferProperties,uint32_t doLock)13100 void VkEncoder::vkGetPhysicalDeviceExternalBufferProperties(
13101 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
13102 VkExternalBufferProperties* pExternalBufferProperties, uint32_t doLock) {
13103 (void)doLock;
13104 bool queueSubmitWithCommandsEnabled =
13105 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13106 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13107 auto stream = mImpl->stream();
13108 auto pool = mImpl->pool();
13109 VkPhysicalDevice local_physicalDevice;
13110 VkPhysicalDeviceExternalBufferInfo* local_pExternalBufferInfo;
13111 local_physicalDevice = physicalDevice;
13112 local_pExternalBufferInfo = nullptr;
13113 if (pExternalBufferInfo) {
13114 local_pExternalBufferInfo = (VkPhysicalDeviceExternalBufferInfo*)pool->alloc(
13115 sizeof(const VkPhysicalDeviceExternalBufferInfo));
13116 deepcopy_VkPhysicalDeviceExternalBufferInfo(
13117 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalBufferInfo,
13118 (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
13119 }
13120 if (local_pExternalBufferInfo) {
13121 sResourceTracker->transformImpl_VkPhysicalDeviceExternalBufferInfo_tohost(
13122 local_pExternalBufferInfo, 1);
13123 transform_tohost_VkPhysicalDeviceExternalBufferInfo(
13124 sResourceTracker, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
13125 }
13126 size_t count = 0;
13127 size_t* countPtr = &count;
13128 {
13129 uint64_t cgen_var_0;
13130 *countPtr += 1 * 8;
13131 count_VkPhysicalDeviceExternalBufferInfo(
13132 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13133 (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), countPtr);
13134 count_VkExternalBufferProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13135 (VkExternalBufferProperties*)(pExternalBufferProperties),
13136 countPtr);
13137 }
13138 uint32_t packetSize_vkGetPhysicalDeviceExternalBufferProperties =
13139 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
13140 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalBufferProperties);
13141 uint8_t* packetBeginPtr = streamPtr;
13142 uint8_t** streamPtrPtr = &streamPtr;
13143 uint32_t opcode_vkGetPhysicalDeviceExternalBufferProperties =
13144 OP_vkGetPhysicalDeviceExternalBufferProperties;
13145 uint32_t seqno;
13146 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
13147 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceExternalBufferProperties, sizeof(uint32_t));
13148 streamPtr += sizeof(uint32_t);
13149 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceExternalBufferProperties, sizeof(uint32_t));
13150 streamPtr += sizeof(uint32_t);
13151 if (queueSubmitWithCommandsEnabled) {
13152 memcpy(streamPtr, &seqno, sizeof(uint32_t));
13153 streamPtr += sizeof(uint32_t);
13154 }
13155 uint64_t cgen_var_0;
13156 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
13157 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13158 *streamPtrPtr += 1 * 8;
13159 reservedmarshal_VkPhysicalDeviceExternalBufferInfo(
13160 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13161 (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), streamPtrPtr);
13162 reservedmarshal_VkExternalBufferProperties(
13163 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13164 (VkExternalBufferProperties*)(pExternalBufferProperties), streamPtrPtr);
13165 unmarshal_VkExternalBufferProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13166 (VkExternalBufferProperties*)(pExternalBufferProperties));
13167 if (pExternalBufferProperties) {
13168 sResourceTracker->transformImpl_VkExternalBufferProperties_fromhost(
13169 pExternalBufferProperties, 1);
13170 transform_fromhost_VkExternalBufferProperties(
13171 sResourceTracker, (VkExternalBufferProperties*)(pExternalBufferProperties));
13172 }
13173 ++encodeCount;
13174 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13175 pool->freeAll();
13176 stream->clearPool();
13177 }
13178 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13179 }
13180
vkGetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo,VkExternalFenceProperties * pExternalFenceProperties,uint32_t doLock)13181 void VkEncoder::vkGetPhysicalDeviceExternalFenceProperties(
13182 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
13183 VkExternalFenceProperties* pExternalFenceProperties, uint32_t doLock) {
13184 (void)doLock;
13185 bool queueSubmitWithCommandsEnabled =
13186 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13187 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13188 auto stream = mImpl->stream();
13189 auto pool = mImpl->pool();
13190 VkPhysicalDevice local_physicalDevice;
13191 VkPhysicalDeviceExternalFenceInfo* local_pExternalFenceInfo;
13192 local_physicalDevice = physicalDevice;
13193 local_pExternalFenceInfo = nullptr;
13194 if (pExternalFenceInfo) {
13195 local_pExternalFenceInfo = (VkPhysicalDeviceExternalFenceInfo*)pool->alloc(
13196 sizeof(const VkPhysicalDeviceExternalFenceInfo));
13197 deepcopy_VkPhysicalDeviceExternalFenceInfo(
13198 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalFenceInfo,
13199 (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
13200 }
13201 if (local_pExternalFenceInfo) {
13202 transform_tohost_VkPhysicalDeviceExternalFenceInfo(
13203 sResourceTracker, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
13204 }
13205 size_t count = 0;
13206 size_t* countPtr = &count;
13207 {
13208 uint64_t cgen_var_0;
13209 *countPtr += 1 * 8;
13210 count_VkPhysicalDeviceExternalFenceInfo(
13211 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13212 (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), countPtr);
13213 count_VkExternalFenceProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13214 (VkExternalFenceProperties*)(pExternalFenceProperties),
13215 countPtr);
13216 }
13217 uint32_t packetSize_vkGetPhysicalDeviceExternalFenceProperties =
13218 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
13219 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalFenceProperties);
13220 uint8_t* packetBeginPtr = streamPtr;
13221 uint8_t** streamPtrPtr = &streamPtr;
13222 uint32_t opcode_vkGetPhysicalDeviceExternalFenceProperties =
13223 OP_vkGetPhysicalDeviceExternalFenceProperties;
13224 uint32_t seqno;
13225 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
13226 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceExternalFenceProperties, sizeof(uint32_t));
13227 streamPtr += sizeof(uint32_t);
13228 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceExternalFenceProperties, sizeof(uint32_t));
13229 streamPtr += sizeof(uint32_t);
13230 if (queueSubmitWithCommandsEnabled) {
13231 memcpy(streamPtr, &seqno, sizeof(uint32_t));
13232 streamPtr += sizeof(uint32_t);
13233 }
13234 uint64_t cgen_var_0;
13235 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
13236 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13237 *streamPtrPtr += 1 * 8;
13238 reservedmarshal_VkPhysicalDeviceExternalFenceInfo(
13239 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13240 (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), streamPtrPtr);
13241 reservedmarshal_VkExternalFenceProperties(
13242 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalFenceProperties*)(pExternalFenceProperties),
13243 streamPtrPtr);
13244 unmarshal_VkExternalFenceProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13245 (VkExternalFenceProperties*)(pExternalFenceProperties));
13246 if (pExternalFenceProperties) {
13247 transform_fromhost_VkExternalFenceProperties(
13248 sResourceTracker, (VkExternalFenceProperties*)(pExternalFenceProperties));
13249 }
13250 ++encodeCount;
13251 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13252 pool->freeAll();
13253 stream->clearPool();
13254 }
13255 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13256 }
13257
vkGetPhysicalDeviceExternalSemaphoreProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo,VkExternalSemaphoreProperties * pExternalSemaphoreProperties,uint32_t doLock)13258 void VkEncoder::vkGetPhysicalDeviceExternalSemaphoreProperties(
13259 VkPhysicalDevice physicalDevice,
13260 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
13261 VkExternalSemaphoreProperties* pExternalSemaphoreProperties, uint32_t doLock) {
13262 (void)doLock;
13263 bool queueSubmitWithCommandsEnabled =
13264 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13265 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13266 auto stream = mImpl->stream();
13267 auto pool = mImpl->pool();
13268 VkPhysicalDevice local_physicalDevice;
13269 VkPhysicalDeviceExternalSemaphoreInfo* local_pExternalSemaphoreInfo;
13270 local_physicalDevice = physicalDevice;
13271 local_pExternalSemaphoreInfo = nullptr;
13272 if (pExternalSemaphoreInfo) {
13273 local_pExternalSemaphoreInfo = (VkPhysicalDeviceExternalSemaphoreInfo*)pool->alloc(
13274 sizeof(const VkPhysicalDeviceExternalSemaphoreInfo));
13275 deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(
13276 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalSemaphoreInfo,
13277 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
13278 }
13279 if (local_pExternalSemaphoreInfo) {
13280 transform_tohost_VkPhysicalDeviceExternalSemaphoreInfo(
13281 sResourceTracker,
13282 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
13283 }
13284 size_t count = 0;
13285 size_t* countPtr = &count;
13286 {
13287 uint64_t cgen_var_0;
13288 *countPtr += 1 * 8;
13289 count_VkPhysicalDeviceExternalSemaphoreInfo(
13290 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13291 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), countPtr);
13292 count_VkExternalSemaphoreProperties(
13293 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13294 (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), countPtr);
13295 }
13296 uint32_t packetSize_vkGetPhysicalDeviceExternalSemaphoreProperties =
13297 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
13298 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalSemaphoreProperties);
13299 uint8_t* packetBeginPtr = streamPtr;
13300 uint8_t** streamPtrPtr = &streamPtr;
13301 uint32_t opcode_vkGetPhysicalDeviceExternalSemaphoreProperties =
13302 OP_vkGetPhysicalDeviceExternalSemaphoreProperties;
13303 uint32_t seqno;
13304 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
13305 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceExternalSemaphoreProperties, sizeof(uint32_t));
13306 streamPtr += sizeof(uint32_t);
13307 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceExternalSemaphoreProperties, sizeof(uint32_t));
13308 streamPtr += sizeof(uint32_t);
13309 if (queueSubmitWithCommandsEnabled) {
13310 memcpy(streamPtr, &seqno, sizeof(uint32_t));
13311 streamPtr += sizeof(uint32_t);
13312 }
13313 uint64_t cgen_var_0;
13314 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
13315 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13316 *streamPtrPtr += 1 * 8;
13317 reservedmarshal_VkPhysicalDeviceExternalSemaphoreInfo(
13318 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13319 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), streamPtrPtr);
13320 reservedmarshal_VkExternalSemaphoreProperties(
13321 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13322 (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), streamPtrPtr);
13323 unmarshal_VkExternalSemaphoreProperties(
13324 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13325 (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
13326 if (pExternalSemaphoreProperties) {
13327 transform_fromhost_VkExternalSemaphoreProperties(
13328 sResourceTracker, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
13329 }
13330 sResourceTracker->on_vkGetPhysicalDeviceExternalSemaphoreProperties(
13331 this, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
13332 ++encodeCount;
13333 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13334 pool->freeAll();
13335 stream->clearPool();
13336 }
13337 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13338 }
13339
vkGetDescriptorSetLayoutSupport(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,VkDescriptorSetLayoutSupport * pSupport,uint32_t doLock)13340 void VkEncoder::vkGetDescriptorSetLayoutSupport(VkDevice device,
13341 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
13342 VkDescriptorSetLayoutSupport* pSupport,
13343 uint32_t doLock) {
13344 (void)doLock;
13345 bool queueSubmitWithCommandsEnabled =
13346 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13347 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13348 auto stream = mImpl->stream();
13349 auto pool = mImpl->pool();
13350 VkDevice local_device;
13351 VkDescriptorSetLayoutCreateInfo* local_pCreateInfo;
13352 local_device = device;
13353 local_pCreateInfo = nullptr;
13354 if (pCreateInfo) {
13355 local_pCreateInfo = (VkDescriptorSetLayoutCreateInfo*)pool->alloc(
13356 sizeof(const VkDescriptorSetLayoutCreateInfo));
13357 deepcopy_VkDescriptorSetLayoutCreateInfo(
13358 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
13359 (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
13360 }
13361 if (local_pCreateInfo) {
13362 transform_tohost_VkDescriptorSetLayoutCreateInfo(
13363 sResourceTracker, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
13364 }
13365 size_t count = 0;
13366 size_t* countPtr = &count;
13367 {
13368 uint64_t cgen_var_0;
13369 *countPtr += 1 * 8;
13370 count_VkDescriptorSetLayoutCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13371 (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo),
13372 countPtr);
13373 count_VkDescriptorSetLayoutSupport(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13374 (VkDescriptorSetLayoutSupport*)(pSupport), countPtr);
13375 }
13376 uint32_t packetSize_vkGetDescriptorSetLayoutSupport =
13377 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
13378 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDescriptorSetLayoutSupport);
13379 uint8_t* packetBeginPtr = streamPtr;
13380 uint8_t** streamPtrPtr = &streamPtr;
13381 uint32_t opcode_vkGetDescriptorSetLayoutSupport = OP_vkGetDescriptorSetLayoutSupport;
13382 uint32_t seqno;
13383 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
13384 memcpy(streamPtr, &opcode_vkGetDescriptorSetLayoutSupport, sizeof(uint32_t));
13385 streamPtr += sizeof(uint32_t);
13386 memcpy(streamPtr, &packetSize_vkGetDescriptorSetLayoutSupport, sizeof(uint32_t));
13387 streamPtr += sizeof(uint32_t);
13388 if (queueSubmitWithCommandsEnabled) {
13389 memcpy(streamPtr, &seqno, sizeof(uint32_t));
13390 streamPtr += sizeof(uint32_t);
13391 }
13392 uint64_t cgen_var_0;
13393 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
13394 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13395 *streamPtrPtr += 1 * 8;
13396 reservedmarshal_VkDescriptorSetLayoutCreateInfo(
13397 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo),
13398 streamPtrPtr);
13399 reservedmarshal_VkDescriptorSetLayoutSupport(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13400 (VkDescriptorSetLayoutSupport*)(pSupport),
13401 streamPtrPtr);
13402 unmarshal_VkDescriptorSetLayoutSupport(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13403 (VkDescriptorSetLayoutSupport*)(pSupport));
13404 if (pSupport) {
13405 transform_fromhost_VkDescriptorSetLayoutSupport(sResourceTracker,
13406 (VkDescriptorSetLayoutSupport*)(pSupport));
13407 }
13408 ++encodeCount;
13409 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13410 pool->freeAll();
13411 stream->clearPool();
13412 }
13413 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13414 }
13415
13416 #endif
13417 #ifdef VK_VERSION_1_2
vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride,uint32_t doLock)13418 void VkEncoder::vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer,
13419 VkDeviceSize offset, VkBuffer countBuffer,
13420 VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
13421 uint32_t stride, uint32_t doLock) {
13422 (void)doLock;
13423 bool queueSubmitWithCommandsEnabled =
13424 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13425 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13426 auto stream = mImpl->stream();
13427 auto pool = mImpl->pool();
13428 VkCommandBuffer local_commandBuffer;
13429 VkBuffer local_buffer;
13430 VkDeviceSize local_offset;
13431 VkBuffer local_countBuffer;
13432 VkDeviceSize local_countBufferOffset;
13433 uint32_t local_maxDrawCount;
13434 uint32_t local_stride;
13435 local_commandBuffer = commandBuffer;
13436 local_buffer = buffer;
13437 local_offset = offset;
13438 local_countBuffer = countBuffer;
13439 local_countBufferOffset = countBufferOffset;
13440 local_maxDrawCount = maxDrawCount;
13441 local_stride = stride;
13442 size_t count = 0;
13443 size_t* countPtr = &count;
13444 {
13445 uint64_t cgen_var_0;
13446 *countPtr += 1 * 8;
13447 uint64_t cgen_var_1;
13448 *countPtr += 1 * 8;
13449 *countPtr += sizeof(VkDeviceSize);
13450 uint64_t cgen_var_2;
13451 *countPtr += 1 * 8;
13452 *countPtr += sizeof(VkDeviceSize);
13453 *countPtr += sizeof(uint32_t);
13454 *countPtr += sizeof(uint32_t);
13455 }
13456 uint32_t packetSize_vkCmdDrawIndirectCount = 4 + 4 + count;
13457 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDrawIndirectCount -= 8;
13458 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdDrawIndirectCount);
13459 uint8_t* packetBeginPtr = streamPtr;
13460 uint8_t** streamPtrPtr = &streamPtr;
13461 uint32_t opcode_vkCmdDrawIndirectCount = OP_vkCmdDrawIndirectCount;
13462 memcpy(streamPtr, &opcode_vkCmdDrawIndirectCount, sizeof(uint32_t));
13463 streamPtr += sizeof(uint32_t);
13464 memcpy(streamPtr, &packetSize_vkCmdDrawIndirectCount, sizeof(uint32_t));
13465 streamPtr += sizeof(uint32_t);
13466 if (!queueSubmitWithCommandsEnabled) {
13467 uint64_t cgen_var_0;
13468 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
13469 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13470 *streamPtrPtr += 1 * 8;
13471 }
13472 uint64_t cgen_var_0;
13473 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_buffer));
13474 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13475 *streamPtrPtr += 1 * 8;
13476 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
13477 *streamPtrPtr += sizeof(VkDeviceSize);
13478 uint64_t cgen_var_1;
13479 *&cgen_var_1 = get_host_u64_VkBuffer((*&local_countBuffer));
13480 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
13481 *streamPtrPtr += 1 * 8;
13482 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
13483 *streamPtrPtr += sizeof(VkDeviceSize);
13484 memcpy(*streamPtrPtr, (uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
13485 *streamPtrPtr += sizeof(uint32_t);
13486 memcpy(*streamPtrPtr, (uint32_t*)&local_stride, sizeof(uint32_t));
13487 *streamPtrPtr += sizeof(uint32_t);
13488 ++encodeCount;
13489 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13490 pool->freeAll();
13491 stream->clearPool();
13492 }
13493 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13494 }
13495
vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride,uint32_t doLock)13496 void VkEncoder::vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer,
13497 VkDeviceSize offset, VkBuffer countBuffer,
13498 VkDeviceSize countBufferOffset, uint32_t maxDrawCount,
13499 uint32_t stride, uint32_t doLock) {
13500 (void)doLock;
13501 bool queueSubmitWithCommandsEnabled =
13502 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13503 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13504 auto stream = mImpl->stream();
13505 auto pool = mImpl->pool();
13506 VkCommandBuffer local_commandBuffer;
13507 VkBuffer local_buffer;
13508 VkDeviceSize local_offset;
13509 VkBuffer local_countBuffer;
13510 VkDeviceSize local_countBufferOffset;
13511 uint32_t local_maxDrawCount;
13512 uint32_t local_stride;
13513 local_commandBuffer = commandBuffer;
13514 local_buffer = buffer;
13515 local_offset = offset;
13516 local_countBuffer = countBuffer;
13517 local_countBufferOffset = countBufferOffset;
13518 local_maxDrawCount = maxDrawCount;
13519 local_stride = stride;
13520 size_t count = 0;
13521 size_t* countPtr = &count;
13522 {
13523 uint64_t cgen_var_0;
13524 *countPtr += 1 * 8;
13525 uint64_t cgen_var_1;
13526 *countPtr += 1 * 8;
13527 *countPtr += sizeof(VkDeviceSize);
13528 uint64_t cgen_var_2;
13529 *countPtr += 1 * 8;
13530 *countPtr += sizeof(VkDeviceSize);
13531 *countPtr += sizeof(uint32_t);
13532 *countPtr += sizeof(uint32_t);
13533 }
13534 uint32_t packetSize_vkCmdDrawIndexedIndirectCount = 4 + 4 + count;
13535 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDrawIndexedIndirectCount -= 8;
13536 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdDrawIndexedIndirectCount);
13537 uint8_t* packetBeginPtr = streamPtr;
13538 uint8_t** streamPtrPtr = &streamPtr;
13539 uint32_t opcode_vkCmdDrawIndexedIndirectCount = OP_vkCmdDrawIndexedIndirectCount;
13540 memcpy(streamPtr, &opcode_vkCmdDrawIndexedIndirectCount, sizeof(uint32_t));
13541 streamPtr += sizeof(uint32_t);
13542 memcpy(streamPtr, &packetSize_vkCmdDrawIndexedIndirectCount, sizeof(uint32_t));
13543 streamPtr += sizeof(uint32_t);
13544 if (!queueSubmitWithCommandsEnabled) {
13545 uint64_t cgen_var_0;
13546 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
13547 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13548 *streamPtrPtr += 1 * 8;
13549 }
13550 uint64_t cgen_var_0;
13551 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_buffer));
13552 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13553 *streamPtrPtr += 1 * 8;
13554 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
13555 *streamPtrPtr += sizeof(VkDeviceSize);
13556 uint64_t cgen_var_1;
13557 *&cgen_var_1 = get_host_u64_VkBuffer((*&local_countBuffer));
13558 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
13559 *streamPtrPtr += 1 * 8;
13560 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
13561 *streamPtrPtr += sizeof(VkDeviceSize);
13562 memcpy(*streamPtrPtr, (uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
13563 *streamPtrPtr += sizeof(uint32_t);
13564 memcpy(*streamPtrPtr, (uint32_t*)&local_stride, sizeof(uint32_t));
13565 *streamPtrPtr += sizeof(uint32_t);
13566 ++encodeCount;
13567 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13568 pool->freeAll();
13569 stream->clearPool();
13570 }
13571 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13572 }
13573
vkCreateRenderPass2(VkDevice device,const VkRenderPassCreateInfo2 * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass,uint32_t doLock)13574 VkResult VkEncoder::vkCreateRenderPass2(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo,
13575 const VkAllocationCallbacks* pAllocator,
13576 VkRenderPass* pRenderPass, uint32_t doLock) {
13577 (void)doLock;
13578 bool queueSubmitWithCommandsEnabled =
13579 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13580 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13581 auto stream = mImpl->stream();
13582 auto pool = mImpl->pool();
13583 VkDevice local_device;
13584 VkRenderPassCreateInfo2* local_pCreateInfo;
13585 VkAllocationCallbacks* local_pAllocator;
13586 local_device = device;
13587 local_pCreateInfo = nullptr;
13588 if (pCreateInfo) {
13589 local_pCreateInfo =
13590 (VkRenderPassCreateInfo2*)pool->alloc(sizeof(const VkRenderPassCreateInfo2));
13591 deepcopy_VkRenderPassCreateInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
13592 (VkRenderPassCreateInfo2*)(local_pCreateInfo));
13593 }
13594 local_pAllocator = nullptr;
13595 if (pAllocator) {
13596 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
13597 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
13598 (VkAllocationCallbacks*)(local_pAllocator));
13599 }
13600 local_pAllocator = nullptr;
13601 if (local_pCreateInfo) {
13602 transform_tohost_VkRenderPassCreateInfo2(sResourceTracker,
13603 (VkRenderPassCreateInfo2*)(local_pCreateInfo));
13604 }
13605 if (local_pAllocator) {
13606 transform_tohost_VkAllocationCallbacks(sResourceTracker,
13607 (VkAllocationCallbacks*)(local_pAllocator));
13608 }
13609 size_t count = 0;
13610 size_t* countPtr = &count;
13611 {
13612 uint64_t cgen_var_0;
13613 *countPtr += 1 * 8;
13614 count_VkRenderPassCreateInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13615 (VkRenderPassCreateInfo2*)(local_pCreateInfo), countPtr);
13616 // WARNING PTR CHECK
13617 *countPtr += 8;
13618 if (local_pAllocator) {
13619 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13620 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
13621 }
13622 uint64_t cgen_var_1;
13623 *countPtr += 8;
13624 }
13625 uint32_t packetSize_vkCreateRenderPass2 =
13626 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
13627 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateRenderPass2);
13628 uint8_t* packetBeginPtr = streamPtr;
13629 uint8_t** streamPtrPtr = &streamPtr;
13630 uint32_t opcode_vkCreateRenderPass2 = OP_vkCreateRenderPass2;
13631 uint32_t seqno;
13632 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
13633 memcpy(streamPtr, &opcode_vkCreateRenderPass2, sizeof(uint32_t));
13634 streamPtr += sizeof(uint32_t);
13635 memcpy(streamPtr, &packetSize_vkCreateRenderPass2, sizeof(uint32_t));
13636 streamPtr += sizeof(uint32_t);
13637 if (queueSubmitWithCommandsEnabled) {
13638 memcpy(streamPtr, &seqno, sizeof(uint32_t));
13639 streamPtr += sizeof(uint32_t);
13640 }
13641 uint64_t cgen_var_0;
13642 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
13643 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13644 *streamPtrPtr += 1 * 8;
13645 reservedmarshal_VkRenderPassCreateInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13646 (VkRenderPassCreateInfo2*)(local_pCreateInfo),
13647 streamPtrPtr);
13648 // WARNING PTR CHECK
13649 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
13650 memcpy((*streamPtrPtr), &cgen_var_1, 8);
13651 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
13652 *streamPtrPtr += 8;
13653 if (local_pAllocator) {
13654 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13655 (VkAllocationCallbacks*)(local_pAllocator),
13656 streamPtrPtr);
13657 }
13658 /* is handle, possibly out */;
13659 uint64_t cgen_var_2;
13660 *&cgen_var_2 = (uint64_t)((*pRenderPass));
13661 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
13662 *streamPtrPtr += 8;
13663 /* is handle, possibly out */;
13664 stream->setHandleMapping(sResourceTracker->createMapping());
13665 uint64_t cgen_var_3;
13666 stream->read((uint64_t*)&cgen_var_3, 8);
13667 stream->handleMapping()->mapHandles_u64_VkRenderPass(&cgen_var_3, (VkRenderPass*)pRenderPass,
13668 1);
13669 stream->unsetHandleMapping();
13670 VkResult vkCreateRenderPass2_VkResult_return = (VkResult)0;
13671 stream->read(&vkCreateRenderPass2_VkResult_return, sizeof(VkResult));
13672 ++encodeCount;
13673 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13674 pool->freeAll();
13675 stream->clearPool();
13676 }
13677 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13678 return vkCreateRenderPass2_VkResult_return;
13679 }
13680
vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,const VkSubpassBeginInfo * pSubpassBeginInfo,uint32_t doLock)13681 void VkEncoder::vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer,
13682 const VkRenderPassBeginInfo* pRenderPassBegin,
13683 const VkSubpassBeginInfo* pSubpassBeginInfo,
13684 uint32_t doLock) {
13685 (void)doLock;
13686 bool queueSubmitWithCommandsEnabled =
13687 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13688 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13689 auto stream = mImpl->stream();
13690 auto pool = mImpl->pool();
13691 VkCommandBuffer local_commandBuffer;
13692 VkRenderPassBeginInfo* local_pRenderPassBegin;
13693 VkSubpassBeginInfo* local_pSubpassBeginInfo;
13694 local_commandBuffer = commandBuffer;
13695 local_pRenderPassBegin = nullptr;
13696 if (pRenderPassBegin) {
13697 local_pRenderPassBegin =
13698 (VkRenderPassBeginInfo*)pool->alloc(sizeof(const VkRenderPassBeginInfo));
13699 deepcopy_VkRenderPassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderPassBegin,
13700 (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
13701 }
13702 local_pSubpassBeginInfo = nullptr;
13703 if (pSubpassBeginInfo) {
13704 local_pSubpassBeginInfo =
13705 (VkSubpassBeginInfo*)pool->alloc(sizeof(const VkSubpassBeginInfo));
13706 deepcopy_VkSubpassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassBeginInfo,
13707 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
13708 }
13709 if (local_pRenderPassBegin) {
13710 transform_tohost_VkRenderPassBeginInfo(sResourceTracker,
13711 (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
13712 }
13713 if (local_pSubpassBeginInfo) {
13714 transform_tohost_VkSubpassBeginInfo(sResourceTracker,
13715 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
13716 }
13717 size_t count = 0;
13718 size_t* countPtr = &count;
13719 {
13720 uint64_t cgen_var_0;
13721 *countPtr += 1 * 8;
13722 count_VkRenderPassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13723 (VkRenderPassBeginInfo*)(local_pRenderPassBegin), countPtr);
13724 count_VkSubpassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13725 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
13726 }
13727 uint32_t packetSize_vkCmdBeginRenderPass2 = 4 + 4 + count;
13728 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginRenderPass2 -= 8;
13729 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginRenderPass2);
13730 uint8_t* packetBeginPtr = streamPtr;
13731 uint8_t** streamPtrPtr = &streamPtr;
13732 uint32_t opcode_vkCmdBeginRenderPass2 = OP_vkCmdBeginRenderPass2;
13733 memcpy(streamPtr, &opcode_vkCmdBeginRenderPass2, sizeof(uint32_t));
13734 streamPtr += sizeof(uint32_t);
13735 memcpy(streamPtr, &packetSize_vkCmdBeginRenderPass2, sizeof(uint32_t));
13736 streamPtr += sizeof(uint32_t);
13737 if (!queueSubmitWithCommandsEnabled) {
13738 uint64_t cgen_var_0;
13739 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
13740 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13741 *streamPtrPtr += 1 * 8;
13742 }
13743 reservedmarshal_VkRenderPassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13744 (VkRenderPassBeginInfo*)(local_pRenderPassBegin),
13745 streamPtrPtr);
13746 reservedmarshal_VkSubpassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13747 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo),
13748 streamPtrPtr);
13749 ++encodeCount;
13750 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13751 pool->freeAll();
13752 stream->clearPool();
13753 }
13754 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13755 }
13756
vkCmdNextSubpass2(VkCommandBuffer commandBuffer,const VkSubpassBeginInfo * pSubpassBeginInfo,const VkSubpassEndInfo * pSubpassEndInfo,uint32_t doLock)13757 void VkEncoder::vkCmdNextSubpass2(VkCommandBuffer commandBuffer,
13758 const VkSubpassBeginInfo* pSubpassBeginInfo,
13759 const VkSubpassEndInfo* pSubpassEndInfo, uint32_t doLock) {
13760 (void)doLock;
13761 bool queueSubmitWithCommandsEnabled =
13762 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13763 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13764 auto stream = mImpl->stream();
13765 auto pool = mImpl->pool();
13766 VkCommandBuffer local_commandBuffer;
13767 VkSubpassBeginInfo* local_pSubpassBeginInfo;
13768 VkSubpassEndInfo* local_pSubpassEndInfo;
13769 local_commandBuffer = commandBuffer;
13770 local_pSubpassBeginInfo = nullptr;
13771 if (pSubpassBeginInfo) {
13772 local_pSubpassBeginInfo =
13773 (VkSubpassBeginInfo*)pool->alloc(sizeof(const VkSubpassBeginInfo));
13774 deepcopy_VkSubpassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassBeginInfo,
13775 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
13776 }
13777 local_pSubpassEndInfo = nullptr;
13778 if (pSubpassEndInfo) {
13779 local_pSubpassEndInfo = (VkSubpassEndInfo*)pool->alloc(sizeof(const VkSubpassEndInfo));
13780 deepcopy_VkSubpassEndInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassEndInfo,
13781 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
13782 }
13783 if (local_pSubpassBeginInfo) {
13784 transform_tohost_VkSubpassBeginInfo(sResourceTracker,
13785 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
13786 }
13787 if (local_pSubpassEndInfo) {
13788 transform_tohost_VkSubpassEndInfo(sResourceTracker,
13789 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
13790 }
13791 size_t count = 0;
13792 size_t* countPtr = &count;
13793 {
13794 uint64_t cgen_var_0;
13795 *countPtr += 1 * 8;
13796 count_VkSubpassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13797 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
13798 count_VkSubpassEndInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13799 (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
13800 }
13801 uint32_t packetSize_vkCmdNextSubpass2 = 4 + 4 + count;
13802 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdNextSubpass2 -= 8;
13803 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdNextSubpass2);
13804 uint8_t* packetBeginPtr = streamPtr;
13805 uint8_t** streamPtrPtr = &streamPtr;
13806 uint32_t opcode_vkCmdNextSubpass2 = OP_vkCmdNextSubpass2;
13807 memcpy(streamPtr, &opcode_vkCmdNextSubpass2, sizeof(uint32_t));
13808 streamPtr += sizeof(uint32_t);
13809 memcpy(streamPtr, &packetSize_vkCmdNextSubpass2, sizeof(uint32_t));
13810 streamPtr += sizeof(uint32_t);
13811 if (!queueSubmitWithCommandsEnabled) {
13812 uint64_t cgen_var_0;
13813 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
13814 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13815 *streamPtrPtr += 1 * 8;
13816 }
13817 reservedmarshal_VkSubpassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13818 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo),
13819 streamPtrPtr);
13820 reservedmarshal_VkSubpassEndInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13821 (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
13822 ++encodeCount;
13823 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13824 pool->freeAll();
13825 stream->clearPool();
13826 }
13827 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13828 }
13829
vkCmdEndRenderPass2(VkCommandBuffer commandBuffer,const VkSubpassEndInfo * pSubpassEndInfo,uint32_t doLock)13830 void VkEncoder::vkCmdEndRenderPass2(VkCommandBuffer commandBuffer,
13831 const VkSubpassEndInfo* pSubpassEndInfo, uint32_t doLock) {
13832 (void)doLock;
13833 bool queueSubmitWithCommandsEnabled =
13834 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13835 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13836 auto stream = mImpl->stream();
13837 auto pool = mImpl->pool();
13838 VkCommandBuffer local_commandBuffer;
13839 VkSubpassEndInfo* local_pSubpassEndInfo;
13840 local_commandBuffer = commandBuffer;
13841 local_pSubpassEndInfo = nullptr;
13842 if (pSubpassEndInfo) {
13843 local_pSubpassEndInfo = (VkSubpassEndInfo*)pool->alloc(sizeof(const VkSubpassEndInfo));
13844 deepcopy_VkSubpassEndInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassEndInfo,
13845 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
13846 }
13847 if (local_pSubpassEndInfo) {
13848 transform_tohost_VkSubpassEndInfo(sResourceTracker,
13849 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
13850 }
13851 size_t count = 0;
13852 size_t* countPtr = &count;
13853 {
13854 uint64_t cgen_var_0;
13855 *countPtr += 1 * 8;
13856 count_VkSubpassEndInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
13857 (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
13858 }
13859 uint32_t packetSize_vkCmdEndRenderPass2 = 4 + 4 + count;
13860 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndRenderPass2 -= 8;
13861 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndRenderPass2);
13862 uint8_t* packetBeginPtr = streamPtr;
13863 uint8_t** streamPtrPtr = &streamPtr;
13864 uint32_t opcode_vkCmdEndRenderPass2 = OP_vkCmdEndRenderPass2;
13865 memcpy(streamPtr, &opcode_vkCmdEndRenderPass2, sizeof(uint32_t));
13866 streamPtr += sizeof(uint32_t);
13867 memcpy(streamPtr, &packetSize_vkCmdEndRenderPass2, sizeof(uint32_t));
13868 streamPtr += sizeof(uint32_t);
13869 if (!queueSubmitWithCommandsEnabled) {
13870 uint64_t cgen_var_0;
13871 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
13872 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13873 *streamPtrPtr += 1 * 8;
13874 }
13875 reservedmarshal_VkSubpassEndInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
13876 (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
13877 ++encodeCount;
13878 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13879 pool->freeAll();
13880 stream->clearPool();
13881 }
13882 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13883 }
13884
vkResetQueryPool(VkDevice device,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,uint32_t doLock)13885 void VkEncoder::vkResetQueryPool(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery,
13886 uint32_t queryCount, uint32_t doLock) {
13887 (void)doLock;
13888 bool queueSubmitWithCommandsEnabled =
13889 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13890 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13891 auto stream = mImpl->stream();
13892 auto pool = mImpl->pool();
13893 VkDevice local_device;
13894 VkQueryPool local_queryPool;
13895 uint32_t local_firstQuery;
13896 uint32_t local_queryCount;
13897 local_device = device;
13898 local_queryPool = queryPool;
13899 local_firstQuery = firstQuery;
13900 local_queryCount = queryCount;
13901 size_t count = 0;
13902 size_t* countPtr = &count;
13903 {
13904 uint64_t cgen_var_0;
13905 *countPtr += 1 * 8;
13906 uint64_t cgen_var_1;
13907 *countPtr += 1 * 8;
13908 *countPtr += sizeof(uint32_t);
13909 *countPtr += sizeof(uint32_t);
13910 }
13911 uint32_t packetSize_vkResetQueryPool = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
13912 uint8_t* streamPtr = stream->reserve(packetSize_vkResetQueryPool);
13913 uint8_t* packetBeginPtr = streamPtr;
13914 uint8_t** streamPtrPtr = &streamPtr;
13915 uint32_t opcode_vkResetQueryPool = OP_vkResetQueryPool;
13916 uint32_t seqno;
13917 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
13918 memcpy(streamPtr, &opcode_vkResetQueryPool, sizeof(uint32_t));
13919 streamPtr += sizeof(uint32_t);
13920 memcpy(streamPtr, &packetSize_vkResetQueryPool, sizeof(uint32_t));
13921 streamPtr += sizeof(uint32_t);
13922 if (queueSubmitWithCommandsEnabled) {
13923 memcpy(streamPtr, &seqno, sizeof(uint32_t));
13924 streamPtr += sizeof(uint32_t);
13925 }
13926 uint64_t cgen_var_0;
13927 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
13928 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13929 *streamPtrPtr += 1 * 8;
13930 uint64_t cgen_var_1;
13931 *&cgen_var_1 = get_host_u64_VkQueryPool((*&local_queryPool));
13932 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
13933 *streamPtrPtr += 1 * 8;
13934 memcpy(*streamPtrPtr, (uint32_t*)&local_firstQuery, sizeof(uint32_t));
13935 *streamPtrPtr += sizeof(uint32_t);
13936 memcpy(*streamPtrPtr, (uint32_t*)&local_queryCount, sizeof(uint32_t));
13937 *streamPtrPtr += sizeof(uint32_t);
13938 stream->flush();
13939 ++encodeCount;
13940 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13941 pool->freeAll();
13942 stream->clearPool();
13943 }
13944 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
13945 }
13946
vkGetSemaphoreCounterValue(VkDevice device,VkSemaphore semaphore,uint64_t * pValue,uint32_t doLock)13947 VkResult VkEncoder::vkGetSemaphoreCounterValue(VkDevice device, VkSemaphore semaphore,
13948 uint64_t* pValue, uint32_t doLock) {
13949 (void)doLock;
13950 bool queueSubmitWithCommandsEnabled =
13951 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
13952 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
13953 auto stream = mImpl->stream();
13954 auto pool = mImpl->pool();
13955 VkDevice local_device;
13956 VkSemaphore local_semaphore;
13957 local_device = device;
13958 local_semaphore = semaphore;
13959 size_t count = 0;
13960 size_t* countPtr = &count;
13961 {
13962 uint64_t cgen_var_0;
13963 *countPtr += 1 * 8;
13964 uint64_t cgen_var_1;
13965 *countPtr += 1 * 8;
13966 *countPtr += sizeof(uint64_t);
13967 }
13968 uint32_t packetSize_vkGetSemaphoreCounterValue =
13969 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
13970 uint8_t* streamPtr = stream->reserve(packetSize_vkGetSemaphoreCounterValue);
13971 uint8_t* packetBeginPtr = streamPtr;
13972 uint8_t** streamPtrPtr = &streamPtr;
13973 uint32_t opcode_vkGetSemaphoreCounterValue = OP_vkGetSemaphoreCounterValue;
13974 uint32_t seqno;
13975 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
13976 memcpy(streamPtr, &opcode_vkGetSemaphoreCounterValue, sizeof(uint32_t));
13977 streamPtr += sizeof(uint32_t);
13978 memcpy(streamPtr, &packetSize_vkGetSemaphoreCounterValue, sizeof(uint32_t));
13979 streamPtr += sizeof(uint32_t);
13980 if (queueSubmitWithCommandsEnabled) {
13981 memcpy(streamPtr, &seqno, sizeof(uint32_t));
13982 streamPtr += sizeof(uint32_t);
13983 }
13984 uint64_t cgen_var_0;
13985 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
13986 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
13987 *streamPtrPtr += 1 * 8;
13988 uint64_t cgen_var_1;
13989 *&cgen_var_1 = get_host_u64_VkSemaphore((*&local_semaphore));
13990 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
13991 *streamPtrPtr += 1 * 8;
13992 memcpy(*streamPtrPtr, (uint64_t*)pValue, sizeof(uint64_t));
13993 *streamPtrPtr += sizeof(uint64_t);
13994 stream->read((uint64_t*)pValue, sizeof(uint64_t));
13995 VkResult vkGetSemaphoreCounterValue_VkResult_return = (VkResult)0;
13996 stream->read(&vkGetSemaphoreCounterValue_VkResult_return, sizeof(VkResult));
13997 ++encodeCount;
13998 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
13999 pool->freeAll();
14000 stream->clearPool();
14001 }
14002 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14003 return vkGetSemaphoreCounterValue_VkResult_return;
14004 }
14005
vkWaitSemaphores(VkDevice device,const VkSemaphoreWaitInfo * pWaitInfo,uint64_t timeout,uint32_t doLock)14006 VkResult VkEncoder::vkWaitSemaphores(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo,
14007 uint64_t timeout, uint32_t doLock) {
14008 (void)doLock;
14009 bool queueSubmitWithCommandsEnabled =
14010 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14011 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14012 auto stream = mImpl->stream();
14013 auto pool = mImpl->pool();
14014 VkDevice local_device;
14015 VkSemaphoreWaitInfo* local_pWaitInfo;
14016 uint64_t local_timeout;
14017 local_device = device;
14018 local_pWaitInfo = nullptr;
14019 if (pWaitInfo) {
14020 local_pWaitInfo = (VkSemaphoreWaitInfo*)pool->alloc(sizeof(const VkSemaphoreWaitInfo));
14021 deepcopy_VkSemaphoreWaitInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pWaitInfo,
14022 (VkSemaphoreWaitInfo*)(local_pWaitInfo));
14023 }
14024 local_timeout = timeout;
14025 if (local_pWaitInfo) {
14026 transform_tohost_VkSemaphoreWaitInfo(sResourceTracker,
14027 (VkSemaphoreWaitInfo*)(local_pWaitInfo));
14028 }
14029 size_t count = 0;
14030 size_t* countPtr = &count;
14031 {
14032 uint64_t cgen_var_0;
14033 *countPtr += 1 * 8;
14034 count_VkSemaphoreWaitInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
14035 (VkSemaphoreWaitInfo*)(local_pWaitInfo), countPtr);
14036 *countPtr += sizeof(uint64_t);
14037 }
14038 uint32_t packetSize_vkWaitSemaphores = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
14039 uint8_t* streamPtr = stream->reserve(packetSize_vkWaitSemaphores);
14040 uint8_t* packetBeginPtr = streamPtr;
14041 uint8_t** streamPtrPtr = &streamPtr;
14042 uint32_t opcode_vkWaitSemaphores = OP_vkWaitSemaphores;
14043 uint32_t seqno;
14044 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
14045 memcpy(streamPtr, &opcode_vkWaitSemaphores, sizeof(uint32_t));
14046 streamPtr += sizeof(uint32_t);
14047 memcpy(streamPtr, &packetSize_vkWaitSemaphores, sizeof(uint32_t));
14048 streamPtr += sizeof(uint32_t);
14049 if (queueSubmitWithCommandsEnabled) {
14050 memcpy(streamPtr, &seqno, sizeof(uint32_t));
14051 streamPtr += sizeof(uint32_t);
14052 }
14053 uint64_t cgen_var_0;
14054 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
14055 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14056 *streamPtrPtr += 1 * 8;
14057 reservedmarshal_VkSemaphoreWaitInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
14058 (VkSemaphoreWaitInfo*)(local_pWaitInfo), streamPtrPtr);
14059 memcpy(*streamPtrPtr, (uint64_t*)&local_timeout, sizeof(uint64_t));
14060 *streamPtrPtr += sizeof(uint64_t);
14061 VkResult vkWaitSemaphores_VkResult_return = (VkResult)0;
14062 stream->read(&vkWaitSemaphores_VkResult_return, sizeof(VkResult));
14063 ++encodeCount;
14064 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14065 pool->freeAll();
14066 stream->clearPool();
14067 }
14068 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14069 return vkWaitSemaphores_VkResult_return;
14070 }
14071
vkSignalSemaphore(VkDevice device,const VkSemaphoreSignalInfo * pSignalInfo,uint32_t doLock)14072 VkResult VkEncoder::vkSignalSemaphore(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo,
14073 uint32_t doLock) {
14074 (void)doLock;
14075 bool queueSubmitWithCommandsEnabled =
14076 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14077 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14078 auto stream = mImpl->stream();
14079 auto pool = mImpl->pool();
14080 VkDevice local_device;
14081 VkSemaphoreSignalInfo* local_pSignalInfo;
14082 local_device = device;
14083 local_pSignalInfo = nullptr;
14084 if (pSignalInfo) {
14085 local_pSignalInfo =
14086 (VkSemaphoreSignalInfo*)pool->alloc(sizeof(const VkSemaphoreSignalInfo));
14087 deepcopy_VkSemaphoreSignalInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSignalInfo,
14088 (VkSemaphoreSignalInfo*)(local_pSignalInfo));
14089 }
14090 if (local_pSignalInfo) {
14091 transform_tohost_VkSemaphoreSignalInfo(sResourceTracker,
14092 (VkSemaphoreSignalInfo*)(local_pSignalInfo));
14093 }
14094 size_t count = 0;
14095 size_t* countPtr = &count;
14096 {
14097 uint64_t cgen_var_0;
14098 *countPtr += 1 * 8;
14099 count_VkSemaphoreSignalInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
14100 (VkSemaphoreSignalInfo*)(local_pSignalInfo), countPtr);
14101 }
14102 uint32_t packetSize_vkSignalSemaphore =
14103 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
14104 uint8_t* streamPtr = stream->reserve(packetSize_vkSignalSemaphore);
14105 uint8_t* packetBeginPtr = streamPtr;
14106 uint8_t** streamPtrPtr = &streamPtr;
14107 uint32_t opcode_vkSignalSemaphore = OP_vkSignalSemaphore;
14108 uint32_t seqno;
14109 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
14110 memcpy(streamPtr, &opcode_vkSignalSemaphore, sizeof(uint32_t));
14111 streamPtr += sizeof(uint32_t);
14112 memcpy(streamPtr, &packetSize_vkSignalSemaphore, sizeof(uint32_t));
14113 streamPtr += sizeof(uint32_t);
14114 if (queueSubmitWithCommandsEnabled) {
14115 memcpy(streamPtr, &seqno, sizeof(uint32_t));
14116 streamPtr += sizeof(uint32_t);
14117 }
14118 uint64_t cgen_var_0;
14119 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
14120 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14121 *streamPtrPtr += 1 * 8;
14122 reservedmarshal_VkSemaphoreSignalInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
14123 (VkSemaphoreSignalInfo*)(local_pSignalInfo),
14124 streamPtrPtr);
14125 VkResult vkSignalSemaphore_VkResult_return = (VkResult)0;
14126 stream->read(&vkSignalSemaphore_VkResult_return, sizeof(VkResult));
14127 ++encodeCount;
14128 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14129 pool->freeAll();
14130 stream->clearPool();
14131 }
14132 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14133 return vkSignalSemaphore_VkResult_return;
14134 }
14135
vkGetBufferDeviceAddress(VkDevice device,const VkBufferDeviceAddressInfo * pInfo,uint32_t doLock)14136 VkDeviceAddress VkEncoder::vkGetBufferDeviceAddress(VkDevice device,
14137 const VkBufferDeviceAddressInfo* pInfo,
14138 uint32_t doLock) {
14139 (void)doLock;
14140 bool queueSubmitWithCommandsEnabled =
14141 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14142 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14143 auto stream = mImpl->stream();
14144 auto pool = mImpl->pool();
14145 VkDevice local_device;
14146 VkBufferDeviceAddressInfo* local_pInfo;
14147 local_device = device;
14148 local_pInfo = nullptr;
14149 if (pInfo) {
14150 local_pInfo =
14151 (VkBufferDeviceAddressInfo*)pool->alloc(sizeof(const VkBufferDeviceAddressInfo));
14152 deepcopy_VkBufferDeviceAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
14153 (VkBufferDeviceAddressInfo*)(local_pInfo));
14154 }
14155 if (local_pInfo) {
14156 transform_tohost_VkBufferDeviceAddressInfo(sResourceTracker,
14157 (VkBufferDeviceAddressInfo*)(local_pInfo));
14158 }
14159 size_t count = 0;
14160 size_t* countPtr = &count;
14161 {
14162 uint64_t cgen_var_0;
14163 *countPtr += 1 * 8;
14164 count_VkBufferDeviceAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
14165 (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
14166 }
14167 uint32_t packetSize_vkGetBufferDeviceAddress =
14168 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
14169 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferDeviceAddress);
14170 uint8_t* packetBeginPtr = streamPtr;
14171 uint8_t** streamPtrPtr = &streamPtr;
14172 uint32_t opcode_vkGetBufferDeviceAddress = OP_vkGetBufferDeviceAddress;
14173 uint32_t seqno;
14174 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
14175 memcpy(streamPtr, &opcode_vkGetBufferDeviceAddress, sizeof(uint32_t));
14176 streamPtr += sizeof(uint32_t);
14177 memcpy(streamPtr, &packetSize_vkGetBufferDeviceAddress, sizeof(uint32_t));
14178 streamPtr += sizeof(uint32_t);
14179 if (queueSubmitWithCommandsEnabled) {
14180 memcpy(streamPtr, &seqno, sizeof(uint32_t));
14181 streamPtr += sizeof(uint32_t);
14182 }
14183 uint64_t cgen_var_0;
14184 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
14185 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14186 *streamPtrPtr += 1 * 8;
14187 reservedmarshal_VkBufferDeviceAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
14188 (VkBufferDeviceAddressInfo*)(local_pInfo),
14189 streamPtrPtr);
14190 VkDeviceAddress vkGetBufferDeviceAddress_VkDeviceAddress_return = (VkDeviceAddress)0;
14191 stream->read(&vkGetBufferDeviceAddress_VkDeviceAddress_return, sizeof(VkDeviceAddress));
14192 ++encodeCount;
14193 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14194 pool->freeAll();
14195 stream->clearPool();
14196 }
14197 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14198 return vkGetBufferDeviceAddress_VkDeviceAddress_return;
14199 }
14200
vkGetBufferOpaqueCaptureAddress(VkDevice device,const VkBufferDeviceAddressInfo * pInfo,uint32_t doLock)14201 uint64_t VkEncoder::vkGetBufferOpaqueCaptureAddress(VkDevice device,
14202 const VkBufferDeviceAddressInfo* pInfo,
14203 uint32_t doLock) {
14204 (void)doLock;
14205 bool queueSubmitWithCommandsEnabled =
14206 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14207 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14208 auto stream = mImpl->stream();
14209 auto pool = mImpl->pool();
14210 VkDevice local_device;
14211 VkBufferDeviceAddressInfo* local_pInfo;
14212 local_device = device;
14213 local_pInfo = nullptr;
14214 if (pInfo) {
14215 local_pInfo =
14216 (VkBufferDeviceAddressInfo*)pool->alloc(sizeof(const VkBufferDeviceAddressInfo));
14217 deepcopy_VkBufferDeviceAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
14218 (VkBufferDeviceAddressInfo*)(local_pInfo));
14219 }
14220 if (local_pInfo) {
14221 transform_tohost_VkBufferDeviceAddressInfo(sResourceTracker,
14222 (VkBufferDeviceAddressInfo*)(local_pInfo));
14223 }
14224 size_t count = 0;
14225 size_t* countPtr = &count;
14226 {
14227 uint64_t cgen_var_0;
14228 *countPtr += 1 * 8;
14229 count_VkBufferDeviceAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
14230 (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
14231 }
14232 uint32_t packetSize_vkGetBufferOpaqueCaptureAddress =
14233 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
14234 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferOpaqueCaptureAddress);
14235 uint8_t* packetBeginPtr = streamPtr;
14236 uint8_t** streamPtrPtr = &streamPtr;
14237 uint32_t opcode_vkGetBufferOpaqueCaptureAddress = OP_vkGetBufferOpaqueCaptureAddress;
14238 uint32_t seqno;
14239 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
14240 memcpy(streamPtr, &opcode_vkGetBufferOpaqueCaptureAddress, sizeof(uint32_t));
14241 streamPtr += sizeof(uint32_t);
14242 memcpy(streamPtr, &packetSize_vkGetBufferOpaqueCaptureAddress, sizeof(uint32_t));
14243 streamPtr += sizeof(uint32_t);
14244 if (queueSubmitWithCommandsEnabled) {
14245 memcpy(streamPtr, &seqno, sizeof(uint32_t));
14246 streamPtr += sizeof(uint32_t);
14247 }
14248 uint64_t cgen_var_0;
14249 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
14250 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14251 *streamPtrPtr += 1 * 8;
14252 reservedmarshal_VkBufferDeviceAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
14253 (VkBufferDeviceAddressInfo*)(local_pInfo),
14254 streamPtrPtr);
14255 uint64_t vkGetBufferOpaqueCaptureAddress_uint64_t_return = (uint64_t)0;
14256 stream->read(&vkGetBufferOpaqueCaptureAddress_uint64_t_return, sizeof(uint64_t));
14257 ++encodeCount;
14258 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14259 pool->freeAll();
14260 stream->clearPool();
14261 }
14262 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14263 return vkGetBufferOpaqueCaptureAddress_uint64_t_return;
14264 }
14265
vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice device,const VkDeviceMemoryOpaqueCaptureAddressInfo * pInfo,uint32_t doLock)14266 uint64_t VkEncoder::vkGetDeviceMemoryOpaqueCaptureAddress(
14267 VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo, uint32_t doLock) {
14268 (void)doLock;
14269 bool queueSubmitWithCommandsEnabled =
14270 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14271 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14272 auto stream = mImpl->stream();
14273 auto pool = mImpl->pool();
14274 VkDevice local_device;
14275 VkDeviceMemoryOpaqueCaptureAddressInfo* local_pInfo;
14276 local_device = device;
14277 local_pInfo = nullptr;
14278 if (pInfo) {
14279 local_pInfo = (VkDeviceMemoryOpaqueCaptureAddressInfo*)pool->alloc(
14280 sizeof(const VkDeviceMemoryOpaqueCaptureAddressInfo));
14281 deepcopy_VkDeviceMemoryOpaqueCaptureAddressInfo(
14282 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
14283 (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo));
14284 }
14285 if (local_pInfo) {
14286 transform_tohost_VkDeviceMemoryOpaqueCaptureAddressInfo(
14287 sResourceTracker, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo));
14288 }
14289 size_t count = 0;
14290 size_t* countPtr = &count;
14291 {
14292 uint64_t cgen_var_0;
14293 *countPtr += 1 * 8;
14294 count_VkDeviceMemoryOpaqueCaptureAddressInfo(
14295 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
14296 (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo), countPtr);
14297 }
14298 uint32_t packetSize_vkGetDeviceMemoryOpaqueCaptureAddress =
14299 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
14300 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceMemoryOpaqueCaptureAddress);
14301 uint8_t* packetBeginPtr = streamPtr;
14302 uint8_t** streamPtrPtr = &streamPtr;
14303 uint32_t opcode_vkGetDeviceMemoryOpaqueCaptureAddress =
14304 OP_vkGetDeviceMemoryOpaqueCaptureAddress;
14305 uint32_t seqno;
14306 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
14307 memcpy(streamPtr, &opcode_vkGetDeviceMemoryOpaqueCaptureAddress, sizeof(uint32_t));
14308 streamPtr += sizeof(uint32_t);
14309 memcpy(streamPtr, &packetSize_vkGetDeviceMemoryOpaqueCaptureAddress, sizeof(uint32_t));
14310 streamPtr += sizeof(uint32_t);
14311 if (queueSubmitWithCommandsEnabled) {
14312 memcpy(streamPtr, &seqno, sizeof(uint32_t));
14313 streamPtr += sizeof(uint32_t);
14314 }
14315 uint64_t cgen_var_0;
14316 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
14317 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14318 *streamPtrPtr += 1 * 8;
14319 reservedmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(
14320 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo),
14321 streamPtrPtr);
14322 uint64_t vkGetDeviceMemoryOpaqueCaptureAddress_uint64_t_return = (uint64_t)0;
14323 stream->read(&vkGetDeviceMemoryOpaqueCaptureAddress_uint64_t_return, sizeof(uint64_t));
14324 ++encodeCount;
14325 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14326 pool->freeAll();
14327 stream->clearPool();
14328 }
14329 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14330 return vkGetDeviceMemoryOpaqueCaptureAddress_uint64_t_return;
14331 }
14332
14333 #endif
14334 #ifdef VK_VERSION_1_3
vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice,uint32_t * pToolCount,VkPhysicalDeviceToolProperties * pToolProperties,uint32_t doLock)14335 VkResult VkEncoder::vkGetPhysicalDeviceToolProperties(
14336 VkPhysicalDevice physicalDevice, uint32_t* pToolCount,
14337 VkPhysicalDeviceToolProperties* pToolProperties, uint32_t doLock) {
14338 (void)doLock;
14339 bool queueSubmitWithCommandsEnabled =
14340 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14341 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14342 auto stream = mImpl->stream();
14343 auto pool = mImpl->pool();
14344 VkPhysicalDevice local_physicalDevice;
14345 local_physicalDevice = physicalDevice;
14346 size_t count = 0;
14347 size_t* countPtr = &count;
14348 {
14349 uint64_t cgen_var_0;
14350 *countPtr += 1 * 8;
14351 // WARNING PTR CHECK
14352 *countPtr += 8;
14353 if (pToolCount) {
14354 *countPtr += sizeof(uint32_t);
14355 }
14356 // WARNING PTR CHECK
14357 *countPtr += 8;
14358 if (pToolProperties) {
14359 if (pToolCount) {
14360 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
14361 count_VkPhysicalDeviceToolProperties(
14362 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
14363 (VkPhysicalDeviceToolProperties*)(pToolProperties + i), countPtr);
14364 }
14365 }
14366 }
14367 }
14368 uint32_t packetSize_vkGetPhysicalDeviceToolProperties =
14369 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
14370 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceToolProperties);
14371 uint8_t* packetBeginPtr = streamPtr;
14372 uint8_t** streamPtrPtr = &streamPtr;
14373 uint32_t opcode_vkGetPhysicalDeviceToolProperties = OP_vkGetPhysicalDeviceToolProperties;
14374 uint32_t seqno;
14375 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
14376 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceToolProperties, sizeof(uint32_t));
14377 streamPtr += sizeof(uint32_t);
14378 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceToolProperties, sizeof(uint32_t));
14379 streamPtr += sizeof(uint32_t);
14380 if (queueSubmitWithCommandsEnabled) {
14381 memcpy(streamPtr, &seqno, sizeof(uint32_t));
14382 streamPtr += sizeof(uint32_t);
14383 }
14384 uint64_t cgen_var_0;
14385 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
14386 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14387 *streamPtrPtr += 1 * 8;
14388 // WARNING PTR CHECK
14389 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pToolCount;
14390 memcpy((*streamPtrPtr), &cgen_var_1, 8);
14391 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
14392 *streamPtrPtr += 8;
14393 if (pToolCount) {
14394 memcpy(*streamPtrPtr, (uint32_t*)pToolCount, sizeof(uint32_t));
14395 *streamPtrPtr += sizeof(uint32_t);
14396 }
14397 // WARNING PTR CHECK
14398 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pToolProperties;
14399 memcpy((*streamPtrPtr), &cgen_var_2, 8);
14400 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
14401 *streamPtrPtr += 8;
14402 if (pToolProperties) {
14403 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
14404 reservedmarshal_VkPhysicalDeviceToolProperties(
14405 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
14406 (VkPhysicalDeviceToolProperties*)(pToolProperties + i), streamPtrPtr);
14407 }
14408 }
14409 // WARNING PTR CHECK
14410 uint32_t* check_pToolCount;
14411 check_pToolCount = (uint32_t*)(uintptr_t)stream->getBe64();
14412 if (pToolCount) {
14413 if (!(check_pToolCount)) {
14414 fprintf(stderr, "fatal: pToolCount inconsistent between guest and host\n");
14415 }
14416 stream->read((uint32_t*)pToolCount, sizeof(uint32_t));
14417 }
14418 // WARNING PTR CHECK
14419 VkPhysicalDeviceToolProperties* check_pToolProperties;
14420 check_pToolProperties = (VkPhysicalDeviceToolProperties*)(uintptr_t)stream->getBe64();
14421 if (pToolProperties) {
14422 if (!(check_pToolProperties)) {
14423 fprintf(stderr, "fatal: pToolProperties inconsistent between guest and host\n");
14424 }
14425 if (pToolCount) {
14426 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
14427 unmarshal_VkPhysicalDeviceToolProperties(
14428 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
14429 (VkPhysicalDeviceToolProperties*)(pToolProperties + i));
14430 }
14431 }
14432 }
14433 if (pToolCount) {
14434 if (pToolProperties) {
14435 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
14436 transform_fromhost_VkPhysicalDeviceToolProperties(
14437 sResourceTracker, (VkPhysicalDeviceToolProperties*)(pToolProperties + i));
14438 }
14439 }
14440 }
14441 VkResult vkGetPhysicalDeviceToolProperties_VkResult_return = (VkResult)0;
14442 stream->read(&vkGetPhysicalDeviceToolProperties_VkResult_return, sizeof(VkResult));
14443 ++encodeCount;
14444 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14445 pool->freeAll();
14446 stream->clearPool();
14447 }
14448 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14449 return vkGetPhysicalDeviceToolProperties_VkResult_return;
14450 }
14451
vkCreatePrivateDataSlot(VkDevice device,const VkPrivateDataSlotCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPrivateDataSlot * pPrivateDataSlot,uint32_t doLock)14452 VkResult VkEncoder::vkCreatePrivateDataSlot(VkDevice device,
14453 const VkPrivateDataSlotCreateInfo* pCreateInfo,
14454 const VkAllocationCallbacks* pAllocator,
14455 VkPrivateDataSlot* pPrivateDataSlot, uint32_t doLock) {
14456 (void)doLock;
14457 bool queueSubmitWithCommandsEnabled =
14458 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14459 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14460 auto stream = mImpl->stream();
14461 auto pool = mImpl->pool();
14462 VkDevice local_device;
14463 VkPrivateDataSlotCreateInfo* local_pCreateInfo;
14464 VkAllocationCallbacks* local_pAllocator;
14465 local_device = device;
14466 local_pCreateInfo = nullptr;
14467 if (pCreateInfo) {
14468 local_pCreateInfo =
14469 (VkPrivateDataSlotCreateInfo*)pool->alloc(sizeof(const VkPrivateDataSlotCreateInfo));
14470 deepcopy_VkPrivateDataSlotCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
14471 (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo));
14472 }
14473 local_pAllocator = nullptr;
14474 if (pAllocator) {
14475 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
14476 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
14477 (VkAllocationCallbacks*)(local_pAllocator));
14478 }
14479 local_pAllocator = nullptr;
14480 if (local_pCreateInfo) {
14481 transform_tohost_VkPrivateDataSlotCreateInfo(
14482 sResourceTracker, (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo));
14483 }
14484 if (local_pAllocator) {
14485 transform_tohost_VkAllocationCallbacks(sResourceTracker,
14486 (VkAllocationCallbacks*)(local_pAllocator));
14487 }
14488 size_t count = 0;
14489 size_t* countPtr = &count;
14490 {
14491 uint64_t cgen_var_0;
14492 *countPtr += 1 * 8;
14493 count_VkPrivateDataSlotCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
14494 (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo),
14495 countPtr);
14496 // WARNING PTR CHECK
14497 *countPtr += 8;
14498 if (local_pAllocator) {
14499 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
14500 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
14501 }
14502 uint64_t cgen_var_1;
14503 *countPtr += 8;
14504 }
14505 uint32_t packetSize_vkCreatePrivateDataSlot =
14506 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
14507 uint8_t* streamPtr = stream->reserve(packetSize_vkCreatePrivateDataSlot);
14508 uint8_t* packetBeginPtr = streamPtr;
14509 uint8_t** streamPtrPtr = &streamPtr;
14510 uint32_t opcode_vkCreatePrivateDataSlot = OP_vkCreatePrivateDataSlot;
14511 uint32_t seqno;
14512 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
14513 memcpy(streamPtr, &opcode_vkCreatePrivateDataSlot, sizeof(uint32_t));
14514 streamPtr += sizeof(uint32_t);
14515 memcpy(streamPtr, &packetSize_vkCreatePrivateDataSlot, sizeof(uint32_t));
14516 streamPtr += sizeof(uint32_t);
14517 if (queueSubmitWithCommandsEnabled) {
14518 memcpy(streamPtr, &seqno, sizeof(uint32_t));
14519 streamPtr += sizeof(uint32_t);
14520 }
14521 uint64_t cgen_var_0;
14522 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
14523 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14524 *streamPtrPtr += 1 * 8;
14525 reservedmarshal_VkPrivateDataSlotCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
14526 (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo),
14527 streamPtrPtr);
14528 // WARNING PTR CHECK
14529 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
14530 memcpy((*streamPtrPtr), &cgen_var_1, 8);
14531 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
14532 *streamPtrPtr += 8;
14533 if (local_pAllocator) {
14534 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
14535 (VkAllocationCallbacks*)(local_pAllocator),
14536 streamPtrPtr);
14537 }
14538 /* is handle, possibly out */;
14539 uint64_t cgen_var_2;
14540 *&cgen_var_2 = (uint64_t)((*pPrivateDataSlot));
14541 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
14542 *streamPtrPtr += 8;
14543 /* is handle, possibly out */;
14544 stream->setHandleMapping(sResourceTracker->createMapping());
14545 uint64_t cgen_var_3;
14546 stream->read((uint64_t*)&cgen_var_3, 8);
14547 stream->handleMapping()->mapHandles_u64_VkPrivateDataSlot(
14548 &cgen_var_3, (VkPrivateDataSlot*)pPrivateDataSlot, 1);
14549 stream->unsetHandleMapping();
14550 VkResult vkCreatePrivateDataSlot_VkResult_return = (VkResult)0;
14551 stream->read(&vkCreatePrivateDataSlot_VkResult_return, sizeof(VkResult));
14552 ++encodeCount;
14553 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14554 pool->freeAll();
14555 stream->clearPool();
14556 }
14557 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14558 return vkCreatePrivateDataSlot_VkResult_return;
14559 }
14560
vkDestroyPrivateDataSlot(VkDevice device,VkPrivateDataSlot privateDataSlot,const VkAllocationCallbacks * pAllocator,uint32_t doLock)14561 void VkEncoder::vkDestroyPrivateDataSlot(VkDevice device, VkPrivateDataSlot privateDataSlot,
14562 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
14563 (void)doLock;
14564 bool queueSubmitWithCommandsEnabled =
14565 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14566 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14567 auto stream = mImpl->stream();
14568 auto pool = mImpl->pool();
14569 VkDevice local_device;
14570 VkPrivateDataSlot local_privateDataSlot;
14571 VkAllocationCallbacks* local_pAllocator;
14572 local_device = device;
14573 local_privateDataSlot = privateDataSlot;
14574 local_pAllocator = nullptr;
14575 if (pAllocator) {
14576 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
14577 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
14578 (VkAllocationCallbacks*)(local_pAllocator));
14579 }
14580 local_pAllocator = nullptr;
14581 if (local_pAllocator) {
14582 transform_tohost_VkAllocationCallbacks(sResourceTracker,
14583 (VkAllocationCallbacks*)(local_pAllocator));
14584 }
14585 size_t count = 0;
14586 size_t* countPtr = &count;
14587 {
14588 uint64_t cgen_var_0;
14589 *countPtr += 1 * 8;
14590 uint64_t cgen_var_1;
14591 *countPtr += 1 * 8;
14592 // WARNING PTR CHECK
14593 *countPtr += 8;
14594 if (local_pAllocator) {
14595 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
14596 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
14597 }
14598 }
14599 uint32_t packetSize_vkDestroyPrivateDataSlot =
14600 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
14601 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyPrivateDataSlot);
14602 uint8_t* packetBeginPtr = streamPtr;
14603 uint8_t** streamPtrPtr = &streamPtr;
14604 uint32_t opcode_vkDestroyPrivateDataSlot = OP_vkDestroyPrivateDataSlot;
14605 uint32_t seqno;
14606 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
14607 memcpy(streamPtr, &opcode_vkDestroyPrivateDataSlot, sizeof(uint32_t));
14608 streamPtr += sizeof(uint32_t);
14609 memcpy(streamPtr, &packetSize_vkDestroyPrivateDataSlot, sizeof(uint32_t));
14610 streamPtr += sizeof(uint32_t);
14611 if (queueSubmitWithCommandsEnabled) {
14612 memcpy(streamPtr, &seqno, sizeof(uint32_t));
14613 streamPtr += sizeof(uint32_t);
14614 }
14615 uint64_t cgen_var_0;
14616 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
14617 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14618 *streamPtrPtr += 1 * 8;
14619 uint64_t cgen_var_1;
14620 *&cgen_var_1 = get_host_u64_VkPrivateDataSlot((*&local_privateDataSlot));
14621 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
14622 *streamPtrPtr += 1 * 8;
14623 // WARNING PTR CHECK
14624 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
14625 memcpy((*streamPtrPtr), &cgen_var_2, 8);
14626 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
14627 *streamPtrPtr += 8;
14628 if (local_pAllocator) {
14629 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
14630 (VkAllocationCallbacks*)(local_pAllocator),
14631 streamPtrPtr);
14632 }
14633 sResourceTracker->destroyMapping()->mapHandles_VkPrivateDataSlot(
14634 (VkPrivateDataSlot*)&privateDataSlot);
14635 stream->flush();
14636 ++encodeCount;
14637 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14638 pool->freeAll();
14639 stream->clearPool();
14640 }
14641 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14642 }
14643
vkSetPrivateData(VkDevice device,VkObjectType objectType,uint64_t objectHandle,VkPrivateDataSlot privateDataSlot,uint64_t data,uint32_t doLock)14644 VkResult VkEncoder::vkSetPrivateData(VkDevice device, VkObjectType objectType,
14645 uint64_t objectHandle, VkPrivateDataSlot privateDataSlot,
14646 uint64_t data, uint32_t doLock) {
14647 (void)doLock;
14648 bool queueSubmitWithCommandsEnabled =
14649 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14650 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14651 auto stream = mImpl->stream();
14652 auto pool = mImpl->pool();
14653 VkDevice local_device;
14654 VkObjectType local_objectType;
14655 uint64_t local_objectHandle;
14656 VkPrivateDataSlot local_privateDataSlot;
14657 uint64_t local_data;
14658 local_device = device;
14659 local_objectType = objectType;
14660 local_objectHandle = objectHandle;
14661 local_privateDataSlot = privateDataSlot;
14662 local_data = data;
14663 size_t count = 0;
14664 size_t* countPtr = &count;
14665 {
14666 uint64_t cgen_var_0;
14667 *countPtr += 1 * 8;
14668 *countPtr += sizeof(VkObjectType);
14669 *countPtr += sizeof(uint64_t);
14670 uint64_t cgen_var_1;
14671 *countPtr += 1 * 8;
14672 *countPtr += sizeof(uint64_t);
14673 }
14674 uint32_t packetSize_vkSetPrivateData = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
14675 uint8_t* streamPtr = stream->reserve(packetSize_vkSetPrivateData);
14676 uint8_t* packetBeginPtr = streamPtr;
14677 uint8_t** streamPtrPtr = &streamPtr;
14678 uint32_t opcode_vkSetPrivateData = OP_vkSetPrivateData;
14679 uint32_t seqno;
14680 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
14681 memcpy(streamPtr, &opcode_vkSetPrivateData, sizeof(uint32_t));
14682 streamPtr += sizeof(uint32_t);
14683 memcpy(streamPtr, &packetSize_vkSetPrivateData, sizeof(uint32_t));
14684 streamPtr += sizeof(uint32_t);
14685 if (queueSubmitWithCommandsEnabled) {
14686 memcpy(streamPtr, &seqno, sizeof(uint32_t));
14687 streamPtr += sizeof(uint32_t);
14688 }
14689 uint64_t cgen_var_0;
14690 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
14691 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14692 *streamPtrPtr += 1 * 8;
14693 memcpy(*streamPtrPtr, (VkObjectType*)&local_objectType, sizeof(VkObjectType));
14694 *streamPtrPtr += sizeof(VkObjectType);
14695 memcpy(*streamPtrPtr, (uint64_t*)&local_objectHandle, sizeof(uint64_t));
14696 *streamPtrPtr += sizeof(uint64_t);
14697 uint64_t cgen_var_1;
14698 *&cgen_var_1 = get_host_u64_VkPrivateDataSlot((*&local_privateDataSlot));
14699 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
14700 *streamPtrPtr += 1 * 8;
14701 memcpy(*streamPtrPtr, (uint64_t*)&local_data, sizeof(uint64_t));
14702 *streamPtrPtr += sizeof(uint64_t);
14703 VkResult vkSetPrivateData_VkResult_return = (VkResult)0;
14704 stream->read(&vkSetPrivateData_VkResult_return, sizeof(VkResult));
14705 ++encodeCount;
14706 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14707 pool->freeAll();
14708 stream->clearPool();
14709 }
14710 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14711 return vkSetPrivateData_VkResult_return;
14712 }
14713
vkGetPrivateData(VkDevice device,VkObjectType objectType,uint64_t objectHandle,VkPrivateDataSlot privateDataSlot,uint64_t * pData,uint32_t doLock)14714 void VkEncoder::vkGetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle,
14715 VkPrivateDataSlot privateDataSlot, uint64_t* pData,
14716 uint32_t doLock) {
14717 (void)doLock;
14718 bool queueSubmitWithCommandsEnabled =
14719 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14720 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14721 auto stream = mImpl->stream();
14722 auto pool = mImpl->pool();
14723 VkDevice local_device;
14724 VkObjectType local_objectType;
14725 uint64_t local_objectHandle;
14726 VkPrivateDataSlot local_privateDataSlot;
14727 local_device = device;
14728 local_objectType = objectType;
14729 local_objectHandle = objectHandle;
14730 local_privateDataSlot = privateDataSlot;
14731 size_t count = 0;
14732 size_t* countPtr = &count;
14733 {
14734 uint64_t cgen_var_0;
14735 *countPtr += 1 * 8;
14736 *countPtr += sizeof(VkObjectType);
14737 *countPtr += sizeof(uint64_t);
14738 uint64_t cgen_var_1;
14739 *countPtr += 1 * 8;
14740 *countPtr += sizeof(uint64_t);
14741 }
14742 uint32_t packetSize_vkGetPrivateData = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
14743 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPrivateData);
14744 uint8_t* packetBeginPtr = streamPtr;
14745 uint8_t** streamPtrPtr = &streamPtr;
14746 uint32_t opcode_vkGetPrivateData = OP_vkGetPrivateData;
14747 uint32_t seqno;
14748 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
14749 memcpy(streamPtr, &opcode_vkGetPrivateData, sizeof(uint32_t));
14750 streamPtr += sizeof(uint32_t);
14751 memcpy(streamPtr, &packetSize_vkGetPrivateData, sizeof(uint32_t));
14752 streamPtr += sizeof(uint32_t);
14753 if (queueSubmitWithCommandsEnabled) {
14754 memcpy(streamPtr, &seqno, sizeof(uint32_t));
14755 streamPtr += sizeof(uint32_t);
14756 }
14757 uint64_t cgen_var_0;
14758 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
14759 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14760 *streamPtrPtr += 1 * 8;
14761 memcpy(*streamPtrPtr, (VkObjectType*)&local_objectType, sizeof(VkObjectType));
14762 *streamPtrPtr += sizeof(VkObjectType);
14763 memcpy(*streamPtrPtr, (uint64_t*)&local_objectHandle, sizeof(uint64_t));
14764 *streamPtrPtr += sizeof(uint64_t);
14765 uint64_t cgen_var_1;
14766 *&cgen_var_1 = get_host_u64_VkPrivateDataSlot((*&local_privateDataSlot));
14767 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
14768 *streamPtrPtr += 1 * 8;
14769 memcpy(*streamPtrPtr, (uint64_t*)pData, sizeof(uint64_t));
14770 *streamPtrPtr += sizeof(uint64_t);
14771 stream->read((uint64_t*)pData, sizeof(uint64_t));
14772 ++encodeCount;
14773 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14774 pool->freeAll();
14775 stream->clearPool();
14776 }
14777 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14778 }
14779
vkCmdSetEvent2(VkCommandBuffer commandBuffer,VkEvent event,const VkDependencyInfo * pDependencyInfo,uint32_t doLock)14780 void VkEncoder::vkCmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent event,
14781 const VkDependencyInfo* pDependencyInfo, uint32_t doLock) {
14782 (void)doLock;
14783 bool queueSubmitWithCommandsEnabled =
14784 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14785 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14786 auto stream = mImpl->stream();
14787 auto pool = mImpl->pool();
14788 VkCommandBuffer local_commandBuffer;
14789 VkEvent local_event;
14790 VkDependencyInfo* local_pDependencyInfo;
14791 local_commandBuffer = commandBuffer;
14792 local_event = event;
14793 local_pDependencyInfo = nullptr;
14794 if (pDependencyInfo) {
14795 local_pDependencyInfo = (VkDependencyInfo*)pool->alloc(sizeof(const VkDependencyInfo));
14796 deepcopy_VkDependencyInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDependencyInfo,
14797 (VkDependencyInfo*)(local_pDependencyInfo));
14798 }
14799 if (local_pDependencyInfo) {
14800 transform_tohost_VkDependencyInfo(sResourceTracker,
14801 (VkDependencyInfo*)(local_pDependencyInfo));
14802 }
14803 size_t count = 0;
14804 size_t* countPtr = &count;
14805 {
14806 uint64_t cgen_var_0;
14807 *countPtr += 1 * 8;
14808 uint64_t cgen_var_1;
14809 *countPtr += 1 * 8;
14810 count_VkDependencyInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
14811 (VkDependencyInfo*)(local_pDependencyInfo), countPtr);
14812 }
14813 uint32_t packetSize_vkCmdSetEvent2 = 4 + 4 + count;
14814 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetEvent2 -= 8;
14815 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetEvent2);
14816 uint8_t* packetBeginPtr = streamPtr;
14817 uint8_t** streamPtrPtr = &streamPtr;
14818 uint32_t opcode_vkCmdSetEvent2 = OP_vkCmdSetEvent2;
14819 memcpy(streamPtr, &opcode_vkCmdSetEvent2, sizeof(uint32_t));
14820 streamPtr += sizeof(uint32_t);
14821 memcpy(streamPtr, &packetSize_vkCmdSetEvent2, sizeof(uint32_t));
14822 streamPtr += sizeof(uint32_t);
14823 if (!queueSubmitWithCommandsEnabled) {
14824 uint64_t cgen_var_0;
14825 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
14826 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14827 *streamPtrPtr += 1 * 8;
14828 }
14829 uint64_t cgen_var_0;
14830 *&cgen_var_0 = get_host_u64_VkEvent((*&local_event));
14831 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14832 *streamPtrPtr += 1 * 8;
14833 reservedmarshal_VkDependencyInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
14834 (VkDependencyInfo*)(local_pDependencyInfo), streamPtrPtr);
14835 ++encodeCount;
14836 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14837 pool->freeAll();
14838 stream->clearPool();
14839 }
14840 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14841 }
14842
vkCmdResetEvent2(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags2 stageMask,uint32_t doLock)14843 void VkEncoder::vkCmdResetEvent2(VkCommandBuffer commandBuffer, VkEvent event,
14844 VkPipelineStageFlags2 stageMask, uint32_t doLock) {
14845 (void)doLock;
14846 bool queueSubmitWithCommandsEnabled =
14847 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14848 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14849 auto stream = mImpl->stream();
14850 auto pool = mImpl->pool();
14851 VkCommandBuffer local_commandBuffer;
14852 VkEvent local_event;
14853 VkPipelineStageFlags2 local_stageMask;
14854 local_commandBuffer = commandBuffer;
14855 local_event = event;
14856 local_stageMask = stageMask;
14857 size_t count = 0;
14858 size_t* countPtr = &count;
14859 {
14860 uint64_t cgen_var_0;
14861 *countPtr += 1 * 8;
14862 uint64_t cgen_var_1;
14863 *countPtr += 1 * 8;
14864 *countPtr += sizeof(VkPipelineStageFlags2);
14865 }
14866 uint32_t packetSize_vkCmdResetEvent2 = 4 + 4 + count;
14867 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdResetEvent2 -= 8;
14868 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdResetEvent2);
14869 uint8_t* packetBeginPtr = streamPtr;
14870 uint8_t** streamPtrPtr = &streamPtr;
14871 uint32_t opcode_vkCmdResetEvent2 = OP_vkCmdResetEvent2;
14872 memcpy(streamPtr, &opcode_vkCmdResetEvent2, sizeof(uint32_t));
14873 streamPtr += sizeof(uint32_t);
14874 memcpy(streamPtr, &packetSize_vkCmdResetEvent2, sizeof(uint32_t));
14875 streamPtr += sizeof(uint32_t);
14876 if (!queueSubmitWithCommandsEnabled) {
14877 uint64_t cgen_var_0;
14878 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
14879 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14880 *streamPtrPtr += 1 * 8;
14881 }
14882 uint64_t cgen_var_0;
14883 *&cgen_var_0 = get_host_u64_VkEvent((*&local_event));
14884 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14885 *streamPtrPtr += 1 * 8;
14886 memcpy(*streamPtrPtr, (VkPipelineStageFlags2*)&local_stageMask, sizeof(VkPipelineStageFlags2));
14887 *streamPtrPtr += sizeof(VkPipelineStageFlags2);
14888 ++encodeCount;
14889 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14890 pool->freeAll();
14891 stream->clearPool();
14892 }
14893 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14894 }
14895
vkCmdWaitEvents2(VkCommandBuffer commandBuffer,uint32_t eventCount,const VkEvent * pEvents,const VkDependencyInfo * pDependencyInfos,uint32_t doLock)14896 void VkEncoder::vkCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount,
14897 const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos,
14898 uint32_t doLock) {
14899 (void)doLock;
14900 bool queueSubmitWithCommandsEnabled =
14901 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14902 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14903 auto stream = mImpl->stream();
14904 auto pool = mImpl->pool();
14905 VkCommandBuffer local_commandBuffer;
14906 uint32_t local_eventCount;
14907 VkEvent* local_pEvents;
14908 VkDependencyInfo* local_pDependencyInfos;
14909 local_commandBuffer = commandBuffer;
14910 local_eventCount = eventCount;
14911 // Avoiding deepcopy for pEvents
14912 local_pEvents = (VkEvent*)pEvents;
14913 local_pDependencyInfos = nullptr;
14914 if (pDependencyInfos) {
14915 local_pDependencyInfos =
14916 (VkDependencyInfo*)pool->alloc(((eventCount)) * sizeof(const VkDependencyInfo));
14917 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
14918 deepcopy_VkDependencyInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDependencyInfos + i,
14919 (VkDependencyInfo*)(local_pDependencyInfos + i));
14920 }
14921 }
14922 if (local_pDependencyInfos) {
14923 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
14924 transform_tohost_VkDependencyInfo(sResourceTracker,
14925 (VkDependencyInfo*)(local_pDependencyInfos + i));
14926 }
14927 }
14928 size_t count = 0;
14929 size_t* countPtr = &count;
14930 {
14931 uint64_t cgen_var_0;
14932 *countPtr += 1 * 8;
14933 *countPtr += sizeof(uint32_t);
14934 if (((eventCount))) {
14935 *countPtr += ((eventCount)) * 8;
14936 }
14937 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
14938 count_VkDependencyInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
14939 (VkDependencyInfo*)(local_pDependencyInfos + i), countPtr);
14940 }
14941 }
14942 uint32_t packetSize_vkCmdWaitEvents2 = 4 + 4 + count;
14943 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdWaitEvents2 -= 8;
14944 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdWaitEvents2);
14945 uint8_t* packetBeginPtr = streamPtr;
14946 uint8_t** streamPtrPtr = &streamPtr;
14947 uint32_t opcode_vkCmdWaitEvents2 = OP_vkCmdWaitEvents2;
14948 memcpy(streamPtr, &opcode_vkCmdWaitEvents2, sizeof(uint32_t));
14949 streamPtr += sizeof(uint32_t);
14950 memcpy(streamPtr, &packetSize_vkCmdWaitEvents2, sizeof(uint32_t));
14951 streamPtr += sizeof(uint32_t);
14952 if (!queueSubmitWithCommandsEnabled) {
14953 uint64_t cgen_var_0;
14954 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
14955 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
14956 *streamPtrPtr += 1 * 8;
14957 }
14958 memcpy(*streamPtrPtr, (uint32_t*)&local_eventCount, sizeof(uint32_t));
14959 *streamPtrPtr += sizeof(uint32_t);
14960 if (((eventCount))) {
14961 uint8_t* cgen_var_0_ptr = (uint8_t*)(*streamPtrPtr);
14962 for (uint32_t k = 0; k < ((eventCount)); ++k) {
14963 uint64_t tmpval = get_host_u64_VkEvent(local_pEvents[k]);
14964 memcpy(cgen_var_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
14965 }
14966 *streamPtrPtr += 8 * ((eventCount));
14967 }
14968 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
14969 reservedmarshal_VkDependencyInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
14970 (VkDependencyInfo*)(local_pDependencyInfos + i),
14971 streamPtrPtr);
14972 }
14973 ++encodeCount;
14974 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
14975 pool->freeAll();
14976 stream->clearPool();
14977 }
14978 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
14979 }
14980
vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer,const VkDependencyInfo * pDependencyInfo,uint32_t doLock)14981 void VkEncoder::vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer,
14982 const VkDependencyInfo* pDependencyInfo, uint32_t doLock) {
14983 (void)doLock;
14984 bool queueSubmitWithCommandsEnabled =
14985 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
14986 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
14987 auto stream = mImpl->stream();
14988 auto pool = mImpl->pool();
14989 VkCommandBuffer local_commandBuffer;
14990 VkDependencyInfo* local_pDependencyInfo;
14991 local_commandBuffer = commandBuffer;
14992 local_pDependencyInfo = nullptr;
14993 if (pDependencyInfo) {
14994 local_pDependencyInfo = (VkDependencyInfo*)pool->alloc(sizeof(const VkDependencyInfo));
14995 deepcopy_VkDependencyInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDependencyInfo,
14996 (VkDependencyInfo*)(local_pDependencyInfo));
14997 }
14998 if (local_pDependencyInfo) {
14999 transform_tohost_VkDependencyInfo(sResourceTracker,
15000 (VkDependencyInfo*)(local_pDependencyInfo));
15001 }
15002 size_t count = 0;
15003 size_t* countPtr = &count;
15004 {
15005 uint64_t cgen_var_0;
15006 *countPtr += 1 * 8;
15007 count_VkDependencyInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
15008 (VkDependencyInfo*)(local_pDependencyInfo), countPtr);
15009 }
15010 uint32_t packetSize_vkCmdPipelineBarrier2 = 4 + 4 + count;
15011 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdPipelineBarrier2 -= 8;
15012 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdPipelineBarrier2);
15013 uint8_t* packetBeginPtr = streamPtr;
15014 uint8_t** streamPtrPtr = &streamPtr;
15015 uint32_t opcode_vkCmdPipelineBarrier2 = OP_vkCmdPipelineBarrier2;
15016 memcpy(streamPtr, &opcode_vkCmdPipelineBarrier2, sizeof(uint32_t));
15017 streamPtr += sizeof(uint32_t);
15018 memcpy(streamPtr, &packetSize_vkCmdPipelineBarrier2, sizeof(uint32_t));
15019 streamPtr += sizeof(uint32_t);
15020 if (!queueSubmitWithCommandsEnabled) {
15021 uint64_t cgen_var_0;
15022 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15023 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15024 *streamPtrPtr += 1 * 8;
15025 }
15026 reservedmarshal_VkDependencyInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
15027 (VkDependencyInfo*)(local_pDependencyInfo), streamPtrPtr);
15028 ++encodeCount;
15029 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15030 pool->freeAll();
15031 stream->clearPool();
15032 }
15033 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15034 }
15035
vkCmdWriteTimestamp2(VkCommandBuffer commandBuffer,VkPipelineStageFlags2 stage,VkQueryPool queryPool,uint32_t query,uint32_t doLock)15036 void VkEncoder::vkCmdWriteTimestamp2(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage,
15037 VkQueryPool queryPool, uint32_t query, uint32_t doLock) {
15038 (void)doLock;
15039 bool queueSubmitWithCommandsEnabled =
15040 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15041 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15042 auto stream = mImpl->stream();
15043 auto pool = mImpl->pool();
15044 VkCommandBuffer local_commandBuffer;
15045 VkPipelineStageFlags2 local_stage;
15046 VkQueryPool local_queryPool;
15047 uint32_t local_query;
15048 local_commandBuffer = commandBuffer;
15049 local_stage = stage;
15050 local_queryPool = queryPool;
15051 local_query = query;
15052 size_t count = 0;
15053 size_t* countPtr = &count;
15054 {
15055 uint64_t cgen_var_0;
15056 *countPtr += 1 * 8;
15057 *countPtr += sizeof(VkPipelineStageFlags2);
15058 uint64_t cgen_var_1;
15059 *countPtr += 1 * 8;
15060 *countPtr += sizeof(uint32_t);
15061 }
15062 uint32_t packetSize_vkCmdWriteTimestamp2 = 4 + 4 + count;
15063 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdWriteTimestamp2 -= 8;
15064 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdWriteTimestamp2);
15065 uint8_t* packetBeginPtr = streamPtr;
15066 uint8_t** streamPtrPtr = &streamPtr;
15067 uint32_t opcode_vkCmdWriteTimestamp2 = OP_vkCmdWriteTimestamp2;
15068 memcpy(streamPtr, &opcode_vkCmdWriteTimestamp2, sizeof(uint32_t));
15069 streamPtr += sizeof(uint32_t);
15070 memcpy(streamPtr, &packetSize_vkCmdWriteTimestamp2, sizeof(uint32_t));
15071 streamPtr += sizeof(uint32_t);
15072 if (!queueSubmitWithCommandsEnabled) {
15073 uint64_t cgen_var_0;
15074 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15075 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15076 *streamPtrPtr += 1 * 8;
15077 }
15078 memcpy(*streamPtrPtr, (VkPipelineStageFlags2*)&local_stage, sizeof(VkPipelineStageFlags2));
15079 *streamPtrPtr += sizeof(VkPipelineStageFlags2);
15080 uint64_t cgen_var_0;
15081 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
15082 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15083 *streamPtrPtr += 1 * 8;
15084 memcpy(*streamPtrPtr, (uint32_t*)&local_query, sizeof(uint32_t));
15085 *streamPtrPtr += sizeof(uint32_t);
15086 ++encodeCount;
15087 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15088 pool->freeAll();
15089 stream->clearPool();
15090 }
15091 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15092 }
15093
vkQueueSubmit2(VkQueue queue,uint32_t submitCount,const VkSubmitInfo2 * pSubmits,VkFence fence,uint32_t doLock)15094 VkResult VkEncoder::vkQueueSubmit2(VkQueue queue, uint32_t submitCount,
15095 const VkSubmitInfo2* pSubmits, VkFence fence, uint32_t doLock) {
15096 (void)doLock;
15097 bool queueSubmitWithCommandsEnabled =
15098 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15099 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15100 auto stream = mImpl->stream();
15101 auto pool = mImpl->pool();
15102 VkQueue local_queue;
15103 uint32_t local_submitCount;
15104 VkSubmitInfo2* local_pSubmits;
15105 VkFence local_fence;
15106 local_queue = queue;
15107 local_submitCount = submitCount;
15108 local_pSubmits = nullptr;
15109 if (pSubmits) {
15110 local_pSubmits = (VkSubmitInfo2*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo2));
15111 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
15112 deepcopy_VkSubmitInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubmits + i,
15113 (VkSubmitInfo2*)(local_pSubmits + i));
15114 }
15115 }
15116 local_fence = fence;
15117 if (local_pSubmits) {
15118 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
15119 transform_tohost_VkSubmitInfo2(sResourceTracker, (VkSubmitInfo2*)(local_pSubmits + i));
15120 }
15121 }
15122 size_t count = 0;
15123 size_t* countPtr = &count;
15124 {
15125 uint64_t cgen_var_0;
15126 *countPtr += 1 * 8;
15127 *countPtr += sizeof(uint32_t);
15128 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
15129 count_VkSubmitInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
15130 (VkSubmitInfo2*)(local_pSubmits + i), countPtr);
15131 }
15132 uint64_t cgen_var_1;
15133 *countPtr += 1 * 8;
15134 }
15135 uint32_t packetSize_vkQueueSubmit2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
15136 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSubmit2);
15137 uint8_t* packetBeginPtr = streamPtr;
15138 uint8_t** streamPtrPtr = &streamPtr;
15139 uint32_t opcode_vkQueueSubmit2 = OP_vkQueueSubmit2;
15140 uint32_t seqno;
15141 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
15142 memcpy(streamPtr, &opcode_vkQueueSubmit2, sizeof(uint32_t));
15143 streamPtr += sizeof(uint32_t);
15144 memcpy(streamPtr, &packetSize_vkQueueSubmit2, sizeof(uint32_t));
15145 streamPtr += sizeof(uint32_t);
15146 if (queueSubmitWithCommandsEnabled) {
15147 memcpy(streamPtr, &seqno, sizeof(uint32_t));
15148 streamPtr += sizeof(uint32_t);
15149 }
15150 uint64_t cgen_var_0;
15151 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
15152 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15153 *streamPtrPtr += 1 * 8;
15154 memcpy(*streamPtrPtr, (uint32_t*)&local_submitCount, sizeof(uint32_t));
15155 *streamPtrPtr += sizeof(uint32_t);
15156 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
15157 reservedmarshal_VkSubmitInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
15158 (VkSubmitInfo2*)(local_pSubmits + i), streamPtrPtr);
15159 }
15160 uint64_t cgen_var_1;
15161 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
15162 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
15163 *streamPtrPtr += 1 * 8;
15164 VkResult vkQueueSubmit2_VkResult_return = (VkResult)0;
15165 stream->read(&vkQueueSubmit2_VkResult_return, sizeof(VkResult));
15166 ++encodeCount;
15167 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15168 pool->freeAll();
15169 stream->clearPool();
15170 }
15171 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15172 return vkQueueSubmit2_VkResult_return;
15173 }
15174
vkCmdCopyBuffer2(VkCommandBuffer commandBuffer,const VkCopyBufferInfo2 * pCopyBufferInfo,uint32_t doLock)15175 void VkEncoder::vkCmdCopyBuffer2(VkCommandBuffer commandBuffer,
15176 const VkCopyBufferInfo2* pCopyBufferInfo, uint32_t doLock) {
15177 (void)doLock;
15178 bool queueSubmitWithCommandsEnabled =
15179 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15180 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15181 auto stream = mImpl->stream();
15182 auto pool = mImpl->pool();
15183 VkCommandBuffer local_commandBuffer;
15184 VkCopyBufferInfo2* local_pCopyBufferInfo;
15185 local_commandBuffer = commandBuffer;
15186 local_pCopyBufferInfo = nullptr;
15187 if (pCopyBufferInfo) {
15188 local_pCopyBufferInfo = (VkCopyBufferInfo2*)pool->alloc(sizeof(const VkCopyBufferInfo2));
15189 deepcopy_VkCopyBufferInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyBufferInfo,
15190 (VkCopyBufferInfo2*)(local_pCopyBufferInfo));
15191 }
15192 if (local_pCopyBufferInfo) {
15193 transform_tohost_VkCopyBufferInfo2(sResourceTracker,
15194 (VkCopyBufferInfo2*)(local_pCopyBufferInfo));
15195 }
15196 size_t count = 0;
15197 size_t* countPtr = &count;
15198 {
15199 uint64_t cgen_var_0;
15200 *countPtr += 1 * 8;
15201 count_VkCopyBufferInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
15202 (VkCopyBufferInfo2*)(local_pCopyBufferInfo), countPtr);
15203 }
15204 uint32_t packetSize_vkCmdCopyBuffer2 = 4 + 4 + count;
15205 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyBuffer2 -= 8;
15206 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyBuffer2);
15207 uint8_t* packetBeginPtr = streamPtr;
15208 uint8_t** streamPtrPtr = &streamPtr;
15209 uint32_t opcode_vkCmdCopyBuffer2 = OP_vkCmdCopyBuffer2;
15210 memcpy(streamPtr, &opcode_vkCmdCopyBuffer2, sizeof(uint32_t));
15211 streamPtr += sizeof(uint32_t);
15212 memcpy(streamPtr, &packetSize_vkCmdCopyBuffer2, sizeof(uint32_t));
15213 streamPtr += sizeof(uint32_t);
15214 if (!queueSubmitWithCommandsEnabled) {
15215 uint64_t cgen_var_0;
15216 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15217 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15218 *streamPtrPtr += 1 * 8;
15219 }
15220 reservedmarshal_VkCopyBufferInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
15221 (VkCopyBufferInfo2*)(local_pCopyBufferInfo), streamPtrPtr);
15222 ++encodeCount;
15223 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15224 pool->freeAll();
15225 stream->clearPool();
15226 }
15227 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15228 }
15229
vkCmdCopyImage2(VkCommandBuffer commandBuffer,const VkCopyImageInfo2 * pCopyImageInfo,uint32_t doLock)15230 void VkEncoder::vkCmdCopyImage2(VkCommandBuffer commandBuffer,
15231 const VkCopyImageInfo2* pCopyImageInfo, uint32_t doLock) {
15232 (void)doLock;
15233 bool queueSubmitWithCommandsEnabled =
15234 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15235 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15236 auto stream = mImpl->stream();
15237 auto pool = mImpl->pool();
15238 VkCommandBuffer local_commandBuffer;
15239 VkCopyImageInfo2* local_pCopyImageInfo;
15240 local_commandBuffer = commandBuffer;
15241 local_pCopyImageInfo = nullptr;
15242 if (pCopyImageInfo) {
15243 local_pCopyImageInfo = (VkCopyImageInfo2*)pool->alloc(sizeof(const VkCopyImageInfo2));
15244 deepcopy_VkCopyImageInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageInfo,
15245 (VkCopyImageInfo2*)(local_pCopyImageInfo));
15246 }
15247 if (local_pCopyImageInfo) {
15248 transform_tohost_VkCopyImageInfo2(sResourceTracker,
15249 (VkCopyImageInfo2*)(local_pCopyImageInfo));
15250 }
15251 size_t count = 0;
15252 size_t* countPtr = &count;
15253 {
15254 uint64_t cgen_var_0;
15255 *countPtr += 1 * 8;
15256 count_VkCopyImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
15257 (VkCopyImageInfo2*)(local_pCopyImageInfo), countPtr);
15258 }
15259 uint32_t packetSize_vkCmdCopyImage2 = 4 + 4 + count;
15260 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyImage2 -= 8;
15261 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyImage2);
15262 uint8_t* packetBeginPtr = streamPtr;
15263 uint8_t** streamPtrPtr = &streamPtr;
15264 uint32_t opcode_vkCmdCopyImage2 = OP_vkCmdCopyImage2;
15265 memcpy(streamPtr, &opcode_vkCmdCopyImage2, sizeof(uint32_t));
15266 streamPtr += sizeof(uint32_t);
15267 memcpy(streamPtr, &packetSize_vkCmdCopyImage2, sizeof(uint32_t));
15268 streamPtr += sizeof(uint32_t);
15269 if (!queueSubmitWithCommandsEnabled) {
15270 uint64_t cgen_var_0;
15271 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15272 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15273 *streamPtrPtr += 1 * 8;
15274 }
15275 reservedmarshal_VkCopyImageInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
15276 (VkCopyImageInfo2*)(local_pCopyImageInfo), streamPtrPtr);
15277 ++encodeCount;
15278 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15279 pool->freeAll();
15280 stream->clearPool();
15281 }
15282 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15283 }
15284
vkCmdCopyBufferToImage2(VkCommandBuffer commandBuffer,const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo,uint32_t doLock)15285 void VkEncoder::vkCmdCopyBufferToImage2(VkCommandBuffer commandBuffer,
15286 const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo,
15287 uint32_t doLock) {
15288 (void)doLock;
15289 bool queueSubmitWithCommandsEnabled =
15290 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15291 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15292 auto stream = mImpl->stream();
15293 auto pool = mImpl->pool();
15294 VkCommandBuffer local_commandBuffer;
15295 VkCopyBufferToImageInfo2* local_pCopyBufferToImageInfo;
15296 local_commandBuffer = commandBuffer;
15297 local_pCopyBufferToImageInfo = nullptr;
15298 if (pCopyBufferToImageInfo) {
15299 local_pCopyBufferToImageInfo =
15300 (VkCopyBufferToImageInfo2*)pool->alloc(sizeof(const VkCopyBufferToImageInfo2));
15301 deepcopy_VkCopyBufferToImageInfo2(
15302 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyBufferToImageInfo,
15303 (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo));
15304 }
15305 if (local_pCopyBufferToImageInfo) {
15306 transform_tohost_VkCopyBufferToImageInfo2(
15307 sResourceTracker, (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo));
15308 }
15309 size_t count = 0;
15310 size_t* countPtr = &count;
15311 {
15312 uint64_t cgen_var_0;
15313 *countPtr += 1 * 8;
15314 count_VkCopyBufferToImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
15315 (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo),
15316 countPtr);
15317 }
15318 uint32_t packetSize_vkCmdCopyBufferToImage2 = 4 + 4 + count;
15319 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyBufferToImage2 -= 8;
15320 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyBufferToImage2);
15321 uint8_t* packetBeginPtr = streamPtr;
15322 uint8_t** streamPtrPtr = &streamPtr;
15323 uint32_t opcode_vkCmdCopyBufferToImage2 = OP_vkCmdCopyBufferToImage2;
15324 memcpy(streamPtr, &opcode_vkCmdCopyBufferToImage2, sizeof(uint32_t));
15325 streamPtr += sizeof(uint32_t);
15326 memcpy(streamPtr, &packetSize_vkCmdCopyBufferToImage2, sizeof(uint32_t));
15327 streamPtr += sizeof(uint32_t);
15328 if (!queueSubmitWithCommandsEnabled) {
15329 uint64_t cgen_var_0;
15330 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15331 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15332 *streamPtrPtr += 1 * 8;
15333 }
15334 reservedmarshal_VkCopyBufferToImageInfo2(
15335 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
15336 (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo), streamPtrPtr);
15337 ++encodeCount;
15338 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15339 pool->freeAll();
15340 stream->clearPool();
15341 }
15342 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15343 }
15344
vkCmdCopyImageToBuffer2(VkCommandBuffer commandBuffer,const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo,uint32_t doLock)15345 void VkEncoder::vkCmdCopyImageToBuffer2(VkCommandBuffer commandBuffer,
15346 const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo,
15347 uint32_t doLock) {
15348 (void)doLock;
15349 bool queueSubmitWithCommandsEnabled =
15350 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15351 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15352 auto stream = mImpl->stream();
15353 auto pool = mImpl->pool();
15354 VkCommandBuffer local_commandBuffer;
15355 VkCopyImageToBufferInfo2* local_pCopyImageToBufferInfo;
15356 local_commandBuffer = commandBuffer;
15357 local_pCopyImageToBufferInfo = nullptr;
15358 if (pCopyImageToBufferInfo) {
15359 local_pCopyImageToBufferInfo =
15360 (VkCopyImageToBufferInfo2*)pool->alloc(sizeof(const VkCopyImageToBufferInfo2));
15361 deepcopy_VkCopyImageToBufferInfo2(
15362 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageToBufferInfo,
15363 (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo));
15364 }
15365 if (local_pCopyImageToBufferInfo) {
15366 transform_tohost_VkCopyImageToBufferInfo2(
15367 sResourceTracker, (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo));
15368 }
15369 size_t count = 0;
15370 size_t* countPtr = &count;
15371 {
15372 uint64_t cgen_var_0;
15373 *countPtr += 1 * 8;
15374 count_VkCopyImageToBufferInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
15375 (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo),
15376 countPtr);
15377 }
15378 uint32_t packetSize_vkCmdCopyImageToBuffer2 = 4 + 4 + count;
15379 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyImageToBuffer2 -= 8;
15380 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyImageToBuffer2);
15381 uint8_t* packetBeginPtr = streamPtr;
15382 uint8_t** streamPtrPtr = &streamPtr;
15383 uint32_t opcode_vkCmdCopyImageToBuffer2 = OP_vkCmdCopyImageToBuffer2;
15384 memcpy(streamPtr, &opcode_vkCmdCopyImageToBuffer2, sizeof(uint32_t));
15385 streamPtr += sizeof(uint32_t);
15386 memcpy(streamPtr, &packetSize_vkCmdCopyImageToBuffer2, sizeof(uint32_t));
15387 streamPtr += sizeof(uint32_t);
15388 if (!queueSubmitWithCommandsEnabled) {
15389 uint64_t cgen_var_0;
15390 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15391 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15392 *streamPtrPtr += 1 * 8;
15393 }
15394 reservedmarshal_VkCopyImageToBufferInfo2(
15395 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
15396 (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo), streamPtrPtr);
15397 ++encodeCount;
15398 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15399 pool->freeAll();
15400 stream->clearPool();
15401 }
15402 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15403 }
15404
vkCmdBlitImage2(VkCommandBuffer commandBuffer,const VkBlitImageInfo2 * pBlitImageInfo,uint32_t doLock)15405 void VkEncoder::vkCmdBlitImage2(VkCommandBuffer commandBuffer,
15406 const VkBlitImageInfo2* pBlitImageInfo, uint32_t doLock) {
15407 (void)doLock;
15408 bool queueSubmitWithCommandsEnabled =
15409 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15410 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15411 auto stream = mImpl->stream();
15412 auto pool = mImpl->pool();
15413 VkCommandBuffer local_commandBuffer;
15414 VkBlitImageInfo2* local_pBlitImageInfo;
15415 local_commandBuffer = commandBuffer;
15416 local_pBlitImageInfo = nullptr;
15417 if (pBlitImageInfo) {
15418 local_pBlitImageInfo = (VkBlitImageInfo2*)pool->alloc(sizeof(const VkBlitImageInfo2));
15419 deepcopy_VkBlitImageInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBlitImageInfo,
15420 (VkBlitImageInfo2*)(local_pBlitImageInfo));
15421 }
15422 if (local_pBlitImageInfo) {
15423 transform_tohost_VkBlitImageInfo2(sResourceTracker,
15424 (VkBlitImageInfo2*)(local_pBlitImageInfo));
15425 }
15426 size_t count = 0;
15427 size_t* countPtr = &count;
15428 {
15429 uint64_t cgen_var_0;
15430 *countPtr += 1 * 8;
15431 count_VkBlitImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
15432 (VkBlitImageInfo2*)(local_pBlitImageInfo), countPtr);
15433 }
15434 uint32_t packetSize_vkCmdBlitImage2 = 4 + 4 + count;
15435 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBlitImage2 -= 8;
15436 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBlitImage2);
15437 uint8_t* packetBeginPtr = streamPtr;
15438 uint8_t** streamPtrPtr = &streamPtr;
15439 uint32_t opcode_vkCmdBlitImage2 = OP_vkCmdBlitImage2;
15440 memcpy(streamPtr, &opcode_vkCmdBlitImage2, sizeof(uint32_t));
15441 streamPtr += sizeof(uint32_t);
15442 memcpy(streamPtr, &packetSize_vkCmdBlitImage2, sizeof(uint32_t));
15443 streamPtr += sizeof(uint32_t);
15444 if (!queueSubmitWithCommandsEnabled) {
15445 uint64_t cgen_var_0;
15446 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15447 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15448 *streamPtrPtr += 1 * 8;
15449 }
15450 reservedmarshal_VkBlitImageInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
15451 (VkBlitImageInfo2*)(local_pBlitImageInfo), streamPtrPtr);
15452 ++encodeCount;
15453 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15454 pool->freeAll();
15455 stream->clearPool();
15456 }
15457 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15458 }
15459
vkCmdResolveImage2(VkCommandBuffer commandBuffer,const VkResolveImageInfo2 * pResolveImageInfo,uint32_t doLock)15460 void VkEncoder::vkCmdResolveImage2(VkCommandBuffer commandBuffer,
15461 const VkResolveImageInfo2* pResolveImageInfo, uint32_t doLock) {
15462 (void)doLock;
15463 bool queueSubmitWithCommandsEnabled =
15464 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15465 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15466 auto stream = mImpl->stream();
15467 auto pool = mImpl->pool();
15468 VkCommandBuffer local_commandBuffer;
15469 VkResolveImageInfo2* local_pResolveImageInfo;
15470 local_commandBuffer = commandBuffer;
15471 local_pResolveImageInfo = nullptr;
15472 if (pResolveImageInfo) {
15473 local_pResolveImageInfo =
15474 (VkResolveImageInfo2*)pool->alloc(sizeof(const VkResolveImageInfo2));
15475 deepcopy_VkResolveImageInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pResolveImageInfo,
15476 (VkResolveImageInfo2*)(local_pResolveImageInfo));
15477 }
15478 if (local_pResolveImageInfo) {
15479 transform_tohost_VkResolveImageInfo2(sResourceTracker,
15480 (VkResolveImageInfo2*)(local_pResolveImageInfo));
15481 }
15482 size_t count = 0;
15483 size_t* countPtr = &count;
15484 {
15485 uint64_t cgen_var_0;
15486 *countPtr += 1 * 8;
15487 count_VkResolveImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
15488 (VkResolveImageInfo2*)(local_pResolveImageInfo), countPtr);
15489 }
15490 uint32_t packetSize_vkCmdResolveImage2 = 4 + 4 + count;
15491 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdResolveImage2 -= 8;
15492 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdResolveImage2);
15493 uint8_t* packetBeginPtr = streamPtr;
15494 uint8_t** streamPtrPtr = &streamPtr;
15495 uint32_t opcode_vkCmdResolveImage2 = OP_vkCmdResolveImage2;
15496 memcpy(streamPtr, &opcode_vkCmdResolveImage2, sizeof(uint32_t));
15497 streamPtr += sizeof(uint32_t);
15498 memcpy(streamPtr, &packetSize_vkCmdResolveImage2, sizeof(uint32_t));
15499 streamPtr += sizeof(uint32_t);
15500 if (!queueSubmitWithCommandsEnabled) {
15501 uint64_t cgen_var_0;
15502 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15503 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15504 *streamPtrPtr += 1 * 8;
15505 }
15506 reservedmarshal_VkResolveImageInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
15507 (VkResolveImageInfo2*)(local_pResolveImageInfo),
15508 streamPtrPtr);
15509 ++encodeCount;
15510 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15511 pool->freeAll();
15512 stream->clearPool();
15513 }
15514 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15515 }
15516
vkCmdBeginRendering(VkCommandBuffer commandBuffer,const VkRenderingInfo * pRenderingInfo,uint32_t doLock)15517 void VkEncoder::vkCmdBeginRendering(VkCommandBuffer commandBuffer,
15518 const VkRenderingInfo* pRenderingInfo, uint32_t doLock) {
15519 (void)doLock;
15520 bool queueSubmitWithCommandsEnabled =
15521 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15522 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15523 auto stream = mImpl->stream();
15524 auto pool = mImpl->pool();
15525 VkCommandBuffer local_commandBuffer;
15526 VkRenderingInfo* local_pRenderingInfo;
15527 local_commandBuffer = commandBuffer;
15528 local_pRenderingInfo = nullptr;
15529 if (pRenderingInfo) {
15530 local_pRenderingInfo = (VkRenderingInfo*)pool->alloc(sizeof(const VkRenderingInfo));
15531 deepcopy_VkRenderingInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderingInfo,
15532 (VkRenderingInfo*)(local_pRenderingInfo));
15533 }
15534 if (local_pRenderingInfo) {
15535 transform_tohost_VkRenderingInfo(sResourceTracker,
15536 (VkRenderingInfo*)(local_pRenderingInfo));
15537 }
15538 size_t count = 0;
15539 size_t* countPtr = &count;
15540 {
15541 uint64_t cgen_var_0;
15542 *countPtr += 1 * 8;
15543 count_VkRenderingInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
15544 (VkRenderingInfo*)(local_pRenderingInfo), countPtr);
15545 }
15546 uint32_t packetSize_vkCmdBeginRendering = 4 + 4 + count;
15547 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginRendering -= 8;
15548 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginRendering);
15549 uint8_t* packetBeginPtr = streamPtr;
15550 uint8_t** streamPtrPtr = &streamPtr;
15551 uint32_t opcode_vkCmdBeginRendering = OP_vkCmdBeginRendering;
15552 memcpy(streamPtr, &opcode_vkCmdBeginRendering, sizeof(uint32_t));
15553 streamPtr += sizeof(uint32_t);
15554 memcpy(streamPtr, &packetSize_vkCmdBeginRendering, sizeof(uint32_t));
15555 streamPtr += sizeof(uint32_t);
15556 if (!queueSubmitWithCommandsEnabled) {
15557 uint64_t cgen_var_0;
15558 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15559 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15560 *streamPtrPtr += 1 * 8;
15561 }
15562 reservedmarshal_VkRenderingInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
15563 (VkRenderingInfo*)(local_pRenderingInfo), streamPtrPtr);
15564 ++encodeCount;
15565 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15566 pool->freeAll();
15567 stream->clearPool();
15568 }
15569 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15570 }
15571
vkCmdEndRendering(VkCommandBuffer commandBuffer,uint32_t doLock)15572 void VkEncoder::vkCmdEndRendering(VkCommandBuffer commandBuffer, uint32_t doLock) {
15573 (void)doLock;
15574 bool queueSubmitWithCommandsEnabled =
15575 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15576 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15577 auto stream = mImpl->stream();
15578 auto pool = mImpl->pool();
15579 VkCommandBuffer local_commandBuffer;
15580 local_commandBuffer = commandBuffer;
15581 size_t count = 0;
15582 size_t* countPtr = &count;
15583 {
15584 uint64_t cgen_var_0;
15585 *countPtr += 1 * 8;
15586 }
15587 uint32_t packetSize_vkCmdEndRendering = 4 + 4 + count;
15588 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndRendering -= 8;
15589 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndRendering);
15590 uint8_t* packetBeginPtr = streamPtr;
15591 uint8_t** streamPtrPtr = &streamPtr;
15592 uint32_t opcode_vkCmdEndRendering = OP_vkCmdEndRendering;
15593 memcpy(streamPtr, &opcode_vkCmdEndRendering, sizeof(uint32_t));
15594 streamPtr += sizeof(uint32_t);
15595 memcpy(streamPtr, &packetSize_vkCmdEndRendering, sizeof(uint32_t));
15596 streamPtr += sizeof(uint32_t);
15597 if (!queueSubmitWithCommandsEnabled) {
15598 uint64_t cgen_var_0;
15599 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15600 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15601 *streamPtrPtr += 1 * 8;
15602 }
15603 ++encodeCount;
15604 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15605 pool->freeAll();
15606 stream->clearPool();
15607 }
15608 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15609 }
15610
vkCmdSetCullMode(VkCommandBuffer commandBuffer,VkCullModeFlags cullMode,uint32_t doLock)15611 void VkEncoder::vkCmdSetCullMode(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode,
15612 uint32_t doLock) {
15613 (void)doLock;
15614 bool queueSubmitWithCommandsEnabled =
15615 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15616 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15617 auto stream = mImpl->stream();
15618 auto pool = mImpl->pool();
15619 VkCommandBuffer local_commandBuffer;
15620 VkCullModeFlags local_cullMode;
15621 local_commandBuffer = commandBuffer;
15622 local_cullMode = cullMode;
15623 size_t count = 0;
15624 size_t* countPtr = &count;
15625 {
15626 uint64_t cgen_var_0;
15627 *countPtr += 1 * 8;
15628 *countPtr += sizeof(VkCullModeFlags);
15629 }
15630 uint32_t packetSize_vkCmdSetCullMode = 4 + 4 + count;
15631 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetCullMode -= 8;
15632 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetCullMode);
15633 uint8_t* packetBeginPtr = streamPtr;
15634 uint8_t** streamPtrPtr = &streamPtr;
15635 uint32_t opcode_vkCmdSetCullMode = OP_vkCmdSetCullMode;
15636 memcpy(streamPtr, &opcode_vkCmdSetCullMode, sizeof(uint32_t));
15637 streamPtr += sizeof(uint32_t);
15638 memcpy(streamPtr, &packetSize_vkCmdSetCullMode, sizeof(uint32_t));
15639 streamPtr += sizeof(uint32_t);
15640 if (!queueSubmitWithCommandsEnabled) {
15641 uint64_t cgen_var_0;
15642 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15643 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15644 *streamPtrPtr += 1 * 8;
15645 }
15646 memcpy(*streamPtrPtr, (VkCullModeFlags*)&local_cullMode, sizeof(VkCullModeFlags));
15647 *streamPtrPtr += sizeof(VkCullModeFlags);
15648 ++encodeCount;
15649 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15650 pool->freeAll();
15651 stream->clearPool();
15652 }
15653 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15654 }
15655
vkCmdSetFrontFace(VkCommandBuffer commandBuffer,VkFrontFace frontFace,uint32_t doLock)15656 void VkEncoder::vkCmdSetFrontFace(VkCommandBuffer commandBuffer, VkFrontFace frontFace,
15657 uint32_t doLock) {
15658 (void)doLock;
15659 bool queueSubmitWithCommandsEnabled =
15660 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15661 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15662 auto stream = mImpl->stream();
15663 auto pool = mImpl->pool();
15664 VkCommandBuffer local_commandBuffer;
15665 VkFrontFace local_frontFace;
15666 local_commandBuffer = commandBuffer;
15667 local_frontFace = frontFace;
15668 size_t count = 0;
15669 size_t* countPtr = &count;
15670 {
15671 uint64_t cgen_var_0;
15672 *countPtr += 1 * 8;
15673 *countPtr += sizeof(VkFrontFace);
15674 }
15675 uint32_t packetSize_vkCmdSetFrontFace = 4 + 4 + count;
15676 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetFrontFace -= 8;
15677 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetFrontFace);
15678 uint8_t* packetBeginPtr = streamPtr;
15679 uint8_t** streamPtrPtr = &streamPtr;
15680 uint32_t opcode_vkCmdSetFrontFace = OP_vkCmdSetFrontFace;
15681 memcpy(streamPtr, &opcode_vkCmdSetFrontFace, sizeof(uint32_t));
15682 streamPtr += sizeof(uint32_t);
15683 memcpy(streamPtr, &packetSize_vkCmdSetFrontFace, sizeof(uint32_t));
15684 streamPtr += sizeof(uint32_t);
15685 if (!queueSubmitWithCommandsEnabled) {
15686 uint64_t cgen_var_0;
15687 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15688 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15689 *streamPtrPtr += 1 * 8;
15690 }
15691 memcpy(*streamPtrPtr, (VkFrontFace*)&local_frontFace, sizeof(VkFrontFace));
15692 *streamPtrPtr += sizeof(VkFrontFace);
15693 ++encodeCount;
15694 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15695 pool->freeAll();
15696 stream->clearPool();
15697 }
15698 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15699 }
15700
vkCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer,VkPrimitiveTopology primitiveTopology,uint32_t doLock)15701 void VkEncoder::vkCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer,
15702 VkPrimitiveTopology primitiveTopology, uint32_t doLock) {
15703 (void)doLock;
15704 bool queueSubmitWithCommandsEnabled =
15705 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15706 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15707 auto stream = mImpl->stream();
15708 auto pool = mImpl->pool();
15709 VkCommandBuffer local_commandBuffer;
15710 VkPrimitiveTopology local_primitiveTopology;
15711 local_commandBuffer = commandBuffer;
15712 local_primitiveTopology = primitiveTopology;
15713 size_t count = 0;
15714 size_t* countPtr = &count;
15715 {
15716 uint64_t cgen_var_0;
15717 *countPtr += 1 * 8;
15718 *countPtr += sizeof(VkPrimitiveTopology);
15719 }
15720 uint32_t packetSize_vkCmdSetPrimitiveTopology = 4 + 4 + count;
15721 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetPrimitiveTopology -= 8;
15722 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetPrimitiveTopology);
15723 uint8_t* packetBeginPtr = streamPtr;
15724 uint8_t** streamPtrPtr = &streamPtr;
15725 uint32_t opcode_vkCmdSetPrimitiveTopology = OP_vkCmdSetPrimitiveTopology;
15726 memcpy(streamPtr, &opcode_vkCmdSetPrimitiveTopology, sizeof(uint32_t));
15727 streamPtr += sizeof(uint32_t);
15728 memcpy(streamPtr, &packetSize_vkCmdSetPrimitiveTopology, sizeof(uint32_t));
15729 streamPtr += sizeof(uint32_t);
15730 if (!queueSubmitWithCommandsEnabled) {
15731 uint64_t cgen_var_0;
15732 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15733 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15734 *streamPtrPtr += 1 * 8;
15735 }
15736 memcpy(*streamPtrPtr, (VkPrimitiveTopology*)&local_primitiveTopology,
15737 sizeof(VkPrimitiveTopology));
15738 *streamPtrPtr += sizeof(VkPrimitiveTopology);
15739 ++encodeCount;
15740 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15741 pool->freeAll();
15742 stream->clearPool();
15743 }
15744 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15745 }
15746
vkCmdSetViewportWithCount(VkCommandBuffer commandBuffer,uint32_t viewportCount,const VkViewport * pViewports,uint32_t doLock)15747 void VkEncoder::vkCmdSetViewportWithCount(VkCommandBuffer commandBuffer, uint32_t viewportCount,
15748 const VkViewport* pViewports, uint32_t doLock) {
15749 (void)doLock;
15750 bool queueSubmitWithCommandsEnabled =
15751 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15752 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15753 auto stream = mImpl->stream();
15754 auto pool = mImpl->pool();
15755 VkCommandBuffer local_commandBuffer;
15756 uint32_t local_viewportCount;
15757 VkViewport* local_pViewports;
15758 local_commandBuffer = commandBuffer;
15759 local_viewportCount = viewportCount;
15760 local_pViewports = nullptr;
15761 if (pViewports) {
15762 local_pViewports = (VkViewport*)pool->alloc(((viewportCount)) * sizeof(const VkViewport));
15763 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
15764 deepcopy_VkViewport(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pViewports + i,
15765 (VkViewport*)(local_pViewports + i));
15766 }
15767 }
15768 if (local_pViewports) {
15769 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
15770 transform_tohost_VkViewport(sResourceTracker, (VkViewport*)(local_pViewports + i));
15771 }
15772 }
15773 size_t count = 0;
15774 size_t* countPtr = &count;
15775 {
15776 uint64_t cgen_var_0;
15777 *countPtr += 1 * 8;
15778 *countPtr += sizeof(uint32_t);
15779 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
15780 count_VkViewport(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
15781 (VkViewport*)(local_pViewports + i), countPtr);
15782 }
15783 }
15784 uint32_t packetSize_vkCmdSetViewportWithCount = 4 + 4 + count;
15785 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetViewportWithCount -= 8;
15786 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetViewportWithCount);
15787 uint8_t* packetBeginPtr = streamPtr;
15788 uint8_t** streamPtrPtr = &streamPtr;
15789 uint32_t opcode_vkCmdSetViewportWithCount = OP_vkCmdSetViewportWithCount;
15790 memcpy(streamPtr, &opcode_vkCmdSetViewportWithCount, sizeof(uint32_t));
15791 streamPtr += sizeof(uint32_t);
15792 memcpy(streamPtr, &packetSize_vkCmdSetViewportWithCount, sizeof(uint32_t));
15793 streamPtr += sizeof(uint32_t);
15794 if (!queueSubmitWithCommandsEnabled) {
15795 uint64_t cgen_var_0;
15796 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15797 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15798 *streamPtrPtr += 1 * 8;
15799 }
15800 memcpy(*streamPtrPtr, (uint32_t*)&local_viewportCount, sizeof(uint32_t));
15801 *streamPtrPtr += sizeof(uint32_t);
15802 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
15803 reservedmarshal_VkViewport(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
15804 (VkViewport*)(local_pViewports + i), streamPtrPtr);
15805 }
15806 ++encodeCount;
15807 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15808 pool->freeAll();
15809 stream->clearPool();
15810 }
15811 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15812 }
15813
vkCmdSetScissorWithCount(VkCommandBuffer commandBuffer,uint32_t scissorCount,const VkRect2D * pScissors,uint32_t doLock)15814 void VkEncoder::vkCmdSetScissorWithCount(VkCommandBuffer commandBuffer, uint32_t scissorCount,
15815 const VkRect2D* pScissors, uint32_t doLock) {
15816 (void)doLock;
15817 bool queueSubmitWithCommandsEnabled =
15818 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15819 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15820 auto stream = mImpl->stream();
15821 auto pool = mImpl->pool();
15822 VkCommandBuffer local_commandBuffer;
15823 uint32_t local_scissorCount;
15824 VkRect2D* local_pScissors;
15825 local_commandBuffer = commandBuffer;
15826 local_scissorCount = scissorCount;
15827 local_pScissors = nullptr;
15828 if (pScissors) {
15829 local_pScissors = (VkRect2D*)pool->alloc(((scissorCount)) * sizeof(const VkRect2D));
15830 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
15831 deepcopy_VkRect2D(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pScissors + i,
15832 (VkRect2D*)(local_pScissors + i));
15833 }
15834 }
15835 if (local_pScissors) {
15836 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
15837 transform_tohost_VkRect2D(sResourceTracker, (VkRect2D*)(local_pScissors + i));
15838 }
15839 }
15840 size_t count = 0;
15841 size_t* countPtr = &count;
15842 {
15843 uint64_t cgen_var_0;
15844 *countPtr += 1 * 8;
15845 *countPtr += sizeof(uint32_t);
15846 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
15847 count_VkRect2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
15848 (VkRect2D*)(local_pScissors + i), countPtr);
15849 }
15850 }
15851 uint32_t packetSize_vkCmdSetScissorWithCount = 4 + 4 + count;
15852 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetScissorWithCount -= 8;
15853 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetScissorWithCount);
15854 uint8_t* packetBeginPtr = streamPtr;
15855 uint8_t** streamPtrPtr = &streamPtr;
15856 uint32_t opcode_vkCmdSetScissorWithCount = OP_vkCmdSetScissorWithCount;
15857 memcpy(streamPtr, &opcode_vkCmdSetScissorWithCount, sizeof(uint32_t));
15858 streamPtr += sizeof(uint32_t);
15859 memcpy(streamPtr, &packetSize_vkCmdSetScissorWithCount, sizeof(uint32_t));
15860 streamPtr += sizeof(uint32_t);
15861 if (!queueSubmitWithCommandsEnabled) {
15862 uint64_t cgen_var_0;
15863 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15864 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15865 *streamPtrPtr += 1 * 8;
15866 }
15867 memcpy(*streamPtrPtr, (uint32_t*)&local_scissorCount, sizeof(uint32_t));
15868 *streamPtrPtr += sizeof(uint32_t);
15869 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
15870 reservedmarshal_VkRect2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
15871 (VkRect2D*)(local_pScissors + i), streamPtrPtr);
15872 }
15873 ++encodeCount;
15874 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15875 pool->freeAll();
15876 stream->clearPool();
15877 }
15878 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15879 }
15880
vkCmdBindVertexBuffers2(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets,const VkDeviceSize * pSizes,const VkDeviceSize * pStrides,uint32_t doLock)15881 void VkEncoder::vkCmdBindVertexBuffers2(VkCommandBuffer commandBuffer, uint32_t firstBinding,
15882 uint32_t bindingCount, const VkBuffer* pBuffers,
15883 const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes,
15884 const VkDeviceSize* pStrides, uint32_t doLock) {
15885 (void)doLock;
15886 bool queueSubmitWithCommandsEnabled =
15887 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
15888 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
15889 auto stream = mImpl->stream();
15890 auto pool = mImpl->pool();
15891 VkCommandBuffer local_commandBuffer;
15892 uint32_t local_firstBinding;
15893 uint32_t local_bindingCount;
15894 VkBuffer* local_pBuffers;
15895 VkDeviceSize* local_pOffsets;
15896 VkDeviceSize* local_pSizes;
15897 VkDeviceSize* local_pStrides;
15898 local_commandBuffer = commandBuffer;
15899 local_firstBinding = firstBinding;
15900 local_bindingCount = bindingCount;
15901 // Avoiding deepcopy for pBuffers
15902 local_pBuffers = (VkBuffer*)pBuffers;
15903 // Avoiding deepcopy for pOffsets
15904 local_pOffsets = (VkDeviceSize*)pOffsets;
15905 // Avoiding deepcopy for pSizes
15906 local_pSizes = (VkDeviceSize*)pSizes;
15907 // Avoiding deepcopy for pStrides
15908 local_pStrides = (VkDeviceSize*)pStrides;
15909 size_t count = 0;
15910 size_t* countPtr = &count;
15911 {
15912 uint64_t cgen_var_0;
15913 *countPtr += 1 * 8;
15914 *countPtr += sizeof(uint32_t);
15915 *countPtr += sizeof(uint32_t);
15916 // WARNING PTR CHECK
15917 *countPtr += 8;
15918 if (local_pBuffers) {
15919 if (((bindingCount))) {
15920 *countPtr += ((bindingCount)) * 8;
15921 }
15922 }
15923 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
15924 // WARNING PTR CHECK
15925 *countPtr += 8;
15926 if (local_pSizes) {
15927 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
15928 }
15929 // WARNING PTR CHECK
15930 *countPtr += 8;
15931 if (local_pStrides) {
15932 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
15933 }
15934 }
15935 uint32_t packetSize_vkCmdBindVertexBuffers2 = 4 + 4 + count;
15936 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindVertexBuffers2 -= 8;
15937 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindVertexBuffers2);
15938 uint8_t* packetBeginPtr = streamPtr;
15939 uint8_t** streamPtrPtr = &streamPtr;
15940 uint32_t opcode_vkCmdBindVertexBuffers2 = OP_vkCmdBindVertexBuffers2;
15941 memcpy(streamPtr, &opcode_vkCmdBindVertexBuffers2, sizeof(uint32_t));
15942 streamPtr += sizeof(uint32_t);
15943 memcpy(streamPtr, &packetSize_vkCmdBindVertexBuffers2, sizeof(uint32_t));
15944 streamPtr += sizeof(uint32_t);
15945 if (!queueSubmitWithCommandsEnabled) {
15946 uint64_t cgen_var_0;
15947 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
15948 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
15949 *streamPtrPtr += 1 * 8;
15950 }
15951 memcpy(*streamPtrPtr, (uint32_t*)&local_firstBinding, sizeof(uint32_t));
15952 *streamPtrPtr += sizeof(uint32_t);
15953 memcpy(*streamPtrPtr, (uint32_t*)&local_bindingCount, sizeof(uint32_t));
15954 *streamPtrPtr += sizeof(uint32_t);
15955 // WARNING PTR CHECK
15956 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)local_pBuffers;
15957 memcpy((*streamPtrPtr), &cgen_var_0, 8);
15958 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
15959 *streamPtrPtr += 8;
15960 if (local_pBuffers) {
15961 if (((bindingCount))) {
15962 uint8_t* cgen_var_0_0_ptr = (uint8_t*)(*streamPtrPtr);
15963 for (uint32_t k = 0; k < ((bindingCount)); ++k) {
15964 uint64_t tmpval = get_host_u64_VkBuffer(local_pBuffers[k]);
15965 memcpy(cgen_var_0_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
15966 }
15967 *streamPtrPtr += 8 * ((bindingCount));
15968 }
15969 }
15970 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pOffsets, ((bindingCount)) * sizeof(VkDeviceSize));
15971 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
15972 // WARNING PTR CHECK
15973 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pSizes;
15974 memcpy((*streamPtrPtr), &cgen_var_1, 8);
15975 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
15976 *streamPtrPtr += 8;
15977 if (local_pSizes) {
15978 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pSizes, ((bindingCount)) * sizeof(VkDeviceSize));
15979 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
15980 }
15981 // WARNING PTR CHECK
15982 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pStrides;
15983 memcpy((*streamPtrPtr), &cgen_var_2, 8);
15984 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
15985 *streamPtrPtr += 8;
15986 if (local_pStrides) {
15987 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pStrides,
15988 ((bindingCount)) * sizeof(VkDeviceSize));
15989 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
15990 }
15991 ++encodeCount;
15992 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
15993 pool->freeAll();
15994 stream->clearPool();
15995 }
15996 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
15997 }
15998
vkCmdSetDepthTestEnable(VkCommandBuffer commandBuffer,VkBool32 depthTestEnable,uint32_t doLock)15999 void VkEncoder::vkCmdSetDepthTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable,
16000 uint32_t doLock) {
16001 (void)doLock;
16002 bool queueSubmitWithCommandsEnabled =
16003 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16004 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16005 auto stream = mImpl->stream();
16006 auto pool = mImpl->pool();
16007 VkCommandBuffer local_commandBuffer;
16008 VkBool32 local_depthTestEnable;
16009 local_commandBuffer = commandBuffer;
16010 local_depthTestEnable = depthTestEnable;
16011 size_t count = 0;
16012 size_t* countPtr = &count;
16013 {
16014 uint64_t cgen_var_0;
16015 *countPtr += 1 * 8;
16016 *countPtr += sizeof(VkBool32);
16017 }
16018 uint32_t packetSize_vkCmdSetDepthTestEnable = 4 + 4 + count;
16019 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthTestEnable -= 8;
16020 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthTestEnable);
16021 uint8_t* packetBeginPtr = streamPtr;
16022 uint8_t** streamPtrPtr = &streamPtr;
16023 uint32_t opcode_vkCmdSetDepthTestEnable = OP_vkCmdSetDepthTestEnable;
16024 memcpy(streamPtr, &opcode_vkCmdSetDepthTestEnable, sizeof(uint32_t));
16025 streamPtr += sizeof(uint32_t);
16026 memcpy(streamPtr, &packetSize_vkCmdSetDepthTestEnable, sizeof(uint32_t));
16027 streamPtr += sizeof(uint32_t);
16028 if (!queueSubmitWithCommandsEnabled) {
16029 uint64_t cgen_var_0;
16030 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16031 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16032 *streamPtrPtr += 1 * 8;
16033 }
16034 memcpy(*streamPtrPtr, (VkBool32*)&local_depthTestEnable, sizeof(VkBool32));
16035 *streamPtrPtr += sizeof(VkBool32);
16036 ++encodeCount;
16037 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16038 pool->freeAll();
16039 stream->clearPool();
16040 }
16041 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16042 }
16043
vkCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer,VkBool32 depthWriteEnable,uint32_t doLock)16044 void VkEncoder::vkCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable,
16045 uint32_t doLock) {
16046 (void)doLock;
16047 bool queueSubmitWithCommandsEnabled =
16048 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16049 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16050 auto stream = mImpl->stream();
16051 auto pool = mImpl->pool();
16052 VkCommandBuffer local_commandBuffer;
16053 VkBool32 local_depthWriteEnable;
16054 local_commandBuffer = commandBuffer;
16055 local_depthWriteEnable = depthWriteEnable;
16056 size_t count = 0;
16057 size_t* countPtr = &count;
16058 {
16059 uint64_t cgen_var_0;
16060 *countPtr += 1 * 8;
16061 *countPtr += sizeof(VkBool32);
16062 }
16063 uint32_t packetSize_vkCmdSetDepthWriteEnable = 4 + 4 + count;
16064 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthWriteEnable -= 8;
16065 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthWriteEnable);
16066 uint8_t* packetBeginPtr = streamPtr;
16067 uint8_t** streamPtrPtr = &streamPtr;
16068 uint32_t opcode_vkCmdSetDepthWriteEnable = OP_vkCmdSetDepthWriteEnable;
16069 memcpy(streamPtr, &opcode_vkCmdSetDepthWriteEnable, sizeof(uint32_t));
16070 streamPtr += sizeof(uint32_t);
16071 memcpy(streamPtr, &packetSize_vkCmdSetDepthWriteEnable, sizeof(uint32_t));
16072 streamPtr += sizeof(uint32_t);
16073 if (!queueSubmitWithCommandsEnabled) {
16074 uint64_t cgen_var_0;
16075 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16076 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16077 *streamPtrPtr += 1 * 8;
16078 }
16079 memcpy(*streamPtrPtr, (VkBool32*)&local_depthWriteEnable, sizeof(VkBool32));
16080 *streamPtrPtr += sizeof(VkBool32);
16081 ++encodeCount;
16082 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16083 pool->freeAll();
16084 stream->clearPool();
16085 }
16086 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16087 }
16088
vkCmdSetDepthCompareOp(VkCommandBuffer commandBuffer,VkCompareOp depthCompareOp,uint32_t doLock)16089 void VkEncoder::vkCmdSetDepthCompareOp(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp,
16090 uint32_t doLock) {
16091 (void)doLock;
16092 bool queueSubmitWithCommandsEnabled =
16093 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16094 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16095 auto stream = mImpl->stream();
16096 auto pool = mImpl->pool();
16097 VkCommandBuffer local_commandBuffer;
16098 VkCompareOp local_depthCompareOp;
16099 local_commandBuffer = commandBuffer;
16100 local_depthCompareOp = depthCompareOp;
16101 size_t count = 0;
16102 size_t* countPtr = &count;
16103 {
16104 uint64_t cgen_var_0;
16105 *countPtr += 1 * 8;
16106 *countPtr += sizeof(VkCompareOp);
16107 }
16108 uint32_t packetSize_vkCmdSetDepthCompareOp = 4 + 4 + count;
16109 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthCompareOp -= 8;
16110 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthCompareOp);
16111 uint8_t* packetBeginPtr = streamPtr;
16112 uint8_t** streamPtrPtr = &streamPtr;
16113 uint32_t opcode_vkCmdSetDepthCompareOp = OP_vkCmdSetDepthCompareOp;
16114 memcpy(streamPtr, &opcode_vkCmdSetDepthCompareOp, sizeof(uint32_t));
16115 streamPtr += sizeof(uint32_t);
16116 memcpy(streamPtr, &packetSize_vkCmdSetDepthCompareOp, sizeof(uint32_t));
16117 streamPtr += sizeof(uint32_t);
16118 if (!queueSubmitWithCommandsEnabled) {
16119 uint64_t cgen_var_0;
16120 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16121 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16122 *streamPtrPtr += 1 * 8;
16123 }
16124 memcpy(*streamPtrPtr, (VkCompareOp*)&local_depthCompareOp, sizeof(VkCompareOp));
16125 *streamPtrPtr += sizeof(VkCompareOp);
16126 ++encodeCount;
16127 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16128 pool->freeAll();
16129 stream->clearPool();
16130 }
16131 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16132 }
16133
vkCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer,VkBool32 depthBoundsTestEnable,uint32_t doLock)16134 void VkEncoder::vkCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer,
16135 VkBool32 depthBoundsTestEnable, uint32_t doLock) {
16136 (void)doLock;
16137 bool queueSubmitWithCommandsEnabled =
16138 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16139 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16140 auto stream = mImpl->stream();
16141 auto pool = mImpl->pool();
16142 VkCommandBuffer local_commandBuffer;
16143 VkBool32 local_depthBoundsTestEnable;
16144 local_commandBuffer = commandBuffer;
16145 local_depthBoundsTestEnable = depthBoundsTestEnable;
16146 size_t count = 0;
16147 size_t* countPtr = &count;
16148 {
16149 uint64_t cgen_var_0;
16150 *countPtr += 1 * 8;
16151 *countPtr += sizeof(VkBool32);
16152 }
16153 uint32_t packetSize_vkCmdSetDepthBoundsTestEnable = 4 + 4 + count;
16154 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthBoundsTestEnable -= 8;
16155 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthBoundsTestEnable);
16156 uint8_t* packetBeginPtr = streamPtr;
16157 uint8_t** streamPtrPtr = &streamPtr;
16158 uint32_t opcode_vkCmdSetDepthBoundsTestEnable = OP_vkCmdSetDepthBoundsTestEnable;
16159 memcpy(streamPtr, &opcode_vkCmdSetDepthBoundsTestEnable, sizeof(uint32_t));
16160 streamPtr += sizeof(uint32_t);
16161 memcpy(streamPtr, &packetSize_vkCmdSetDepthBoundsTestEnable, sizeof(uint32_t));
16162 streamPtr += sizeof(uint32_t);
16163 if (!queueSubmitWithCommandsEnabled) {
16164 uint64_t cgen_var_0;
16165 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16166 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16167 *streamPtrPtr += 1 * 8;
16168 }
16169 memcpy(*streamPtrPtr, (VkBool32*)&local_depthBoundsTestEnable, sizeof(VkBool32));
16170 *streamPtrPtr += sizeof(VkBool32);
16171 ++encodeCount;
16172 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16173 pool->freeAll();
16174 stream->clearPool();
16175 }
16176 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16177 }
16178
vkCmdSetStencilTestEnable(VkCommandBuffer commandBuffer,VkBool32 stencilTestEnable,uint32_t doLock)16179 void VkEncoder::vkCmdSetStencilTestEnable(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable,
16180 uint32_t doLock) {
16181 (void)doLock;
16182 bool queueSubmitWithCommandsEnabled =
16183 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16184 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16185 auto stream = mImpl->stream();
16186 auto pool = mImpl->pool();
16187 VkCommandBuffer local_commandBuffer;
16188 VkBool32 local_stencilTestEnable;
16189 local_commandBuffer = commandBuffer;
16190 local_stencilTestEnable = stencilTestEnable;
16191 size_t count = 0;
16192 size_t* countPtr = &count;
16193 {
16194 uint64_t cgen_var_0;
16195 *countPtr += 1 * 8;
16196 *countPtr += sizeof(VkBool32);
16197 }
16198 uint32_t packetSize_vkCmdSetStencilTestEnable = 4 + 4 + count;
16199 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetStencilTestEnable -= 8;
16200 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetStencilTestEnable);
16201 uint8_t* packetBeginPtr = streamPtr;
16202 uint8_t** streamPtrPtr = &streamPtr;
16203 uint32_t opcode_vkCmdSetStencilTestEnable = OP_vkCmdSetStencilTestEnable;
16204 memcpy(streamPtr, &opcode_vkCmdSetStencilTestEnable, sizeof(uint32_t));
16205 streamPtr += sizeof(uint32_t);
16206 memcpy(streamPtr, &packetSize_vkCmdSetStencilTestEnable, sizeof(uint32_t));
16207 streamPtr += sizeof(uint32_t);
16208 if (!queueSubmitWithCommandsEnabled) {
16209 uint64_t cgen_var_0;
16210 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16211 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16212 *streamPtrPtr += 1 * 8;
16213 }
16214 memcpy(*streamPtrPtr, (VkBool32*)&local_stencilTestEnable, sizeof(VkBool32));
16215 *streamPtrPtr += sizeof(VkBool32);
16216 ++encodeCount;
16217 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16218 pool->freeAll();
16219 stream->clearPool();
16220 }
16221 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16222 }
16223
vkCmdSetStencilOp(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,VkStencilOp failOp,VkStencilOp passOp,VkStencilOp depthFailOp,VkCompareOp compareOp,uint32_t doLock)16224 void VkEncoder::vkCmdSetStencilOp(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
16225 VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp,
16226 VkCompareOp compareOp, uint32_t doLock) {
16227 (void)doLock;
16228 bool queueSubmitWithCommandsEnabled =
16229 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16230 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16231 auto stream = mImpl->stream();
16232 auto pool = mImpl->pool();
16233 VkCommandBuffer local_commandBuffer;
16234 VkStencilFaceFlags local_faceMask;
16235 VkStencilOp local_failOp;
16236 VkStencilOp local_passOp;
16237 VkStencilOp local_depthFailOp;
16238 VkCompareOp local_compareOp;
16239 local_commandBuffer = commandBuffer;
16240 local_faceMask = faceMask;
16241 local_failOp = failOp;
16242 local_passOp = passOp;
16243 local_depthFailOp = depthFailOp;
16244 local_compareOp = compareOp;
16245 size_t count = 0;
16246 size_t* countPtr = &count;
16247 {
16248 uint64_t cgen_var_0;
16249 *countPtr += 1 * 8;
16250 *countPtr += sizeof(VkStencilFaceFlags);
16251 *countPtr += sizeof(VkStencilOp);
16252 *countPtr += sizeof(VkStencilOp);
16253 *countPtr += sizeof(VkStencilOp);
16254 *countPtr += sizeof(VkCompareOp);
16255 }
16256 uint32_t packetSize_vkCmdSetStencilOp = 4 + 4 + count;
16257 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetStencilOp -= 8;
16258 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetStencilOp);
16259 uint8_t* packetBeginPtr = streamPtr;
16260 uint8_t** streamPtrPtr = &streamPtr;
16261 uint32_t opcode_vkCmdSetStencilOp = OP_vkCmdSetStencilOp;
16262 memcpy(streamPtr, &opcode_vkCmdSetStencilOp, sizeof(uint32_t));
16263 streamPtr += sizeof(uint32_t);
16264 memcpy(streamPtr, &packetSize_vkCmdSetStencilOp, sizeof(uint32_t));
16265 streamPtr += sizeof(uint32_t);
16266 if (!queueSubmitWithCommandsEnabled) {
16267 uint64_t cgen_var_0;
16268 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16269 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16270 *streamPtrPtr += 1 * 8;
16271 }
16272 memcpy(*streamPtrPtr, (VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
16273 *streamPtrPtr += sizeof(VkStencilFaceFlags);
16274 memcpy(*streamPtrPtr, (VkStencilOp*)&local_failOp, sizeof(VkStencilOp));
16275 *streamPtrPtr += sizeof(VkStencilOp);
16276 memcpy(*streamPtrPtr, (VkStencilOp*)&local_passOp, sizeof(VkStencilOp));
16277 *streamPtrPtr += sizeof(VkStencilOp);
16278 memcpy(*streamPtrPtr, (VkStencilOp*)&local_depthFailOp, sizeof(VkStencilOp));
16279 *streamPtrPtr += sizeof(VkStencilOp);
16280 memcpy(*streamPtrPtr, (VkCompareOp*)&local_compareOp, sizeof(VkCompareOp));
16281 *streamPtrPtr += sizeof(VkCompareOp);
16282 ++encodeCount;
16283 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16284 pool->freeAll();
16285 stream->clearPool();
16286 }
16287 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16288 }
16289
vkCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer,VkBool32 rasterizerDiscardEnable,uint32_t doLock)16290 void VkEncoder::vkCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer,
16291 VkBool32 rasterizerDiscardEnable, uint32_t doLock) {
16292 (void)doLock;
16293 bool queueSubmitWithCommandsEnabled =
16294 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16295 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16296 auto stream = mImpl->stream();
16297 auto pool = mImpl->pool();
16298 VkCommandBuffer local_commandBuffer;
16299 VkBool32 local_rasterizerDiscardEnable;
16300 local_commandBuffer = commandBuffer;
16301 local_rasterizerDiscardEnable = rasterizerDiscardEnable;
16302 size_t count = 0;
16303 size_t* countPtr = &count;
16304 {
16305 uint64_t cgen_var_0;
16306 *countPtr += 1 * 8;
16307 *countPtr += sizeof(VkBool32);
16308 }
16309 uint32_t packetSize_vkCmdSetRasterizerDiscardEnable = 4 + 4 + count;
16310 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetRasterizerDiscardEnable -= 8;
16311 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetRasterizerDiscardEnable);
16312 uint8_t* packetBeginPtr = streamPtr;
16313 uint8_t** streamPtrPtr = &streamPtr;
16314 uint32_t opcode_vkCmdSetRasterizerDiscardEnable = OP_vkCmdSetRasterizerDiscardEnable;
16315 memcpy(streamPtr, &opcode_vkCmdSetRasterizerDiscardEnable, sizeof(uint32_t));
16316 streamPtr += sizeof(uint32_t);
16317 memcpy(streamPtr, &packetSize_vkCmdSetRasterizerDiscardEnable, sizeof(uint32_t));
16318 streamPtr += sizeof(uint32_t);
16319 if (!queueSubmitWithCommandsEnabled) {
16320 uint64_t cgen_var_0;
16321 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16322 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16323 *streamPtrPtr += 1 * 8;
16324 }
16325 memcpy(*streamPtrPtr, (VkBool32*)&local_rasterizerDiscardEnable, sizeof(VkBool32));
16326 *streamPtrPtr += sizeof(VkBool32);
16327 ++encodeCount;
16328 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16329 pool->freeAll();
16330 stream->clearPool();
16331 }
16332 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16333 }
16334
vkCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer,VkBool32 depthBiasEnable,uint32_t doLock)16335 void VkEncoder::vkCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable,
16336 uint32_t doLock) {
16337 (void)doLock;
16338 bool queueSubmitWithCommandsEnabled =
16339 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16340 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16341 auto stream = mImpl->stream();
16342 auto pool = mImpl->pool();
16343 VkCommandBuffer local_commandBuffer;
16344 VkBool32 local_depthBiasEnable;
16345 local_commandBuffer = commandBuffer;
16346 local_depthBiasEnable = depthBiasEnable;
16347 size_t count = 0;
16348 size_t* countPtr = &count;
16349 {
16350 uint64_t cgen_var_0;
16351 *countPtr += 1 * 8;
16352 *countPtr += sizeof(VkBool32);
16353 }
16354 uint32_t packetSize_vkCmdSetDepthBiasEnable = 4 + 4 + count;
16355 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthBiasEnable -= 8;
16356 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthBiasEnable);
16357 uint8_t* packetBeginPtr = streamPtr;
16358 uint8_t** streamPtrPtr = &streamPtr;
16359 uint32_t opcode_vkCmdSetDepthBiasEnable = OP_vkCmdSetDepthBiasEnable;
16360 memcpy(streamPtr, &opcode_vkCmdSetDepthBiasEnable, sizeof(uint32_t));
16361 streamPtr += sizeof(uint32_t);
16362 memcpy(streamPtr, &packetSize_vkCmdSetDepthBiasEnable, sizeof(uint32_t));
16363 streamPtr += sizeof(uint32_t);
16364 if (!queueSubmitWithCommandsEnabled) {
16365 uint64_t cgen_var_0;
16366 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16367 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16368 *streamPtrPtr += 1 * 8;
16369 }
16370 memcpy(*streamPtrPtr, (VkBool32*)&local_depthBiasEnable, sizeof(VkBool32));
16371 *streamPtrPtr += sizeof(VkBool32);
16372 ++encodeCount;
16373 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16374 pool->freeAll();
16375 stream->clearPool();
16376 }
16377 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16378 }
16379
vkCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer,VkBool32 primitiveRestartEnable,uint32_t doLock)16380 void VkEncoder::vkCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer,
16381 VkBool32 primitiveRestartEnable, uint32_t doLock) {
16382 (void)doLock;
16383 bool queueSubmitWithCommandsEnabled =
16384 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16385 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16386 auto stream = mImpl->stream();
16387 auto pool = mImpl->pool();
16388 VkCommandBuffer local_commandBuffer;
16389 VkBool32 local_primitiveRestartEnable;
16390 local_commandBuffer = commandBuffer;
16391 local_primitiveRestartEnable = primitiveRestartEnable;
16392 size_t count = 0;
16393 size_t* countPtr = &count;
16394 {
16395 uint64_t cgen_var_0;
16396 *countPtr += 1 * 8;
16397 *countPtr += sizeof(VkBool32);
16398 }
16399 uint32_t packetSize_vkCmdSetPrimitiveRestartEnable = 4 + 4 + count;
16400 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetPrimitiveRestartEnable -= 8;
16401 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetPrimitiveRestartEnable);
16402 uint8_t* packetBeginPtr = streamPtr;
16403 uint8_t** streamPtrPtr = &streamPtr;
16404 uint32_t opcode_vkCmdSetPrimitiveRestartEnable = OP_vkCmdSetPrimitiveRestartEnable;
16405 memcpy(streamPtr, &opcode_vkCmdSetPrimitiveRestartEnable, sizeof(uint32_t));
16406 streamPtr += sizeof(uint32_t);
16407 memcpy(streamPtr, &packetSize_vkCmdSetPrimitiveRestartEnable, sizeof(uint32_t));
16408 streamPtr += sizeof(uint32_t);
16409 if (!queueSubmitWithCommandsEnabled) {
16410 uint64_t cgen_var_0;
16411 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16412 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16413 *streamPtrPtr += 1 * 8;
16414 }
16415 memcpy(*streamPtrPtr, (VkBool32*)&local_primitiveRestartEnable, sizeof(VkBool32));
16416 *streamPtrPtr += sizeof(VkBool32);
16417 ++encodeCount;
16418 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16419 pool->freeAll();
16420 stream->clearPool();
16421 }
16422 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16423 }
16424
vkGetDeviceBufferMemoryRequirements(VkDevice device,const VkDeviceBufferMemoryRequirements * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)16425 void VkEncoder::vkGetDeviceBufferMemoryRequirements(VkDevice device,
16426 const VkDeviceBufferMemoryRequirements* pInfo,
16427 VkMemoryRequirements2* pMemoryRequirements,
16428 uint32_t doLock) {
16429 (void)doLock;
16430 bool queueSubmitWithCommandsEnabled =
16431 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16432 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16433 auto stream = mImpl->stream();
16434 auto pool = mImpl->pool();
16435 VkDevice local_device;
16436 VkDeviceBufferMemoryRequirements* local_pInfo;
16437 local_device = device;
16438 local_pInfo = nullptr;
16439 if (pInfo) {
16440 local_pInfo = (VkDeviceBufferMemoryRequirements*)pool->alloc(
16441 sizeof(const VkDeviceBufferMemoryRequirements));
16442 deepcopy_VkDeviceBufferMemoryRequirements(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
16443 (VkDeviceBufferMemoryRequirements*)(local_pInfo));
16444 }
16445 if (local_pInfo) {
16446 transform_tohost_VkDeviceBufferMemoryRequirements(
16447 sResourceTracker, (VkDeviceBufferMemoryRequirements*)(local_pInfo));
16448 }
16449 size_t count = 0;
16450 size_t* countPtr = &count;
16451 {
16452 uint64_t cgen_var_0;
16453 *countPtr += 1 * 8;
16454 count_VkDeviceBufferMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16455 (VkDeviceBufferMemoryRequirements*)(local_pInfo),
16456 countPtr);
16457 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16458 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
16459 }
16460 uint32_t packetSize_vkGetDeviceBufferMemoryRequirements =
16461 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
16462 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceBufferMemoryRequirements);
16463 uint8_t* packetBeginPtr = streamPtr;
16464 uint8_t** streamPtrPtr = &streamPtr;
16465 uint32_t opcode_vkGetDeviceBufferMemoryRequirements = OP_vkGetDeviceBufferMemoryRequirements;
16466 uint32_t seqno;
16467 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
16468 memcpy(streamPtr, &opcode_vkGetDeviceBufferMemoryRequirements, sizeof(uint32_t));
16469 streamPtr += sizeof(uint32_t);
16470 memcpy(streamPtr, &packetSize_vkGetDeviceBufferMemoryRequirements, sizeof(uint32_t));
16471 streamPtr += sizeof(uint32_t);
16472 if (queueSubmitWithCommandsEnabled) {
16473 memcpy(streamPtr, &seqno, sizeof(uint32_t));
16474 streamPtr += sizeof(uint32_t);
16475 }
16476 uint64_t cgen_var_0;
16477 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
16478 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16479 *streamPtrPtr += 1 * 8;
16480 reservedmarshal_VkDeviceBufferMemoryRequirements(
16481 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceBufferMemoryRequirements*)(local_pInfo),
16482 streamPtrPtr);
16483 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16484 (VkMemoryRequirements2*)(pMemoryRequirements),
16485 streamPtrPtr);
16486 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16487 (VkMemoryRequirements2*)(pMemoryRequirements));
16488 if (pMemoryRequirements) {
16489 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
16490 (VkMemoryRequirements2*)(pMemoryRequirements));
16491 }
16492 ++encodeCount;
16493 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16494 pool->freeAll();
16495 stream->clearPool();
16496 }
16497 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16498 }
16499
vkGetDeviceImageMemoryRequirements(VkDevice device,const VkDeviceImageMemoryRequirements * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)16500 void VkEncoder::vkGetDeviceImageMemoryRequirements(VkDevice device,
16501 const VkDeviceImageMemoryRequirements* pInfo,
16502 VkMemoryRequirements2* pMemoryRequirements,
16503 uint32_t doLock) {
16504 (void)doLock;
16505 bool queueSubmitWithCommandsEnabled =
16506 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16507 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16508 auto stream = mImpl->stream();
16509 auto pool = mImpl->pool();
16510 VkDevice local_device;
16511 VkDeviceImageMemoryRequirements* local_pInfo;
16512 local_device = device;
16513 local_pInfo = nullptr;
16514 if (pInfo) {
16515 local_pInfo = (VkDeviceImageMemoryRequirements*)pool->alloc(
16516 sizeof(const VkDeviceImageMemoryRequirements));
16517 deepcopy_VkDeviceImageMemoryRequirements(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
16518 (VkDeviceImageMemoryRequirements*)(local_pInfo));
16519 }
16520 if (local_pInfo) {
16521 transform_tohost_VkDeviceImageMemoryRequirements(
16522 sResourceTracker, (VkDeviceImageMemoryRequirements*)(local_pInfo));
16523 }
16524 size_t count = 0;
16525 size_t* countPtr = &count;
16526 {
16527 uint64_t cgen_var_0;
16528 *countPtr += 1 * 8;
16529 count_VkDeviceImageMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16530 (VkDeviceImageMemoryRequirements*)(local_pInfo),
16531 countPtr);
16532 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16533 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
16534 }
16535 uint32_t packetSize_vkGetDeviceImageMemoryRequirements =
16536 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
16537 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceImageMemoryRequirements);
16538 uint8_t* packetBeginPtr = streamPtr;
16539 uint8_t** streamPtrPtr = &streamPtr;
16540 uint32_t opcode_vkGetDeviceImageMemoryRequirements = OP_vkGetDeviceImageMemoryRequirements;
16541 uint32_t seqno;
16542 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
16543 memcpy(streamPtr, &opcode_vkGetDeviceImageMemoryRequirements, sizeof(uint32_t));
16544 streamPtr += sizeof(uint32_t);
16545 memcpy(streamPtr, &packetSize_vkGetDeviceImageMemoryRequirements, sizeof(uint32_t));
16546 streamPtr += sizeof(uint32_t);
16547 if (queueSubmitWithCommandsEnabled) {
16548 memcpy(streamPtr, &seqno, sizeof(uint32_t));
16549 streamPtr += sizeof(uint32_t);
16550 }
16551 uint64_t cgen_var_0;
16552 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
16553 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16554 *streamPtrPtr += 1 * 8;
16555 reservedmarshal_VkDeviceImageMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16556 (VkDeviceImageMemoryRequirements*)(local_pInfo),
16557 streamPtrPtr);
16558 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16559 (VkMemoryRequirements2*)(pMemoryRequirements),
16560 streamPtrPtr);
16561 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16562 (VkMemoryRequirements2*)(pMemoryRequirements));
16563 if (pMemoryRequirements) {
16564 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
16565 (VkMemoryRequirements2*)(pMemoryRequirements));
16566 }
16567 ++encodeCount;
16568 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16569 pool->freeAll();
16570 stream->clearPool();
16571 }
16572 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16573 }
16574
vkGetDeviceImageSparseMemoryRequirements(VkDevice device,const VkDeviceImageMemoryRequirements * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements,uint32_t doLock)16575 void VkEncoder::vkGetDeviceImageSparseMemoryRequirements(
16576 VkDevice device, const VkDeviceImageMemoryRequirements* pInfo,
16577 uint32_t* pSparseMemoryRequirementCount,
16578 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements, uint32_t doLock) {
16579 (void)doLock;
16580 bool queueSubmitWithCommandsEnabled =
16581 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16582 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16583 auto stream = mImpl->stream();
16584 auto pool = mImpl->pool();
16585 VkDevice local_device;
16586 VkDeviceImageMemoryRequirements* local_pInfo;
16587 local_device = device;
16588 local_pInfo = nullptr;
16589 if (pInfo) {
16590 local_pInfo = (VkDeviceImageMemoryRequirements*)pool->alloc(
16591 sizeof(const VkDeviceImageMemoryRequirements));
16592 deepcopy_VkDeviceImageMemoryRequirements(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
16593 (VkDeviceImageMemoryRequirements*)(local_pInfo));
16594 }
16595 if (local_pInfo) {
16596 transform_tohost_VkDeviceImageMemoryRequirements(
16597 sResourceTracker, (VkDeviceImageMemoryRequirements*)(local_pInfo));
16598 }
16599 size_t count = 0;
16600 size_t* countPtr = &count;
16601 {
16602 uint64_t cgen_var_0;
16603 *countPtr += 1 * 8;
16604 count_VkDeviceImageMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16605 (VkDeviceImageMemoryRequirements*)(local_pInfo),
16606 countPtr);
16607 // WARNING PTR CHECK
16608 *countPtr += 8;
16609 if (pSparseMemoryRequirementCount) {
16610 *countPtr += sizeof(uint32_t);
16611 }
16612 // WARNING PTR CHECK
16613 *countPtr += 8;
16614 if (pSparseMemoryRequirements) {
16615 if (pSparseMemoryRequirementCount) {
16616 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
16617 count_VkSparseImageMemoryRequirements2(
16618 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16619 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i),
16620 countPtr);
16621 }
16622 }
16623 }
16624 }
16625 uint32_t packetSize_vkGetDeviceImageSparseMemoryRequirements =
16626 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
16627 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceImageSparseMemoryRequirements);
16628 uint8_t* packetBeginPtr = streamPtr;
16629 uint8_t** streamPtrPtr = &streamPtr;
16630 uint32_t opcode_vkGetDeviceImageSparseMemoryRequirements =
16631 OP_vkGetDeviceImageSparseMemoryRequirements;
16632 uint32_t seqno;
16633 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
16634 memcpy(streamPtr, &opcode_vkGetDeviceImageSparseMemoryRequirements, sizeof(uint32_t));
16635 streamPtr += sizeof(uint32_t);
16636 memcpy(streamPtr, &packetSize_vkGetDeviceImageSparseMemoryRequirements, sizeof(uint32_t));
16637 streamPtr += sizeof(uint32_t);
16638 if (queueSubmitWithCommandsEnabled) {
16639 memcpy(streamPtr, &seqno, sizeof(uint32_t));
16640 streamPtr += sizeof(uint32_t);
16641 }
16642 uint64_t cgen_var_0;
16643 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
16644 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16645 *streamPtrPtr += 1 * 8;
16646 reservedmarshal_VkDeviceImageMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16647 (VkDeviceImageMemoryRequirements*)(local_pInfo),
16648 streamPtrPtr);
16649 // WARNING PTR CHECK
16650 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
16651 memcpy((*streamPtrPtr), &cgen_var_1, 8);
16652 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
16653 *streamPtrPtr += 8;
16654 if (pSparseMemoryRequirementCount) {
16655 memcpy(*streamPtrPtr, (uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
16656 *streamPtrPtr += sizeof(uint32_t);
16657 }
16658 // WARNING PTR CHECK
16659 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
16660 memcpy((*streamPtrPtr), &cgen_var_2, 8);
16661 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
16662 *streamPtrPtr += 8;
16663 if (pSparseMemoryRequirements) {
16664 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
16665 reservedmarshal_VkSparseImageMemoryRequirements2(
16666 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16667 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), streamPtrPtr);
16668 }
16669 }
16670 // WARNING PTR CHECK
16671 uint32_t* check_pSparseMemoryRequirementCount;
16672 check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
16673 if (pSparseMemoryRequirementCount) {
16674 if (!(check_pSparseMemoryRequirementCount)) {
16675 fprintf(stderr,
16676 "fatal: pSparseMemoryRequirementCount inconsistent between guest and host\n");
16677 }
16678 stream->read((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
16679 }
16680 // WARNING PTR CHECK
16681 VkSparseImageMemoryRequirements2* check_pSparseMemoryRequirements;
16682 check_pSparseMemoryRequirements =
16683 (VkSparseImageMemoryRequirements2*)(uintptr_t)stream->getBe64();
16684 if (pSparseMemoryRequirements) {
16685 if (!(check_pSparseMemoryRequirements)) {
16686 fprintf(stderr,
16687 "fatal: pSparseMemoryRequirements inconsistent between guest and host\n");
16688 }
16689 if (pSparseMemoryRequirementCount) {
16690 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
16691 unmarshal_VkSparseImageMemoryRequirements2(
16692 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16693 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
16694 }
16695 }
16696 }
16697 if (pSparseMemoryRequirementCount) {
16698 if (pSparseMemoryRequirements) {
16699 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
16700 transform_fromhost_VkSparseImageMemoryRequirements2(
16701 sResourceTracker,
16702 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
16703 }
16704 }
16705 }
16706 ++encodeCount;
16707 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16708 pool->freeAll();
16709 stream->clearPool();
16710 }
16711 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16712 }
16713
16714 #endif
16715 #ifdef VK_KHR_dynamic_rendering
vkCmdBeginRenderingKHR(VkCommandBuffer commandBuffer,const VkRenderingInfo * pRenderingInfo,uint32_t doLock)16716 void VkEncoder::vkCmdBeginRenderingKHR(VkCommandBuffer commandBuffer,
16717 const VkRenderingInfo* pRenderingInfo, uint32_t doLock) {
16718 (void)doLock;
16719 bool queueSubmitWithCommandsEnabled =
16720 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16721 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16722 auto stream = mImpl->stream();
16723 auto pool = mImpl->pool();
16724 VkCommandBuffer local_commandBuffer;
16725 VkRenderingInfo* local_pRenderingInfo;
16726 local_commandBuffer = commandBuffer;
16727 local_pRenderingInfo = nullptr;
16728 if (pRenderingInfo) {
16729 local_pRenderingInfo = (VkRenderingInfo*)pool->alloc(sizeof(const VkRenderingInfo));
16730 deepcopy_VkRenderingInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderingInfo,
16731 (VkRenderingInfo*)(local_pRenderingInfo));
16732 }
16733 if (local_pRenderingInfo) {
16734 transform_tohost_VkRenderingInfo(sResourceTracker,
16735 (VkRenderingInfo*)(local_pRenderingInfo));
16736 }
16737 size_t count = 0;
16738 size_t* countPtr = &count;
16739 {
16740 uint64_t cgen_var_0;
16741 *countPtr += 1 * 8;
16742 count_VkRenderingInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16743 (VkRenderingInfo*)(local_pRenderingInfo), countPtr);
16744 }
16745 uint32_t packetSize_vkCmdBeginRenderingKHR = 4 + 4 + count;
16746 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginRenderingKHR -= 8;
16747 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginRenderingKHR);
16748 uint8_t* packetBeginPtr = streamPtr;
16749 uint8_t** streamPtrPtr = &streamPtr;
16750 uint32_t opcode_vkCmdBeginRenderingKHR = OP_vkCmdBeginRenderingKHR;
16751 memcpy(streamPtr, &opcode_vkCmdBeginRenderingKHR, sizeof(uint32_t));
16752 streamPtr += sizeof(uint32_t);
16753 memcpy(streamPtr, &packetSize_vkCmdBeginRenderingKHR, sizeof(uint32_t));
16754 streamPtr += sizeof(uint32_t);
16755 if (!queueSubmitWithCommandsEnabled) {
16756 uint64_t cgen_var_0;
16757 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16758 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16759 *streamPtrPtr += 1 * 8;
16760 }
16761 reservedmarshal_VkRenderingInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16762 (VkRenderingInfo*)(local_pRenderingInfo), streamPtrPtr);
16763 ++encodeCount;
16764 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16765 pool->freeAll();
16766 stream->clearPool();
16767 }
16768 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16769 }
16770
vkCmdEndRenderingKHR(VkCommandBuffer commandBuffer,uint32_t doLock)16771 void VkEncoder::vkCmdEndRenderingKHR(VkCommandBuffer commandBuffer, uint32_t doLock) {
16772 (void)doLock;
16773 bool queueSubmitWithCommandsEnabled =
16774 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16775 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16776 auto stream = mImpl->stream();
16777 auto pool = mImpl->pool();
16778 VkCommandBuffer local_commandBuffer;
16779 local_commandBuffer = commandBuffer;
16780 size_t count = 0;
16781 size_t* countPtr = &count;
16782 {
16783 uint64_t cgen_var_0;
16784 *countPtr += 1 * 8;
16785 }
16786 uint32_t packetSize_vkCmdEndRenderingKHR = 4 + 4 + count;
16787 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndRenderingKHR -= 8;
16788 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndRenderingKHR);
16789 uint8_t* packetBeginPtr = streamPtr;
16790 uint8_t** streamPtrPtr = &streamPtr;
16791 uint32_t opcode_vkCmdEndRenderingKHR = OP_vkCmdEndRenderingKHR;
16792 memcpy(streamPtr, &opcode_vkCmdEndRenderingKHR, sizeof(uint32_t));
16793 streamPtr += sizeof(uint32_t);
16794 memcpy(streamPtr, &packetSize_vkCmdEndRenderingKHR, sizeof(uint32_t));
16795 streamPtr += sizeof(uint32_t);
16796 if (!queueSubmitWithCommandsEnabled) {
16797 uint64_t cgen_var_0;
16798 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16799 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16800 *streamPtrPtr += 1 * 8;
16801 }
16802 ++encodeCount;
16803 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16804 pool->freeAll();
16805 stream->clearPool();
16806 }
16807 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16808 }
16809
16810 #endif
16811 #ifdef VK_KHR_get_physical_device_properties2
vkGetPhysicalDeviceFeatures2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures2 * pFeatures,uint32_t doLock)16812 void VkEncoder::vkGetPhysicalDeviceFeatures2KHR(VkPhysicalDevice physicalDevice,
16813 VkPhysicalDeviceFeatures2* pFeatures,
16814 uint32_t doLock) {
16815 (void)doLock;
16816 bool queueSubmitWithCommandsEnabled =
16817 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16818 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16819 auto stream = mImpl->stream();
16820 auto pool = mImpl->pool();
16821 VkPhysicalDevice local_physicalDevice;
16822 local_physicalDevice = physicalDevice;
16823 size_t count = 0;
16824 size_t* countPtr = &count;
16825 {
16826 uint64_t cgen_var_0;
16827 *countPtr += 1 * 8;
16828 count_VkPhysicalDeviceFeatures2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16829 (VkPhysicalDeviceFeatures2*)(pFeatures), countPtr);
16830 }
16831 uint32_t packetSize_vkGetPhysicalDeviceFeatures2KHR =
16832 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
16833 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFeatures2KHR);
16834 uint8_t* packetBeginPtr = streamPtr;
16835 uint8_t** streamPtrPtr = &streamPtr;
16836 uint32_t opcode_vkGetPhysicalDeviceFeatures2KHR = OP_vkGetPhysicalDeviceFeatures2KHR;
16837 uint32_t seqno;
16838 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
16839 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceFeatures2KHR, sizeof(uint32_t));
16840 streamPtr += sizeof(uint32_t);
16841 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceFeatures2KHR, sizeof(uint32_t));
16842 streamPtr += sizeof(uint32_t);
16843 if (queueSubmitWithCommandsEnabled) {
16844 memcpy(streamPtr, &seqno, sizeof(uint32_t));
16845 streamPtr += sizeof(uint32_t);
16846 }
16847 uint64_t cgen_var_0;
16848 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
16849 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16850 *streamPtrPtr += 1 * 8;
16851 reservedmarshal_VkPhysicalDeviceFeatures2(
16852 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures2*)(pFeatures), streamPtrPtr);
16853 unmarshal_VkPhysicalDeviceFeatures2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16854 (VkPhysicalDeviceFeatures2*)(pFeatures));
16855 if (pFeatures) {
16856 transform_fromhost_VkPhysicalDeviceFeatures2(sResourceTracker,
16857 (VkPhysicalDeviceFeatures2*)(pFeatures));
16858 }
16859 sResourceTracker->on_vkGetPhysicalDeviceFeatures2KHR(this, physicalDevice, pFeatures);
16860 ++encodeCount;
16861 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16862 pool->freeAll();
16863 stream->clearPool();
16864 }
16865 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16866 }
16867
vkGetPhysicalDeviceProperties2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties2 * pProperties,uint32_t doLock)16868 void VkEncoder::vkGetPhysicalDeviceProperties2KHR(VkPhysicalDevice physicalDevice,
16869 VkPhysicalDeviceProperties2* pProperties,
16870 uint32_t doLock) {
16871 (void)doLock;
16872 bool queueSubmitWithCommandsEnabled =
16873 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16874 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16875 auto stream = mImpl->stream();
16876 auto pool = mImpl->pool();
16877 VkPhysicalDevice local_physicalDevice;
16878 local_physicalDevice = physicalDevice;
16879 size_t count = 0;
16880 size_t* countPtr = &count;
16881 {
16882 uint64_t cgen_var_0;
16883 *countPtr += 1 * 8;
16884 count_VkPhysicalDeviceProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16885 (VkPhysicalDeviceProperties2*)(pProperties), countPtr);
16886 }
16887 uint32_t packetSize_vkGetPhysicalDeviceProperties2KHR =
16888 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
16889 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceProperties2KHR);
16890 uint8_t* packetBeginPtr = streamPtr;
16891 uint8_t** streamPtrPtr = &streamPtr;
16892 uint32_t opcode_vkGetPhysicalDeviceProperties2KHR = OP_vkGetPhysicalDeviceProperties2KHR;
16893 uint32_t seqno;
16894 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
16895 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceProperties2KHR, sizeof(uint32_t));
16896 streamPtr += sizeof(uint32_t);
16897 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceProperties2KHR, sizeof(uint32_t));
16898 streamPtr += sizeof(uint32_t);
16899 if (queueSubmitWithCommandsEnabled) {
16900 memcpy(streamPtr, &seqno, sizeof(uint32_t));
16901 streamPtr += sizeof(uint32_t);
16902 }
16903 uint64_t cgen_var_0;
16904 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
16905 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16906 *streamPtrPtr += 1 * 8;
16907 reservedmarshal_VkPhysicalDeviceProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16908 (VkPhysicalDeviceProperties2*)(pProperties),
16909 streamPtrPtr);
16910 unmarshal_VkPhysicalDeviceProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16911 (VkPhysicalDeviceProperties2*)(pProperties));
16912 if (pProperties) {
16913 transform_fromhost_VkPhysicalDeviceProperties2(sResourceTracker,
16914 (VkPhysicalDeviceProperties2*)(pProperties));
16915 }
16916 sResourceTracker->on_vkGetPhysicalDeviceProperties2KHR(this, physicalDevice, pProperties);
16917 ++encodeCount;
16918 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16919 pool->freeAll();
16920 stream->clearPool();
16921 }
16922 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16923 }
16924
vkGetPhysicalDeviceFormatProperties2KHR(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties2 * pFormatProperties,uint32_t doLock)16925 void VkEncoder::vkGetPhysicalDeviceFormatProperties2KHR(VkPhysicalDevice physicalDevice,
16926 VkFormat format,
16927 VkFormatProperties2* pFormatProperties,
16928 uint32_t doLock) {
16929 (void)doLock;
16930 bool queueSubmitWithCommandsEnabled =
16931 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16932 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16933 auto stream = mImpl->stream();
16934 auto pool = mImpl->pool();
16935 VkPhysicalDevice local_physicalDevice;
16936 VkFormat local_format;
16937 local_physicalDevice = physicalDevice;
16938 local_format = format;
16939 size_t count = 0;
16940 size_t* countPtr = &count;
16941 {
16942 uint64_t cgen_var_0;
16943 *countPtr += 1 * 8;
16944 *countPtr += sizeof(VkFormat);
16945 count_VkFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16946 (VkFormatProperties2*)(pFormatProperties), countPtr);
16947 }
16948 uint32_t packetSize_vkGetPhysicalDeviceFormatProperties2KHR =
16949 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
16950 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFormatProperties2KHR);
16951 uint8_t* packetBeginPtr = streamPtr;
16952 uint8_t** streamPtrPtr = &streamPtr;
16953 uint32_t opcode_vkGetPhysicalDeviceFormatProperties2KHR =
16954 OP_vkGetPhysicalDeviceFormatProperties2KHR;
16955 uint32_t seqno;
16956 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
16957 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceFormatProperties2KHR, sizeof(uint32_t));
16958 streamPtr += sizeof(uint32_t);
16959 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceFormatProperties2KHR, sizeof(uint32_t));
16960 streamPtr += sizeof(uint32_t);
16961 if (queueSubmitWithCommandsEnabled) {
16962 memcpy(streamPtr, &seqno, sizeof(uint32_t));
16963 streamPtr += sizeof(uint32_t);
16964 }
16965 uint64_t cgen_var_0;
16966 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
16967 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16968 *streamPtrPtr += 1 * 8;
16969 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
16970 *streamPtrPtr += sizeof(VkFormat);
16971 reservedmarshal_VkFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16972 (VkFormatProperties2*)(pFormatProperties), streamPtrPtr);
16973 unmarshal_VkFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16974 (VkFormatProperties2*)(pFormatProperties));
16975 if (pFormatProperties) {
16976 transform_fromhost_VkFormatProperties2(sResourceTracker,
16977 (VkFormatProperties2*)(pFormatProperties));
16978 }
16979 ++encodeCount;
16980 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16981 pool->freeAll();
16982 stream->clearPool();
16983 }
16984 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16985 }
16986
vkGetPhysicalDeviceImageFormatProperties2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo,VkImageFormatProperties2 * pImageFormatProperties,uint32_t doLock)16987 VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2KHR(
16988 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
16989 VkImageFormatProperties2* pImageFormatProperties, uint32_t doLock) {
16990 (void)doLock;
16991 bool queueSubmitWithCommandsEnabled =
16992 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16993 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16994 auto stream = mImpl->stream();
16995 auto pool = mImpl->pool();
16996 VkPhysicalDevice local_physicalDevice;
16997 VkPhysicalDeviceImageFormatInfo2* local_pImageFormatInfo;
16998 local_physicalDevice = physicalDevice;
16999 local_pImageFormatInfo = nullptr;
17000 if (pImageFormatInfo) {
17001 local_pImageFormatInfo = (VkPhysicalDeviceImageFormatInfo2*)pool->alloc(
17002 sizeof(const VkPhysicalDeviceImageFormatInfo2));
17003 deepcopy_VkPhysicalDeviceImageFormatInfo2(
17004 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageFormatInfo,
17005 (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
17006 }
17007 if (local_pImageFormatInfo) {
17008 transform_tohost_VkPhysicalDeviceImageFormatInfo2(
17009 sResourceTracker, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
17010 }
17011 size_t count = 0;
17012 size_t* countPtr = &count;
17013 {
17014 uint64_t cgen_var_0;
17015 *countPtr += 1 * 8;
17016 count_VkPhysicalDeviceImageFormatInfo2(
17017 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17018 (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), countPtr);
17019 count_VkImageFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17020 (VkImageFormatProperties2*)(pImageFormatProperties),
17021 countPtr);
17022 }
17023 uint32_t packetSize_vkGetPhysicalDeviceImageFormatProperties2KHR =
17024 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17025 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceImageFormatProperties2KHR);
17026 uint8_t* packetBeginPtr = streamPtr;
17027 uint8_t** streamPtrPtr = &streamPtr;
17028 uint32_t opcode_vkGetPhysicalDeviceImageFormatProperties2KHR =
17029 OP_vkGetPhysicalDeviceImageFormatProperties2KHR;
17030 uint32_t seqno;
17031 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17032 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceImageFormatProperties2KHR, sizeof(uint32_t));
17033 streamPtr += sizeof(uint32_t);
17034 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceImageFormatProperties2KHR, sizeof(uint32_t));
17035 streamPtr += sizeof(uint32_t);
17036 if (queueSubmitWithCommandsEnabled) {
17037 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17038 streamPtr += sizeof(uint32_t);
17039 }
17040 uint64_t cgen_var_0;
17041 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
17042 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17043 *streamPtrPtr += 1 * 8;
17044 reservedmarshal_VkPhysicalDeviceImageFormatInfo2(
17045 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17046 (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), streamPtrPtr);
17047 reservedmarshal_VkImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17048 (VkImageFormatProperties2*)(pImageFormatProperties),
17049 streamPtrPtr);
17050 unmarshal_VkImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17051 (VkImageFormatProperties2*)(pImageFormatProperties));
17052 if (pImageFormatProperties) {
17053 transform_fromhost_VkImageFormatProperties2(
17054 sResourceTracker, (VkImageFormatProperties2*)(pImageFormatProperties));
17055 }
17056 VkResult vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return = (VkResult)0;
17057 stream->read(&vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return, sizeof(VkResult));
17058 ++encodeCount;
17059 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17060 pool->freeAll();
17061 stream->clearPool();
17062 }
17063 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17064 return vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return;
17065 }
17066
vkGetPhysicalDeviceQueueFamilyProperties2KHR(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties2 * pQueueFamilyProperties,uint32_t doLock)17067 void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties2KHR(
17068 VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount,
17069 VkQueueFamilyProperties2* pQueueFamilyProperties, uint32_t doLock) {
17070 (void)doLock;
17071 bool queueSubmitWithCommandsEnabled =
17072 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17073 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17074 auto stream = mImpl->stream();
17075 auto pool = mImpl->pool();
17076 VkPhysicalDevice local_physicalDevice;
17077 local_physicalDevice = physicalDevice;
17078 size_t count = 0;
17079 size_t* countPtr = &count;
17080 {
17081 uint64_t cgen_var_0;
17082 *countPtr += 1 * 8;
17083 // WARNING PTR CHECK
17084 *countPtr += 8;
17085 if (pQueueFamilyPropertyCount) {
17086 *countPtr += sizeof(uint32_t);
17087 }
17088 // WARNING PTR CHECK
17089 *countPtr += 8;
17090 if (pQueueFamilyProperties) {
17091 if (pQueueFamilyPropertyCount) {
17092 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
17093 count_VkQueueFamilyProperties2(
17094 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17095 (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), countPtr);
17096 }
17097 }
17098 }
17099 }
17100 uint32_t packetSize_vkGetPhysicalDeviceQueueFamilyProperties2KHR =
17101 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17102 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceQueueFamilyProperties2KHR);
17103 uint8_t* packetBeginPtr = streamPtr;
17104 uint8_t** streamPtrPtr = &streamPtr;
17105 uint32_t opcode_vkGetPhysicalDeviceQueueFamilyProperties2KHR =
17106 OP_vkGetPhysicalDeviceQueueFamilyProperties2KHR;
17107 uint32_t seqno;
17108 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17109 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceQueueFamilyProperties2KHR, sizeof(uint32_t));
17110 streamPtr += sizeof(uint32_t);
17111 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceQueueFamilyProperties2KHR, sizeof(uint32_t));
17112 streamPtr += sizeof(uint32_t);
17113 if (queueSubmitWithCommandsEnabled) {
17114 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17115 streamPtr += sizeof(uint32_t);
17116 }
17117 uint64_t cgen_var_0;
17118 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
17119 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17120 *streamPtrPtr += 1 * 8;
17121 // WARNING PTR CHECK
17122 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
17123 memcpy((*streamPtrPtr), &cgen_var_1, 8);
17124 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
17125 *streamPtrPtr += 8;
17126 if (pQueueFamilyPropertyCount) {
17127 memcpy(*streamPtrPtr, (uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
17128 *streamPtrPtr += sizeof(uint32_t);
17129 }
17130 // WARNING PTR CHECK
17131 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
17132 memcpy((*streamPtrPtr), &cgen_var_2, 8);
17133 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
17134 *streamPtrPtr += 8;
17135 if (pQueueFamilyProperties) {
17136 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
17137 reservedmarshal_VkQueueFamilyProperties2(
17138 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17139 (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), streamPtrPtr);
17140 }
17141 }
17142 // WARNING PTR CHECK
17143 uint32_t* check_pQueueFamilyPropertyCount;
17144 check_pQueueFamilyPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
17145 if (pQueueFamilyPropertyCount) {
17146 if (!(check_pQueueFamilyPropertyCount)) {
17147 fprintf(stderr,
17148 "fatal: pQueueFamilyPropertyCount inconsistent between guest and host\n");
17149 }
17150 stream->read((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
17151 }
17152 // WARNING PTR CHECK
17153 VkQueueFamilyProperties2* check_pQueueFamilyProperties;
17154 check_pQueueFamilyProperties = (VkQueueFamilyProperties2*)(uintptr_t)stream->getBe64();
17155 if (pQueueFamilyProperties) {
17156 if (!(check_pQueueFamilyProperties)) {
17157 fprintf(stderr, "fatal: pQueueFamilyProperties inconsistent between guest and host\n");
17158 }
17159 if (pQueueFamilyPropertyCount) {
17160 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
17161 unmarshal_VkQueueFamilyProperties2(
17162 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17163 (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
17164 }
17165 }
17166 }
17167 if (pQueueFamilyPropertyCount) {
17168 if (pQueueFamilyProperties) {
17169 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
17170 transform_fromhost_VkQueueFamilyProperties2(
17171 sResourceTracker, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
17172 }
17173 }
17174 }
17175 ++encodeCount;
17176 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17177 pool->freeAll();
17178 stream->clearPool();
17179 }
17180 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17181 }
17182
vkGetPhysicalDeviceMemoryProperties2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties2 * pMemoryProperties,uint32_t doLock)17183 void VkEncoder::vkGetPhysicalDeviceMemoryProperties2KHR(
17184 VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties,
17185 uint32_t doLock) {
17186 (void)doLock;
17187 bool queueSubmitWithCommandsEnabled =
17188 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17189 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17190 auto stream = mImpl->stream();
17191 auto pool = mImpl->pool();
17192 VkPhysicalDevice local_physicalDevice;
17193 local_physicalDevice = physicalDevice;
17194 size_t count = 0;
17195 size_t* countPtr = &count;
17196 {
17197 uint64_t cgen_var_0;
17198 *countPtr += 1 * 8;
17199 count_VkPhysicalDeviceMemoryProperties2(
17200 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17201 (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), countPtr);
17202 }
17203 uint32_t packetSize_vkGetPhysicalDeviceMemoryProperties2KHR =
17204 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17205 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceMemoryProperties2KHR);
17206 uint8_t* packetBeginPtr = streamPtr;
17207 uint8_t** streamPtrPtr = &streamPtr;
17208 uint32_t opcode_vkGetPhysicalDeviceMemoryProperties2KHR =
17209 OP_vkGetPhysicalDeviceMemoryProperties2KHR;
17210 uint32_t seqno;
17211 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17212 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceMemoryProperties2KHR, sizeof(uint32_t));
17213 streamPtr += sizeof(uint32_t);
17214 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceMemoryProperties2KHR, sizeof(uint32_t));
17215 streamPtr += sizeof(uint32_t);
17216 if (queueSubmitWithCommandsEnabled) {
17217 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17218 streamPtr += sizeof(uint32_t);
17219 }
17220 uint64_t cgen_var_0;
17221 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
17222 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17223 *streamPtrPtr += 1 * 8;
17224 reservedmarshal_VkPhysicalDeviceMemoryProperties2(
17225 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties),
17226 streamPtrPtr);
17227 unmarshal_VkPhysicalDeviceMemoryProperties2(
17228 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17229 (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
17230 if (pMemoryProperties) {
17231 transform_fromhost_VkPhysicalDeviceMemoryProperties2(
17232 sResourceTracker, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
17233 }
17234 ++encodeCount;
17235 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17236 pool->freeAll();
17237 stream->clearPool();
17238 }
17239 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17240 }
17241
vkGetPhysicalDeviceSparseImageFormatProperties2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo,uint32_t * pPropertyCount,VkSparseImageFormatProperties2 * pProperties,uint32_t doLock)17242 void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
17243 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
17244 uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties, uint32_t doLock) {
17245 (void)doLock;
17246 bool queueSubmitWithCommandsEnabled =
17247 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17248 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17249 auto stream = mImpl->stream();
17250 auto pool = mImpl->pool();
17251 VkPhysicalDevice local_physicalDevice;
17252 VkPhysicalDeviceSparseImageFormatInfo2* local_pFormatInfo;
17253 local_physicalDevice = physicalDevice;
17254 local_pFormatInfo = nullptr;
17255 if (pFormatInfo) {
17256 local_pFormatInfo = (VkPhysicalDeviceSparseImageFormatInfo2*)pool->alloc(
17257 sizeof(const VkPhysicalDeviceSparseImageFormatInfo2));
17258 deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(
17259 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pFormatInfo,
17260 (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
17261 }
17262 if (local_pFormatInfo) {
17263 transform_tohost_VkPhysicalDeviceSparseImageFormatInfo2(
17264 sResourceTracker, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
17265 }
17266 size_t count = 0;
17267 size_t* countPtr = &count;
17268 {
17269 uint64_t cgen_var_0;
17270 *countPtr += 1 * 8;
17271 count_VkPhysicalDeviceSparseImageFormatInfo2(
17272 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17273 (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), countPtr);
17274 // WARNING PTR CHECK
17275 *countPtr += 8;
17276 if (pPropertyCount) {
17277 *countPtr += sizeof(uint32_t);
17278 }
17279 // WARNING PTR CHECK
17280 *countPtr += 8;
17281 if (pProperties) {
17282 if (pPropertyCount) {
17283 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
17284 count_VkSparseImageFormatProperties2(
17285 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17286 (VkSparseImageFormatProperties2*)(pProperties + i), countPtr);
17287 }
17288 }
17289 }
17290 }
17291 uint32_t packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2KHR =
17292 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17293 uint8_t* streamPtr =
17294 stream->reserve(packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2KHR);
17295 uint8_t* packetBeginPtr = streamPtr;
17296 uint8_t** streamPtrPtr = &streamPtr;
17297 uint32_t opcode_vkGetPhysicalDeviceSparseImageFormatProperties2KHR =
17298 OP_vkGetPhysicalDeviceSparseImageFormatProperties2KHR;
17299 uint32_t seqno;
17300 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17301 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceSparseImageFormatProperties2KHR, sizeof(uint32_t));
17302 streamPtr += sizeof(uint32_t);
17303 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2KHR,
17304 sizeof(uint32_t));
17305 streamPtr += sizeof(uint32_t);
17306 if (queueSubmitWithCommandsEnabled) {
17307 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17308 streamPtr += sizeof(uint32_t);
17309 }
17310 uint64_t cgen_var_0;
17311 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
17312 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17313 *streamPtrPtr += 1 * 8;
17314 reservedmarshal_VkPhysicalDeviceSparseImageFormatInfo2(
17315 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17316 (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), streamPtrPtr);
17317 // WARNING PTR CHECK
17318 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pPropertyCount;
17319 memcpy((*streamPtrPtr), &cgen_var_1, 8);
17320 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
17321 *streamPtrPtr += 8;
17322 if (pPropertyCount) {
17323 memcpy(*streamPtrPtr, (uint32_t*)pPropertyCount, sizeof(uint32_t));
17324 *streamPtrPtr += sizeof(uint32_t);
17325 }
17326 // WARNING PTR CHECK
17327 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pProperties;
17328 memcpy((*streamPtrPtr), &cgen_var_2, 8);
17329 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
17330 *streamPtrPtr += 8;
17331 if (pProperties) {
17332 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
17333 reservedmarshal_VkSparseImageFormatProperties2(
17334 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17335 (VkSparseImageFormatProperties2*)(pProperties + i), streamPtrPtr);
17336 }
17337 }
17338 // WARNING PTR CHECK
17339 uint32_t* check_pPropertyCount;
17340 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
17341 if (pPropertyCount) {
17342 if (!(check_pPropertyCount)) {
17343 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
17344 }
17345 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
17346 }
17347 // WARNING PTR CHECK
17348 VkSparseImageFormatProperties2* check_pProperties;
17349 check_pProperties = (VkSparseImageFormatProperties2*)(uintptr_t)stream->getBe64();
17350 if (pProperties) {
17351 if (!(check_pProperties)) {
17352 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
17353 }
17354 if (pPropertyCount) {
17355 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
17356 unmarshal_VkSparseImageFormatProperties2(
17357 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17358 (VkSparseImageFormatProperties2*)(pProperties + i));
17359 }
17360 }
17361 }
17362 if (pPropertyCount) {
17363 if (pProperties) {
17364 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
17365 transform_fromhost_VkSparseImageFormatProperties2(
17366 sResourceTracker, (VkSparseImageFormatProperties2*)(pProperties + i));
17367 }
17368 }
17369 }
17370 ++encodeCount;
17371 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17372 pool->freeAll();
17373 stream->clearPool();
17374 }
17375 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17376 }
17377
17378 #endif
17379 #ifdef VK_KHR_maintenance1
vkTrimCommandPoolKHR(VkDevice device,VkCommandPool commandPool,VkCommandPoolTrimFlags flags,uint32_t doLock)17380 void VkEncoder::vkTrimCommandPoolKHR(VkDevice device, VkCommandPool commandPool,
17381 VkCommandPoolTrimFlags flags, uint32_t doLock) {
17382 (void)doLock;
17383 bool queueSubmitWithCommandsEnabled =
17384 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17385 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17386 auto stream = mImpl->stream();
17387 auto pool = mImpl->pool();
17388 VkDevice local_device;
17389 VkCommandPool local_commandPool;
17390 VkCommandPoolTrimFlags local_flags;
17391 local_device = device;
17392 local_commandPool = commandPool;
17393 local_flags = flags;
17394 size_t count = 0;
17395 size_t* countPtr = &count;
17396 {
17397 uint64_t cgen_var_0;
17398 *countPtr += 1 * 8;
17399 uint64_t cgen_var_1;
17400 *countPtr += 1 * 8;
17401 *countPtr += sizeof(VkCommandPoolTrimFlags);
17402 }
17403 uint32_t packetSize_vkTrimCommandPoolKHR =
17404 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17405 uint8_t* streamPtr = stream->reserve(packetSize_vkTrimCommandPoolKHR);
17406 uint8_t* packetBeginPtr = streamPtr;
17407 uint8_t** streamPtrPtr = &streamPtr;
17408 uint32_t opcode_vkTrimCommandPoolKHR = OP_vkTrimCommandPoolKHR;
17409 uint32_t seqno;
17410 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17411 memcpy(streamPtr, &opcode_vkTrimCommandPoolKHR, sizeof(uint32_t));
17412 streamPtr += sizeof(uint32_t);
17413 memcpy(streamPtr, &packetSize_vkTrimCommandPoolKHR, sizeof(uint32_t));
17414 streamPtr += sizeof(uint32_t);
17415 if (queueSubmitWithCommandsEnabled) {
17416 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17417 streamPtr += sizeof(uint32_t);
17418 }
17419 uint64_t cgen_var_0;
17420 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17421 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17422 *streamPtrPtr += 1 * 8;
17423 uint64_t cgen_var_1;
17424 *&cgen_var_1 = get_host_u64_VkCommandPool((*&local_commandPool));
17425 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
17426 *streamPtrPtr += 1 * 8;
17427 memcpy(*streamPtrPtr, (VkCommandPoolTrimFlags*)&local_flags, sizeof(VkCommandPoolTrimFlags));
17428 *streamPtrPtr += sizeof(VkCommandPoolTrimFlags);
17429 stream->flush();
17430 ++encodeCount;
17431 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17432 pool->freeAll();
17433 stream->clearPool();
17434 }
17435 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17436 }
17437
17438 #endif
17439 #ifdef VK_KHR_external_memory_capabilities
vkGetPhysicalDeviceExternalBufferPropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo,VkExternalBufferProperties * pExternalBufferProperties,uint32_t doLock)17440 void VkEncoder::vkGetPhysicalDeviceExternalBufferPropertiesKHR(
17441 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
17442 VkExternalBufferProperties* pExternalBufferProperties, uint32_t doLock) {
17443 (void)doLock;
17444 bool queueSubmitWithCommandsEnabled =
17445 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17446 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17447 auto stream = mImpl->stream();
17448 auto pool = mImpl->pool();
17449 VkPhysicalDevice local_physicalDevice;
17450 VkPhysicalDeviceExternalBufferInfo* local_pExternalBufferInfo;
17451 local_physicalDevice = physicalDevice;
17452 local_pExternalBufferInfo = nullptr;
17453 if (pExternalBufferInfo) {
17454 local_pExternalBufferInfo = (VkPhysicalDeviceExternalBufferInfo*)pool->alloc(
17455 sizeof(const VkPhysicalDeviceExternalBufferInfo));
17456 deepcopy_VkPhysicalDeviceExternalBufferInfo(
17457 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalBufferInfo,
17458 (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
17459 }
17460 if (local_pExternalBufferInfo) {
17461 sResourceTracker->transformImpl_VkPhysicalDeviceExternalBufferInfo_tohost(
17462 local_pExternalBufferInfo, 1);
17463 transform_tohost_VkPhysicalDeviceExternalBufferInfo(
17464 sResourceTracker, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
17465 }
17466 size_t count = 0;
17467 size_t* countPtr = &count;
17468 {
17469 uint64_t cgen_var_0;
17470 *countPtr += 1 * 8;
17471 count_VkPhysicalDeviceExternalBufferInfo(
17472 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17473 (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), countPtr);
17474 count_VkExternalBufferProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17475 (VkExternalBufferProperties*)(pExternalBufferProperties),
17476 countPtr);
17477 }
17478 uint32_t packetSize_vkGetPhysicalDeviceExternalBufferPropertiesKHR =
17479 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17480 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalBufferPropertiesKHR);
17481 uint8_t* packetBeginPtr = streamPtr;
17482 uint8_t** streamPtrPtr = &streamPtr;
17483 uint32_t opcode_vkGetPhysicalDeviceExternalBufferPropertiesKHR =
17484 OP_vkGetPhysicalDeviceExternalBufferPropertiesKHR;
17485 uint32_t seqno;
17486 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17487 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceExternalBufferPropertiesKHR, sizeof(uint32_t));
17488 streamPtr += sizeof(uint32_t);
17489 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceExternalBufferPropertiesKHR, sizeof(uint32_t));
17490 streamPtr += sizeof(uint32_t);
17491 if (queueSubmitWithCommandsEnabled) {
17492 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17493 streamPtr += sizeof(uint32_t);
17494 }
17495 uint64_t cgen_var_0;
17496 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
17497 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17498 *streamPtrPtr += 1 * 8;
17499 reservedmarshal_VkPhysicalDeviceExternalBufferInfo(
17500 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17501 (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), streamPtrPtr);
17502 reservedmarshal_VkExternalBufferProperties(
17503 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17504 (VkExternalBufferProperties*)(pExternalBufferProperties), streamPtrPtr);
17505 unmarshal_VkExternalBufferProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17506 (VkExternalBufferProperties*)(pExternalBufferProperties));
17507 if (pExternalBufferProperties) {
17508 sResourceTracker->transformImpl_VkExternalBufferProperties_fromhost(
17509 pExternalBufferProperties, 1);
17510 transform_fromhost_VkExternalBufferProperties(
17511 sResourceTracker, (VkExternalBufferProperties*)(pExternalBufferProperties));
17512 }
17513 ++encodeCount;
17514 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17515 pool->freeAll();
17516 stream->clearPool();
17517 }
17518 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17519 }
17520
17521 #endif
17522 #ifdef VK_KHR_external_semaphore_capabilities
vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo,VkExternalSemaphoreProperties * pExternalSemaphoreProperties,uint32_t doLock)17523 void VkEncoder::vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
17524 VkPhysicalDevice physicalDevice,
17525 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
17526 VkExternalSemaphoreProperties* pExternalSemaphoreProperties, uint32_t doLock) {
17527 (void)doLock;
17528 bool queueSubmitWithCommandsEnabled =
17529 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17530 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17531 auto stream = mImpl->stream();
17532 auto pool = mImpl->pool();
17533 VkPhysicalDevice local_physicalDevice;
17534 VkPhysicalDeviceExternalSemaphoreInfo* local_pExternalSemaphoreInfo;
17535 local_physicalDevice = physicalDevice;
17536 local_pExternalSemaphoreInfo = nullptr;
17537 if (pExternalSemaphoreInfo) {
17538 local_pExternalSemaphoreInfo = (VkPhysicalDeviceExternalSemaphoreInfo*)pool->alloc(
17539 sizeof(const VkPhysicalDeviceExternalSemaphoreInfo));
17540 deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(
17541 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalSemaphoreInfo,
17542 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
17543 }
17544 if (local_pExternalSemaphoreInfo) {
17545 transform_tohost_VkPhysicalDeviceExternalSemaphoreInfo(
17546 sResourceTracker,
17547 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
17548 }
17549 size_t count = 0;
17550 size_t* countPtr = &count;
17551 {
17552 uint64_t cgen_var_0;
17553 *countPtr += 1 * 8;
17554 count_VkPhysicalDeviceExternalSemaphoreInfo(
17555 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17556 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), countPtr);
17557 count_VkExternalSemaphoreProperties(
17558 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17559 (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), countPtr);
17560 }
17561 uint32_t packetSize_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR =
17562 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17563 uint8_t* streamPtr =
17564 stream->reserve(packetSize_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR);
17565 uint8_t* packetBeginPtr = streamPtr;
17566 uint8_t** streamPtrPtr = &streamPtr;
17567 uint32_t opcode_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR =
17568 OP_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR;
17569 uint32_t seqno;
17570 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17571 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR, sizeof(uint32_t));
17572 streamPtr += sizeof(uint32_t);
17573 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR,
17574 sizeof(uint32_t));
17575 streamPtr += sizeof(uint32_t);
17576 if (queueSubmitWithCommandsEnabled) {
17577 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17578 streamPtr += sizeof(uint32_t);
17579 }
17580 uint64_t cgen_var_0;
17581 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
17582 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17583 *streamPtrPtr += 1 * 8;
17584 reservedmarshal_VkPhysicalDeviceExternalSemaphoreInfo(
17585 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17586 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), streamPtrPtr);
17587 reservedmarshal_VkExternalSemaphoreProperties(
17588 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17589 (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), streamPtrPtr);
17590 unmarshal_VkExternalSemaphoreProperties(
17591 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17592 (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
17593 if (pExternalSemaphoreProperties) {
17594 transform_fromhost_VkExternalSemaphoreProperties(
17595 sResourceTracker, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
17596 }
17597 sResourceTracker->on_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
17598 this, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
17599 ++encodeCount;
17600 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17601 pool->freeAll();
17602 stream->clearPool();
17603 }
17604 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17605 }
17606
17607 #endif
17608 #ifdef VK_KHR_external_semaphore_fd
vkImportSemaphoreFdKHR(VkDevice device,const VkImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo,uint32_t doLock)17609 VkResult VkEncoder::vkImportSemaphoreFdKHR(VkDevice device,
17610 const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo,
17611 uint32_t doLock) {
17612 (void)doLock;
17613 bool queueSubmitWithCommandsEnabled =
17614 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17615 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17616 auto stream = mImpl->stream();
17617 auto pool = mImpl->pool();
17618 VkDevice local_device;
17619 VkImportSemaphoreFdInfoKHR* local_pImportSemaphoreFdInfo;
17620 local_device = device;
17621 local_pImportSemaphoreFdInfo = nullptr;
17622 if (pImportSemaphoreFdInfo) {
17623 local_pImportSemaphoreFdInfo =
17624 (VkImportSemaphoreFdInfoKHR*)pool->alloc(sizeof(const VkImportSemaphoreFdInfoKHR));
17625 deepcopy_VkImportSemaphoreFdInfoKHR(
17626 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImportSemaphoreFdInfo,
17627 (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
17628 }
17629 if (local_pImportSemaphoreFdInfo) {
17630 transform_tohost_VkImportSemaphoreFdInfoKHR(
17631 sResourceTracker, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
17632 }
17633 size_t count = 0;
17634 size_t* countPtr = &count;
17635 {
17636 uint64_t cgen_var_0;
17637 *countPtr += 1 * 8;
17638 count_VkImportSemaphoreFdInfoKHR(
17639 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17640 (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo), countPtr);
17641 }
17642 uint32_t packetSize_vkImportSemaphoreFdKHR =
17643 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17644 uint8_t* streamPtr = stream->reserve(packetSize_vkImportSemaphoreFdKHR);
17645 uint8_t* packetBeginPtr = streamPtr;
17646 uint8_t** streamPtrPtr = &streamPtr;
17647 uint32_t opcode_vkImportSemaphoreFdKHR = OP_vkImportSemaphoreFdKHR;
17648 uint32_t seqno;
17649 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17650 memcpy(streamPtr, &opcode_vkImportSemaphoreFdKHR, sizeof(uint32_t));
17651 streamPtr += sizeof(uint32_t);
17652 memcpy(streamPtr, &packetSize_vkImportSemaphoreFdKHR, sizeof(uint32_t));
17653 streamPtr += sizeof(uint32_t);
17654 if (queueSubmitWithCommandsEnabled) {
17655 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17656 streamPtr += sizeof(uint32_t);
17657 }
17658 uint64_t cgen_var_0;
17659 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17660 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17661 *streamPtrPtr += 1 * 8;
17662 reservedmarshal_VkImportSemaphoreFdInfoKHR(
17663 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17664 (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo), streamPtrPtr);
17665 VkResult vkImportSemaphoreFdKHR_VkResult_return = (VkResult)0;
17666 stream->read(&vkImportSemaphoreFdKHR_VkResult_return, sizeof(VkResult));
17667 ++encodeCount;
17668 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17669 pool->freeAll();
17670 stream->clearPool();
17671 }
17672 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17673 return vkImportSemaphoreFdKHR_VkResult_return;
17674 }
17675
vkGetSemaphoreFdKHR(VkDevice device,const VkSemaphoreGetFdInfoKHR * pGetFdInfo,int * pFd,uint32_t doLock)17676 VkResult VkEncoder::vkGetSemaphoreFdKHR(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
17677 int* pFd, uint32_t doLock) {
17678 (void)doLock;
17679 bool queueSubmitWithCommandsEnabled =
17680 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17681 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17682 auto stream = mImpl->stream();
17683 auto pool = mImpl->pool();
17684 VkDevice local_device;
17685 VkSemaphoreGetFdInfoKHR* local_pGetFdInfo;
17686 local_device = device;
17687 local_pGetFdInfo = nullptr;
17688 if (pGetFdInfo) {
17689 local_pGetFdInfo =
17690 (VkSemaphoreGetFdInfoKHR*)pool->alloc(sizeof(const VkSemaphoreGetFdInfoKHR));
17691 deepcopy_VkSemaphoreGetFdInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGetFdInfo,
17692 (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
17693 }
17694 if (local_pGetFdInfo) {
17695 transform_tohost_VkSemaphoreGetFdInfoKHR(sResourceTracker,
17696 (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
17697 }
17698 size_t count = 0;
17699 size_t* countPtr = &count;
17700 {
17701 uint64_t cgen_var_0;
17702 *countPtr += 1 * 8;
17703 count_VkSemaphoreGetFdInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17704 (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo), countPtr);
17705 *countPtr += sizeof(int);
17706 }
17707 uint32_t packetSize_vkGetSemaphoreFdKHR =
17708 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17709 uint8_t* streamPtr = stream->reserve(packetSize_vkGetSemaphoreFdKHR);
17710 uint8_t* packetBeginPtr = streamPtr;
17711 uint8_t** streamPtrPtr = &streamPtr;
17712 uint32_t opcode_vkGetSemaphoreFdKHR = OP_vkGetSemaphoreFdKHR;
17713 uint32_t seqno;
17714 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17715 memcpy(streamPtr, &opcode_vkGetSemaphoreFdKHR, sizeof(uint32_t));
17716 streamPtr += sizeof(uint32_t);
17717 memcpy(streamPtr, &packetSize_vkGetSemaphoreFdKHR, sizeof(uint32_t));
17718 streamPtr += sizeof(uint32_t);
17719 if (queueSubmitWithCommandsEnabled) {
17720 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17721 streamPtr += sizeof(uint32_t);
17722 }
17723 uint64_t cgen_var_0;
17724 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17725 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17726 *streamPtrPtr += 1 * 8;
17727 reservedmarshal_VkSemaphoreGetFdInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17728 (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo),
17729 streamPtrPtr);
17730 memcpy(*streamPtrPtr, (int*)pFd, sizeof(int));
17731 *streamPtrPtr += sizeof(int);
17732 stream->read((int*)pFd, sizeof(int));
17733 VkResult vkGetSemaphoreFdKHR_VkResult_return = (VkResult)0;
17734 stream->read(&vkGetSemaphoreFdKHR_VkResult_return, sizeof(VkResult));
17735 ++encodeCount;
17736 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17737 pool->freeAll();
17738 stream->clearPool();
17739 }
17740 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17741 return vkGetSemaphoreFdKHR_VkResult_return;
17742 }
17743
17744 #endif
17745 #ifdef VK_KHR_descriptor_update_template
vkCreateDescriptorUpdateTemplateKHR(VkDevice device,const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate,uint32_t doLock)17746 VkResult VkEncoder::vkCreateDescriptorUpdateTemplateKHR(
17747 VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
17748 const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate,
17749 uint32_t doLock) {
17750 (void)doLock;
17751 bool queueSubmitWithCommandsEnabled =
17752 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17753 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17754 auto stream = mImpl->stream();
17755 auto pool = mImpl->pool();
17756 VkDevice local_device;
17757 VkDescriptorUpdateTemplateCreateInfo* local_pCreateInfo;
17758 VkAllocationCallbacks* local_pAllocator;
17759 local_device = device;
17760 local_pCreateInfo = nullptr;
17761 if (pCreateInfo) {
17762 local_pCreateInfo = (VkDescriptorUpdateTemplateCreateInfo*)pool->alloc(
17763 sizeof(const VkDescriptorUpdateTemplateCreateInfo));
17764 deepcopy_VkDescriptorUpdateTemplateCreateInfo(
17765 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
17766 (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
17767 }
17768 local_pAllocator = nullptr;
17769 if (pAllocator) {
17770 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
17771 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
17772 (VkAllocationCallbacks*)(local_pAllocator));
17773 }
17774 local_pAllocator = nullptr;
17775 if (local_pCreateInfo) {
17776 transform_tohost_VkDescriptorUpdateTemplateCreateInfo(
17777 sResourceTracker, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
17778 }
17779 if (local_pAllocator) {
17780 transform_tohost_VkAllocationCallbacks(sResourceTracker,
17781 (VkAllocationCallbacks*)(local_pAllocator));
17782 }
17783 size_t count = 0;
17784 size_t* countPtr = &count;
17785 {
17786 uint64_t cgen_var_0;
17787 *countPtr += 1 * 8;
17788 count_VkDescriptorUpdateTemplateCreateInfo(
17789 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17790 (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), countPtr);
17791 // WARNING PTR CHECK
17792 *countPtr += 8;
17793 if (local_pAllocator) {
17794 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17795 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
17796 }
17797 uint64_t cgen_var_1;
17798 *countPtr += 8;
17799 }
17800 uint32_t packetSize_vkCreateDescriptorUpdateTemplateKHR =
17801 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17802 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateDescriptorUpdateTemplateKHR);
17803 uint8_t* packetBeginPtr = streamPtr;
17804 uint8_t** streamPtrPtr = &streamPtr;
17805 uint32_t opcode_vkCreateDescriptorUpdateTemplateKHR = OP_vkCreateDescriptorUpdateTemplateKHR;
17806 uint32_t seqno;
17807 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17808 memcpy(streamPtr, &opcode_vkCreateDescriptorUpdateTemplateKHR, sizeof(uint32_t));
17809 streamPtr += sizeof(uint32_t);
17810 memcpy(streamPtr, &packetSize_vkCreateDescriptorUpdateTemplateKHR, sizeof(uint32_t));
17811 streamPtr += sizeof(uint32_t);
17812 if (queueSubmitWithCommandsEnabled) {
17813 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17814 streamPtr += sizeof(uint32_t);
17815 }
17816 uint64_t cgen_var_0;
17817 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17818 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17819 *streamPtrPtr += 1 * 8;
17820 reservedmarshal_VkDescriptorUpdateTemplateCreateInfo(
17821 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17822 (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), streamPtrPtr);
17823 // WARNING PTR CHECK
17824 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
17825 memcpy((*streamPtrPtr), &cgen_var_1, 8);
17826 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
17827 *streamPtrPtr += 8;
17828 if (local_pAllocator) {
17829 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17830 (VkAllocationCallbacks*)(local_pAllocator),
17831 streamPtrPtr);
17832 }
17833 /* is handle, possibly out */;
17834 uint64_t cgen_var_2;
17835 *&cgen_var_2 = (uint64_t)((*pDescriptorUpdateTemplate));
17836 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
17837 *streamPtrPtr += 8;
17838 /* is handle, possibly out */;
17839 stream->setHandleMapping(sResourceTracker->createMapping());
17840 uint64_t cgen_var_3;
17841 stream->read((uint64_t*)&cgen_var_3, 8);
17842 stream->handleMapping()->mapHandles_u64_VkDescriptorUpdateTemplate(
17843 &cgen_var_3, (VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate, 1);
17844 stream->unsetHandleMapping();
17845 VkResult vkCreateDescriptorUpdateTemplateKHR_VkResult_return = (VkResult)0;
17846 stream->read(&vkCreateDescriptorUpdateTemplateKHR_VkResult_return, sizeof(VkResult));
17847 sResourceTracker->on_vkCreateDescriptorUpdateTemplateKHR(
17848 this, vkCreateDescriptorUpdateTemplateKHR_VkResult_return, device, pCreateInfo, pAllocator,
17849 pDescriptorUpdateTemplate);
17850 ++encodeCount;
17851 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17852 pool->freeAll();
17853 stream->clearPool();
17854 }
17855 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17856 return vkCreateDescriptorUpdateTemplateKHR_VkResult_return;
17857 }
17858
vkDestroyDescriptorUpdateTemplateKHR(VkDevice device,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const VkAllocationCallbacks * pAllocator,uint32_t doLock)17859 void VkEncoder::vkDestroyDescriptorUpdateTemplateKHR(
17860 VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate,
17861 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
17862 (void)doLock;
17863 bool queueSubmitWithCommandsEnabled =
17864 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17865 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17866 auto stream = mImpl->stream();
17867 auto pool = mImpl->pool();
17868 VkDevice local_device;
17869 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
17870 VkAllocationCallbacks* local_pAllocator;
17871 local_device = device;
17872 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
17873 local_pAllocator = nullptr;
17874 if (pAllocator) {
17875 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
17876 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
17877 (VkAllocationCallbacks*)(local_pAllocator));
17878 }
17879 local_pAllocator = nullptr;
17880 if (local_pAllocator) {
17881 transform_tohost_VkAllocationCallbacks(sResourceTracker,
17882 (VkAllocationCallbacks*)(local_pAllocator));
17883 }
17884 size_t count = 0;
17885 size_t* countPtr = &count;
17886 {
17887 uint64_t cgen_var_0;
17888 *countPtr += 1 * 8;
17889 uint64_t cgen_var_1;
17890 *countPtr += 1 * 8;
17891 // WARNING PTR CHECK
17892 *countPtr += 8;
17893 if (local_pAllocator) {
17894 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17895 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
17896 }
17897 }
17898 uint32_t packetSize_vkDestroyDescriptorUpdateTemplateKHR =
17899 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17900 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyDescriptorUpdateTemplateKHR);
17901 uint8_t* packetBeginPtr = streamPtr;
17902 uint8_t** streamPtrPtr = &streamPtr;
17903 uint32_t opcode_vkDestroyDescriptorUpdateTemplateKHR = OP_vkDestroyDescriptorUpdateTemplateKHR;
17904 uint32_t seqno;
17905 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17906 memcpy(streamPtr, &opcode_vkDestroyDescriptorUpdateTemplateKHR, sizeof(uint32_t));
17907 streamPtr += sizeof(uint32_t);
17908 memcpy(streamPtr, &packetSize_vkDestroyDescriptorUpdateTemplateKHR, sizeof(uint32_t));
17909 streamPtr += sizeof(uint32_t);
17910 if (queueSubmitWithCommandsEnabled) {
17911 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17912 streamPtr += sizeof(uint32_t);
17913 }
17914 uint64_t cgen_var_0;
17915 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17916 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17917 *streamPtrPtr += 1 * 8;
17918 uint64_t cgen_var_1;
17919 *&cgen_var_1 = get_host_u64_VkDescriptorUpdateTemplate((*&local_descriptorUpdateTemplate));
17920 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
17921 *streamPtrPtr += 1 * 8;
17922 // WARNING PTR CHECK
17923 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
17924 memcpy((*streamPtrPtr), &cgen_var_2, 8);
17925 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
17926 *streamPtrPtr += 8;
17927 if (local_pAllocator) {
17928 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17929 (VkAllocationCallbacks*)(local_pAllocator),
17930 streamPtrPtr);
17931 }
17932 sResourceTracker->destroyMapping()->mapHandles_VkDescriptorUpdateTemplate(
17933 (VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate);
17934 stream->flush();
17935 ++encodeCount;
17936 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17937 pool->freeAll();
17938 stream->clearPool();
17939 }
17940 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17941 }
17942
vkUpdateDescriptorSetWithTemplateKHR(VkDevice device,VkDescriptorSet descriptorSet,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const void * pData,uint32_t doLock)17943 void VkEncoder::vkUpdateDescriptorSetWithTemplateKHR(
17944 VkDevice device, VkDescriptorSet descriptorSet,
17945 VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData, uint32_t doLock) {
17946 (void)doLock;
17947 bool queueSubmitWithCommandsEnabled =
17948 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17949 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17950 auto stream = mImpl->stream();
17951 auto pool = mImpl->pool();
17952 VkDevice local_device;
17953 VkDescriptorSet local_descriptorSet;
17954 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
17955 void* local_pData;
17956 local_device = device;
17957 local_descriptorSet = descriptorSet;
17958 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
17959 // Avoiding deepcopy for pData
17960 local_pData = (void*)pData;
17961 size_t count = 0;
17962 size_t* countPtr = &count;
17963 {
17964 uint64_t cgen_var_0;
17965 *countPtr += 1 * 8;
17966 uint64_t cgen_var_1;
17967 *countPtr += 1 * 8;
17968 uint64_t cgen_var_2;
17969 *countPtr += 1 * 8;
17970 // WARNING PTR CHECK
17971 *countPtr += 8;
17972 if (local_pData) {
17973 *countPtr += sizeof(uint8_t);
17974 }
17975 }
17976 uint32_t packetSize_vkUpdateDescriptorSetWithTemplateKHR =
17977 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17978 uint8_t* streamPtr = stream->reserve(packetSize_vkUpdateDescriptorSetWithTemplateKHR);
17979 uint8_t* packetBeginPtr = streamPtr;
17980 uint8_t** streamPtrPtr = &streamPtr;
17981 uint32_t opcode_vkUpdateDescriptorSetWithTemplateKHR = OP_vkUpdateDescriptorSetWithTemplateKHR;
17982 uint32_t seqno;
17983 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17984 memcpy(streamPtr, &opcode_vkUpdateDescriptorSetWithTemplateKHR, sizeof(uint32_t));
17985 streamPtr += sizeof(uint32_t);
17986 memcpy(streamPtr, &packetSize_vkUpdateDescriptorSetWithTemplateKHR, sizeof(uint32_t));
17987 streamPtr += sizeof(uint32_t);
17988 if (queueSubmitWithCommandsEnabled) {
17989 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17990 streamPtr += sizeof(uint32_t);
17991 }
17992 uint64_t cgen_var_0;
17993 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17994 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17995 *streamPtrPtr += 1 * 8;
17996 uint64_t cgen_var_1;
17997 *&cgen_var_1 = get_host_u64_VkDescriptorSet((*&local_descriptorSet));
17998 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
17999 *streamPtrPtr += 1 * 8;
18000 uint64_t cgen_var_2;
18001 *&cgen_var_2 = get_host_u64_VkDescriptorUpdateTemplate((*&local_descriptorUpdateTemplate));
18002 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
18003 *streamPtrPtr += 1 * 8;
18004 // WARNING PTR CHECK
18005 uint64_t cgen_var_3 = (uint64_t)(uintptr_t)local_pData;
18006 memcpy((*streamPtrPtr), &cgen_var_3, 8);
18007 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
18008 *streamPtrPtr += 8;
18009 if (local_pData) {
18010 memcpy(*streamPtrPtr, (void*)local_pData, sizeof(uint8_t));
18011 *streamPtrPtr += sizeof(uint8_t);
18012 }
18013 stream->flush();
18014 ++encodeCount;
18015 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18016 pool->freeAll();
18017 stream->clearPool();
18018 }
18019 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18020 }
18021
18022 #endif
18023 #ifdef VK_KHR_create_renderpass2
vkCreateRenderPass2KHR(VkDevice device,const VkRenderPassCreateInfo2 * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass,uint32_t doLock)18024 VkResult VkEncoder::vkCreateRenderPass2KHR(VkDevice device,
18025 const VkRenderPassCreateInfo2* pCreateInfo,
18026 const VkAllocationCallbacks* pAllocator,
18027 VkRenderPass* pRenderPass, uint32_t doLock) {
18028 (void)doLock;
18029 bool queueSubmitWithCommandsEnabled =
18030 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18031 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18032 auto stream = mImpl->stream();
18033 auto pool = mImpl->pool();
18034 VkDevice local_device;
18035 VkRenderPassCreateInfo2* local_pCreateInfo;
18036 VkAllocationCallbacks* local_pAllocator;
18037 local_device = device;
18038 local_pCreateInfo = nullptr;
18039 if (pCreateInfo) {
18040 local_pCreateInfo =
18041 (VkRenderPassCreateInfo2*)pool->alloc(sizeof(const VkRenderPassCreateInfo2));
18042 deepcopy_VkRenderPassCreateInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
18043 (VkRenderPassCreateInfo2*)(local_pCreateInfo));
18044 }
18045 local_pAllocator = nullptr;
18046 if (pAllocator) {
18047 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
18048 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
18049 (VkAllocationCallbacks*)(local_pAllocator));
18050 }
18051 local_pAllocator = nullptr;
18052 if (local_pCreateInfo) {
18053 transform_tohost_VkRenderPassCreateInfo2(sResourceTracker,
18054 (VkRenderPassCreateInfo2*)(local_pCreateInfo));
18055 }
18056 if (local_pAllocator) {
18057 transform_tohost_VkAllocationCallbacks(sResourceTracker,
18058 (VkAllocationCallbacks*)(local_pAllocator));
18059 }
18060 size_t count = 0;
18061 size_t* countPtr = &count;
18062 {
18063 uint64_t cgen_var_0;
18064 *countPtr += 1 * 8;
18065 count_VkRenderPassCreateInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18066 (VkRenderPassCreateInfo2*)(local_pCreateInfo), countPtr);
18067 // WARNING PTR CHECK
18068 *countPtr += 8;
18069 if (local_pAllocator) {
18070 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18071 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
18072 }
18073 uint64_t cgen_var_1;
18074 *countPtr += 8;
18075 }
18076 uint32_t packetSize_vkCreateRenderPass2KHR =
18077 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18078 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateRenderPass2KHR);
18079 uint8_t* packetBeginPtr = streamPtr;
18080 uint8_t** streamPtrPtr = &streamPtr;
18081 uint32_t opcode_vkCreateRenderPass2KHR = OP_vkCreateRenderPass2KHR;
18082 uint32_t seqno;
18083 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18084 memcpy(streamPtr, &opcode_vkCreateRenderPass2KHR, sizeof(uint32_t));
18085 streamPtr += sizeof(uint32_t);
18086 memcpy(streamPtr, &packetSize_vkCreateRenderPass2KHR, sizeof(uint32_t));
18087 streamPtr += sizeof(uint32_t);
18088 if (queueSubmitWithCommandsEnabled) {
18089 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18090 streamPtr += sizeof(uint32_t);
18091 }
18092 uint64_t cgen_var_0;
18093 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
18094 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18095 *streamPtrPtr += 1 * 8;
18096 reservedmarshal_VkRenderPassCreateInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18097 (VkRenderPassCreateInfo2*)(local_pCreateInfo),
18098 streamPtrPtr);
18099 // WARNING PTR CHECK
18100 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
18101 memcpy((*streamPtrPtr), &cgen_var_1, 8);
18102 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
18103 *streamPtrPtr += 8;
18104 if (local_pAllocator) {
18105 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18106 (VkAllocationCallbacks*)(local_pAllocator),
18107 streamPtrPtr);
18108 }
18109 /* is handle, possibly out */;
18110 uint64_t cgen_var_2;
18111 *&cgen_var_2 = (uint64_t)((*pRenderPass));
18112 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
18113 *streamPtrPtr += 8;
18114 /* is handle, possibly out */;
18115 stream->setHandleMapping(sResourceTracker->createMapping());
18116 uint64_t cgen_var_3;
18117 stream->read((uint64_t*)&cgen_var_3, 8);
18118 stream->handleMapping()->mapHandles_u64_VkRenderPass(&cgen_var_3, (VkRenderPass*)pRenderPass,
18119 1);
18120 stream->unsetHandleMapping();
18121 VkResult vkCreateRenderPass2KHR_VkResult_return = (VkResult)0;
18122 stream->read(&vkCreateRenderPass2KHR_VkResult_return, sizeof(VkResult));
18123 ++encodeCount;
18124 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18125 pool->freeAll();
18126 stream->clearPool();
18127 }
18128 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18129 return vkCreateRenderPass2KHR_VkResult_return;
18130 }
18131
vkCmdBeginRenderPass2KHR(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,const VkSubpassBeginInfo * pSubpassBeginInfo,uint32_t doLock)18132 void VkEncoder::vkCmdBeginRenderPass2KHR(VkCommandBuffer commandBuffer,
18133 const VkRenderPassBeginInfo* pRenderPassBegin,
18134 const VkSubpassBeginInfo* pSubpassBeginInfo,
18135 uint32_t doLock) {
18136 (void)doLock;
18137 bool queueSubmitWithCommandsEnabled =
18138 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18139 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18140 auto stream = mImpl->stream();
18141 auto pool = mImpl->pool();
18142 VkCommandBuffer local_commandBuffer;
18143 VkRenderPassBeginInfo* local_pRenderPassBegin;
18144 VkSubpassBeginInfo* local_pSubpassBeginInfo;
18145 local_commandBuffer = commandBuffer;
18146 local_pRenderPassBegin = nullptr;
18147 if (pRenderPassBegin) {
18148 local_pRenderPassBegin =
18149 (VkRenderPassBeginInfo*)pool->alloc(sizeof(const VkRenderPassBeginInfo));
18150 deepcopy_VkRenderPassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderPassBegin,
18151 (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
18152 }
18153 local_pSubpassBeginInfo = nullptr;
18154 if (pSubpassBeginInfo) {
18155 local_pSubpassBeginInfo =
18156 (VkSubpassBeginInfo*)pool->alloc(sizeof(const VkSubpassBeginInfo));
18157 deepcopy_VkSubpassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassBeginInfo,
18158 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
18159 }
18160 if (local_pRenderPassBegin) {
18161 transform_tohost_VkRenderPassBeginInfo(sResourceTracker,
18162 (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
18163 }
18164 if (local_pSubpassBeginInfo) {
18165 transform_tohost_VkSubpassBeginInfo(sResourceTracker,
18166 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
18167 }
18168 size_t count = 0;
18169 size_t* countPtr = &count;
18170 {
18171 uint64_t cgen_var_0;
18172 *countPtr += 1 * 8;
18173 count_VkRenderPassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18174 (VkRenderPassBeginInfo*)(local_pRenderPassBegin), countPtr);
18175 count_VkSubpassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18176 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
18177 }
18178 uint32_t packetSize_vkCmdBeginRenderPass2KHR = 4 + 4 + count;
18179 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginRenderPass2KHR -= 8;
18180 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginRenderPass2KHR);
18181 uint8_t* packetBeginPtr = streamPtr;
18182 uint8_t** streamPtrPtr = &streamPtr;
18183 uint32_t opcode_vkCmdBeginRenderPass2KHR = OP_vkCmdBeginRenderPass2KHR;
18184 memcpy(streamPtr, &opcode_vkCmdBeginRenderPass2KHR, sizeof(uint32_t));
18185 streamPtr += sizeof(uint32_t);
18186 memcpy(streamPtr, &packetSize_vkCmdBeginRenderPass2KHR, sizeof(uint32_t));
18187 streamPtr += sizeof(uint32_t);
18188 if (!queueSubmitWithCommandsEnabled) {
18189 uint64_t cgen_var_0;
18190 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
18191 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18192 *streamPtrPtr += 1 * 8;
18193 }
18194 reservedmarshal_VkRenderPassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18195 (VkRenderPassBeginInfo*)(local_pRenderPassBegin),
18196 streamPtrPtr);
18197 reservedmarshal_VkSubpassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18198 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo),
18199 streamPtrPtr);
18200 ++encodeCount;
18201 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18202 pool->freeAll();
18203 stream->clearPool();
18204 }
18205 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18206 }
18207
vkCmdNextSubpass2KHR(VkCommandBuffer commandBuffer,const VkSubpassBeginInfo * pSubpassBeginInfo,const VkSubpassEndInfo * pSubpassEndInfo,uint32_t doLock)18208 void VkEncoder::vkCmdNextSubpass2KHR(VkCommandBuffer commandBuffer,
18209 const VkSubpassBeginInfo* pSubpassBeginInfo,
18210 const VkSubpassEndInfo* pSubpassEndInfo, uint32_t doLock) {
18211 (void)doLock;
18212 bool queueSubmitWithCommandsEnabled =
18213 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18214 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18215 auto stream = mImpl->stream();
18216 auto pool = mImpl->pool();
18217 VkCommandBuffer local_commandBuffer;
18218 VkSubpassBeginInfo* local_pSubpassBeginInfo;
18219 VkSubpassEndInfo* local_pSubpassEndInfo;
18220 local_commandBuffer = commandBuffer;
18221 local_pSubpassBeginInfo = nullptr;
18222 if (pSubpassBeginInfo) {
18223 local_pSubpassBeginInfo =
18224 (VkSubpassBeginInfo*)pool->alloc(sizeof(const VkSubpassBeginInfo));
18225 deepcopy_VkSubpassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassBeginInfo,
18226 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
18227 }
18228 local_pSubpassEndInfo = nullptr;
18229 if (pSubpassEndInfo) {
18230 local_pSubpassEndInfo = (VkSubpassEndInfo*)pool->alloc(sizeof(const VkSubpassEndInfo));
18231 deepcopy_VkSubpassEndInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassEndInfo,
18232 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
18233 }
18234 if (local_pSubpassBeginInfo) {
18235 transform_tohost_VkSubpassBeginInfo(sResourceTracker,
18236 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
18237 }
18238 if (local_pSubpassEndInfo) {
18239 transform_tohost_VkSubpassEndInfo(sResourceTracker,
18240 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
18241 }
18242 size_t count = 0;
18243 size_t* countPtr = &count;
18244 {
18245 uint64_t cgen_var_0;
18246 *countPtr += 1 * 8;
18247 count_VkSubpassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18248 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
18249 count_VkSubpassEndInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18250 (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
18251 }
18252 uint32_t packetSize_vkCmdNextSubpass2KHR = 4 + 4 + count;
18253 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdNextSubpass2KHR -= 8;
18254 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdNextSubpass2KHR);
18255 uint8_t* packetBeginPtr = streamPtr;
18256 uint8_t** streamPtrPtr = &streamPtr;
18257 uint32_t opcode_vkCmdNextSubpass2KHR = OP_vkCmdNextSubpass2KHR;
18258 memcpy(streamPtr, &opcode_vkCmdNextSubpass2KHR, sizeof(uint32_t));
18259 streamPtr += sizeof(uint32_t);
18260 memcpy(streamPtr, &packetSize_vkCmdNextSubpass2KHR, sizeof(uint32_t));
18261 streamPtr += sizeof(uint32_t);
18262 if (!queueSubmitWithCommandsEnabled) {
18263 uint64_t cgen_var_0;
18264 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
18265 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18266 *streamPtrPtr += 1 * 8;
18267 }
18268 reservedmarshal_VkSubpassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18269 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo),
18270 streamPtrPtr);
18271 reservedmarshal_VkSubpassEndInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18272 (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
18273 ++encodeCount;
18274 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18275 pool->freeAll();
18276 stream->clearPool();
18277 }
18278 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18279 }
18280
vkCmdEndRenderPass2KHR(VkCommandBuffer commandBuffer,const VkSubpassEndInfo * pSubpassEndInfo,uint32_t doLock)18281 void VkEncoder::vkCmdEndRenderPass2KHR(VkCommandBuffer commandBuffer,
18282 const VkSubpassEndInfo* pSubpassEndInfo, uint32_t doLock) {
18283 (void)doLock;
18284 bool queueSubmitWithCommandsEnabled =
18285 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18286 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18287 auto stream = mImpl->stream();
18288 auto pool = mImpl->pool();
18289 VkCommandBuffer local_commandBuffer;
18290 VkSubpassEndInfo* local_pSubpassEndInfo;
18291 local_commandBuffer = commandBuffer;
18292 local_pSubpassEndInfo = nullptr;
18293 if (pSubpassEndInfo) {
18294 local_pSubpassEndInfo = (VkSubpassEndInfo*)pool->alloc(sizeof(const VkSubpassEndInfo));
18295 deepcopy_VkSubpassEndInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassEndInfo,
18296 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
18297 }
18298 if (local_pSubpassEndInfo) {
18299 transform_tohost_VkSubpassEndInfo(sResourceTracker,
18300 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
18301 }
18302 size_t count = 0;
18303 size_t* countPtr = &count;
18304 {
18305 uint64_t cgen_var_0;
18306 *countPtr += 1 * 8;
18307 count_VkSubpassEndInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18308 (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
18309 }
18310 uint32_t packetSize_vkCmdEndRenderPass2KHR = 4 + 4 + count;
18311 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndRenderPass2KHR -= 8;
18312 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndRenderPass2KHR);
18313 uint8_t* packetBeginPtr = streamPtr;
18314 uint8_t** streamPtrPtr = &streamPtr;
18315 uint32_t opcode_vkCmdEndRenderPass2KHR = OP_vkCmdEndRenderPass2KHR;
18316 memcpy(streamPtr, &opcode_vkCmdEndRenderPass2KHR, sizeof(uint32_t));
18317 streamPtr += sizeof(uint32_t);
18318 memcpy(streamPtr, &packetSize_vkCmdEndRenderPass2KHR, sizeof(uint32_t));
18319 streamPtr += sizeof(uint32_t);
18320 if (!queueSubmitWithCommandsEnabled) {
18321 uint64_t cgen_var_0;
18322 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
18323 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18324 *streamPtrPtr += 1 * 8;
18325 }
18326 reservedmarshal_VkSubpassEndInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18327 (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
18328 ++encodeCount;
18329 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18330 pool->freeAll();
18331 stream->clearPool();
18332 }
18333 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18334 }
18335
18336 #endif
18337 #ifdef VK_KHR_external_fence_capabilities
vkGetPhysicalDeviceExternalFencePropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo,VkExternalFenceProperties * pExternalFenceProperties,uint32_t doLock)18338 void VkEncoder::vkGetPhysicalDeviceExternalFencePropertiesKHR(
18339 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
18340 VkExternalFenceProperties* pExternalFenceProperties, uint32_t doLock) {
18341 (void)doLock;
18342 bool queueSubmitWithCommandsEnabled =
18343 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18344 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18345 auto stream = mImpl->stream();
18346 auto pool = mImpl->pool();
18347 VkPhysicalDevice local_physicalDevice;
18348 VkPhysicalDeviceExternalFenceInfo* local_pExternalFenceInfo;
18349 local_physicalDevice = physicalDevice;
18350 local_pExternalFenceInfo = nullptr;
18351 if (pExternalFenceInfo) {
18352 local_pExternalFenceInfo = (VkPhysicalDeviceExternalFenceInfo*)pool->alloc(
18353 sizeof(const VkPhysicalDeviceExternalFenceInfo));
18354 deepcopy_VkPhysicalDeviceExternalFenceInfo(
18355 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalFenceInfo,
18356 (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
18357 }
18358 if (local_pExternalFenceInfo) {
18359 transform_tohost_VkPhysicalDeviceExternalFenceInfo(
18360 sResourceTracker, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
18361 }
18362 size_t count = 0;
18363 size_t* countPtr = &count;
18364 {
18365 uint64_t cgen_var_0;
18366 *countPtr += 1 * 8;
18367 count_VkPhysicalDeviceExternalFenceInfo(
18368 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18369 (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), countPtr);
18370 count_VkExternalFenceProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18371 (VkExternalFenceProperties*)(pExternalFenceProperties),
18372 countPtr);
18373 }
18374 uint32_t packetSize_vkGetPhysicalDeviceExternalFencePropertiesKHR =
18375 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18376 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalFencePropertiesKHR);
18377 uint8_t* packetBeginPtr = streamPtr;
18378 uint8_t** streamPtrPtr = &streamPtr;
18379 uint32_t opcode_vkGetPhysicalDeviceExternalFencePropertiesKHR =
18380 OP_vkGetPhysicalDeviceExternalFencePropertiesKHR;
18381 uint32_t seqno;
18382 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18383 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceExternalFencePropertiesKHR, sizeof(uint32_t));
18384 streamPtr += sizeof(uint32_t);
18385 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceExternalFencePropertiesKHR, sizeof(uint32_t));
18386 streamPtr += sizeof(uint32_t);
18387 if (queueSubmitWithCommandsEnabled) {
18388 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18389 streamPtr += sizeof(uint32_t);
18390 }
18391 uint64_t cgen_var_0;
18392 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
18393 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18394 *streamPtrPtr += 1 * 8;
18395 reservedmarshal_VkPhysicalDeviceExternalFenceInfo(
18396 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18397 (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), streamPtrPtr);
18398 reservedmarshal_VkExternalFenceProperties(
18399 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalFenceProperties*)(pExternalFenceProperties),
18400 streamPtrPtr);
18401 unmarshal_VkExternalFenceProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18402 (VkExternalFenceProperties*)(pExternalFenceProperties));
18403 if (pExternalFenceProperties) {
18404 transform_fromhost_VkExternalFenceProperties(
18405 sResourceTracker, (VkExternalFenceProperties*)(pExternalFenceProperties));
18406 }
18407 ++encodeCount;
18408 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18409 pool->freeAll();
18410 stream->clearPool();
18411 }
18412 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18413 }
18414
18415 #endif
18416 #ifdef VK_KHR_external_fence_fd
vkImportFenceFdKHR(VkDevice device,const VkImportFenceFdInfoKHR * pImportFenceFdInfo,uint32_t doLock)18417 VkResult VkEncoder::vkImportFenceFdKHR(VkDevice device,
18418 const VkImportFenceFdInfoKHR* pImportFenceFdInfo,
18419 uint32_t doLock) {
18420 (void)doLock;
18421 bool queueSubmitWithCommandsEnabled =
18422 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18423 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18424 auto stream = mImpl->stream();
18425 auto pool = mImpl->pool();
18426 VkDevice local_device;
18427 VkImportFenceFdInfoKHR* local_pImportFenceFdInfo;
18428 local_device = device;
18429 local_pImportFenceFdInfo = nullptr;
18430 if (pImportFenceFdInfo) {
18431 local_pImportFenceFdInfo =
18432 (VkImportFenceFdInfoKHR*)pool->alloc(sizeof(const VkImportFenceFdInfoKHR));
18433 deepcopy_VkImportFenceFdInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImportFenceFdInfo,
18434 (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
18435 }
18436 if (local_pImportFenceFdInfo) {
18437 transform_tohost_VkImportFenceFdInfoKHR(
18438 sResourceTracker, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
18439 }
18440 size_t count = 0;
18441 size_t* countPtr = &count;
18442 {
18443 uint64_t cgen_var_0;
18444 *countPtr += 1 * 8;
18445 count_VkImportFenceFdInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18446 (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo), countPtr);
18447 }
18448 uint32_t packetSize_vkImportFenceFdKHR =
18449 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18450 uint8_t* streamPtr = stream->reserve(packetSize_vkImportFenceFdKHR);
18451 uint8_t* packetBeginPtr = streamPtr;
18452 uint8_t** streamPtrPtr = &streamPtr;
18453 uint32_t opcode_vkImportFenceFdKHR = OP_vkImportFenceFdKHR;
18454 uint32_t seqno;
18455 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18456 memcpy(streamPtr, &opcode_vkImportFenceFdKHR, sizeof(uint32_t));
18457 streamPtr += sizeof(uint32_t);
18458 memcpy(streamPtr, &packetSize_vkImportFenceFdKHR, sizeof(uint32_t));
18459 streamPtr += sizeof(uint32_t);
18460 if (queueSubmitWithCommandsEnabled) {
18461 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18462 streamPtr += sizeof(uint32_t);
18463 }
18464 uint64_t cgen_var_0;
18465 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
18466 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18467 *streamPtrPtr += 1 * 8;
18468 reservedmarshal_VkImportFenceFdInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18469 (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo),
18470 streamPtrPtr);
18471 VkResult vkImportFenceFdKHR_VkResult_return = (VkResult)0;
18472 stream->read(&vkImportFenceFdKHR_VkResult_return, sizeof(VkResult));
18473 ++encodeCount;
18474 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18475 pool->freeAll();
18476 stream->clearPool();
18477 }
18478 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18479 return vkImportFenceFdKHR_VkResult_return;
18480 }
18481
vkGetFenceFdKHR(VkDevice device,const VkFenceGetFdInfoKHR * pGetFdInfo,int * pFd,uint32_t doLock)18482 VkResult VkEncoder::vkGetFenceFdKHR(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo,
18483 int* pFd, uint32_t doLock) {
18484 (void)doLock;
18485 bool queueSubmitWithCommandsEnabled =
18486 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18487 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18488 auto stream = mImpl->stream();
18489 auto pool = mImpl->pool();
18490 VkDevice local_device;
18491 VkFenceGetFdInfoKHR* local_pGetFdInfo;
18492 local_device = device;
18493 local_pGetFdInfo = nullptr;
18494 if (pGetFdInfo) {
18495 local_pGetFdInfo = (VkFenceGetFdInfoKHR*)pool->alloc(sizeof(const VkFenceGetFdInfoKHR));
18496 deepcopy_VkFenceGetFdInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGetFdInfo,
18497 (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
18498 }
18499 if (local_pGetFdInfo) {
18500 transform_tohost_VkFenceGetFdInfoKHR(sResourceTracker,
18501 (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
18502 }
18503 size_t count = 0;
18504 size_t* countPtr = &count;
18505 {
18506 uint64_t cgen_var_0;
18507 *countPtr += 1 * 8;
18508 count_VkFenceGetFdInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18509 (VkFenceGetFdInfoKHR*)(local_pGetFdInfo), countPtr);
18510 *countPtr += sizeof(int);
18511 }
18512 uint32_t packetSize_vkGetFenceFdKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18513 uint8_t* streamPtr = stream->reserve(packetSize_vkGetFenceFdKHR);
18514 uint8_t* packetBeginPtr = streamPtr;
18515 uint8_t** streamPtrPtr = &streamPtr;
18516 uint32_t opcode_vkGetFenceFdKHR = OP_vkGetFenceFdKHR;
18517 uint32_t seqno;
18518 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18519 memcpy(streamPtr, &opcode_vkGetFenceFdKHR, sizeof(uint32_t));
18520 streamPtr += sizeof(uint32_t);
18521 memcpy(streamPtr, &packetSize_vkGetFenceFdKHR, sizeof(uint32_t));
18522 streamPtr += sizeof(uint32_t);
18523 if (queueSubmitWithCommandsEnabled) {
18524 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18525 streamPtr += sizeof(uint32_t);
18526 }
18527 uint64_t cgen_var_0;
18528 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
18529 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18530 *streamPtrPtr += 1 * 8;
18531 reservedmarshal_VkFenceGetFdInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18532 (VkFenceGetFdInfoKHR*)(local_pGetFdInfo), streamPtrPtr);
18533 memcpy(*streamPtrPtr, (int*)pFd, sizeof(int));
18534 *streamPtrPtr += sizeof(int);
18535 stream->read((int*)pFd, sizeof(int));
18536 VkResult vkGetFenceFdKHR_VkResult_return = (VkResult)0;
18537 stream->read(&vkGetFenceFdKHR_VkResult_return, sizeof(VkResult));
18538 ++encodeCount;
18539 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18540 pool->freeAll();
18541 stream->clearPool();
18542 }
18543 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18544 return vkGetFenceFdKHR_VkResult_return;
18545 }
18546
18547 #endif
18548 #ifdef VK_KHR_get_memory_requirements2
vkGetImageMemoryRequirements2KHR(VkDevice device,const VkImageMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)18549 void VkEncoder::vkGetImageMemoryRequirements2KHR(VkDevice device,
18550 const VkImageMemoryRequirementsInfo2* pInfo,
18551 VkMemoryRequirements2* pMemoryRequirements,
18552 uint32_t doLock) {
18553 (void)doLock;
18554 bool queueSubmitWithCommandsEnabled =
18555 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18556 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18557 auto stream = mImpl->stream();
18558 auto pool = mImpl->pool();
18559 VkDevice local_device;
18560 VkImageMemoryRequirementsInfo2* local_pInfo;
18561 local_device = device;
18562 local_pInfo = nullptr;
18563 if (pInfo) {
18564 local_pInfo = (VkImageMemoryRequirementsInfo2*)pool->alloc(
18565 sizeof(const VkImageMemoryRequirementsInfo2));
18566 deepcopy_VkImageMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
18567 (VkImageMemoryRequirementsInfo2*)(local_pInfo));
18568 }
18569 if (local_pInfo) {
18570 transform_tohost_VkImageMemoryRequirementsInfo2(
18571 sResourceTracker, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
18572 }
18573 size_t count = 0;
18574 size_t* countPtr = &count;
18575 {
18576 uint64_t cgen_var_0;
18577 *countPtr += 1 * 8;
18578 count_VkImageMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18579 (VkImageMemoryRequirementsInfo2*)(local_pInfo),
18580 countPtr);
18581 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18582 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
18583 }
18584 uint32_t packetSize_vkGetImageMemoryRequirements2KHR =
18585 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18586 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageMemoryRequirements2KHR);
18587 uint8_t* packetBeginPtr = streamPtr;
18588 uint8_t** streamPtrPtr = &streamPtr;
18589 uint32_t opcode_vkGetImageMemoryRequirements2KHR = OP_vkGetImageMemoryRequirements2KHR;
18590 uint32_t seqno;
18591 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18592 memcpy(streamPtr, &opcode_vkGetImageMemoryRequirements2KHR, sizeof(uint32_t));
18593 streamPtr += sizeof(uint32_t);
18594 memcpy(streamPtr, &packetSize_vkGetImageMemoryRequirements2KHR, sizeof(uint32_t));
18595 streamPtr += sizeof(uint32_t);
18596 if (queueSubmitWithCommandsEnabled) {
18597 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18598 streamPtr += sizeof(uint32_t);
18599 }
18600 uint64_t cgen_var_0;
18601 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
18602 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18603 *streamPtrPtr += 1 * 8;
18604 reservedmarshal_VkImageMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18605 (VkImageMemoryRequirementsInfo2*)(local_pInfo),
18606 streamPtrPtr);
18607 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18608 (VkMemoryRequirements2*)(pMemoryRequirements),
18609 streamPtrPtr);
18610 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18611 (VkMemoryRequirements2*)(pMemoryRequirements));
18612 if (pMemoryRequirements) {
18613 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
18614 (VkMemoryRequirements2*)(pMemoryRequirements));
18615 }
18616 ++encodeCount;
18617 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18618 pool->freeAll();
18619 stream->clearPool();
18620 }
18621 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18622 }
18623
vkGetBufferMemoryRequirements2KHR(VkDevice device,const VkBufferMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)18624 void VkEncoder::vkGetBufferMemoryRequirements2KHR(VkDevice device,
18625 const VkBufferMemoryRequirementsInfo2* pInfo,
18626 VkMemoryRequirements2* pMemoryRequirements,
18627 uint32_t doLock) {
18628 (void)doLock;
18629 bool queueSubmitWithCommandsEnabled =
18630 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18631 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18632 auto stream = mImpl->stream();
18633 auto pool = mImpl->pool();
18634 VkDevice local_device;
18635 VkBufferMemoryRequirementsInfo2* local_pInfo;
18636 local_device = device;
18637 local_pInfo = nullptr;
18638 if (pInfo) {
18639 local_pInfo = (VkBufferMemoryRequirementsInfo2*)pool->alloc(
18640 sizeof(const VkBufferMemoryRequirementsInfo2));
18641 deepcopy_VkBufferMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
18642 (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
18643 }
18644 if (local_pInfo) {
18645 transform_tohost_VkBufferMemoryRequirementsInfo2(
18646 sResourceTracker, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
18647 }
18648 size_t count = 0;
18649 size_t* countPtr = &count;
18650 {
18651 uint64_t cgen_var_0;
18652 *countPtr += 1 * 8;
18653 count_VkBufferMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18654 (VkBufferMemoryRequirementsInfo2*)(local_pInfo),
18655 countPtr);
18656 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18657 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
18658 }
18659 uint32_t packetSize_vkGetBufferMemoryRequirements2KHR =
18660 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18661 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferMemoryRequirements2KHR);
18662 uint8_t* packetBeginPtr = streamPtr;
18663 uint8_t** streamPtrPtr = &streamPtr;
18664 uint32_t opcode_vkGetBufferMemoryRequirements2KHR = OP_vkGetBufferMemoryRequirements2KHR;
18665 uint32_t seqno;
18666 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18667 memcpy(streamPtr, &opcode_vkGetBufferMemoryRequirements2KHR, sizeof(uint32_t));
18668 streamPtr += sizeof(uint32_t);
18669 memcpy(streamPtr, &packetSize_vkGetBufferMemoryRequirements2KHR, sizeof(uint32_t));
18670 streamPtr += sizeof(uint32_t);
18671 if (queueSubmitWithCommandsEnabled) {
18672 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18673 streamPtr += sizeof(uint32_t);
18674 }
18675 uint64_t cgen_var_0;
18676 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
18677 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18678 *streamPtrPtr += 1 * 8;
18679 reservedmarshal_VkBufferMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18680 (VkBufferMemoryRequirementsInfo2*)(local_pInfo),
18681 streamPtrPtr);
18682 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18683 (VkMemoryRequirements2*)(pMemoryRequirements),
18684 streamPtrPtr);
18685 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18686 (VkMemoryRequirements2*)(pMemoryRequirements));
18687 if (pMemoryRequirements) {
18688 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
18689 (VkMemoryRequirements2*)(pMemoryRequirements));
18690 }
18691 ++encodeCount;
18692 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18693 pool->freeAll();
18694 stream->clearPool();
18695 }
18696 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18697 }
18698
vkGetImageSparseMemoryRequirements2KHR(VkDevice device,const VkImageSparseMemoryRequirementsInfo2 * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements,uint32_t doLock)18699 void VkEncoder::vkGetImageSparseMemoryRequirements2KHR(
18700 VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo,
18701 uint32_t* pSparseMemoryRequirementCount,
18702 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements, uint32_t doLock) {
18703 (void)doLock;
18704 bool queueSubmitWithCommandsEnabled =
18705 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18706 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18707 auto stream = mImpl->stream();
18708 auto pool = mImpl->pool();
18709 VkDevice local_device;
18710 VkImageSparseMemoryRequirementsInfo2* local_pInfo;
18711 local_device = device;
18712 local_pInfo = nullptr;
18713 if (pInfo) {
18714 local_pInfo = (VkImageSparseMemoryRequirementsInfo2*)pool->alloc(
18715 sizeof(const VkImageSparseMemoryRequirementsInfo2));
18716 deepcopy_VkImageSparseMemoryRequirementsInfo2(
18717 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
18718 (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
18719 }
18720 if (local_pInfo) {
18721 transform_tohost_VkImageSparseMemoryRequirementsInfo2(
18722 sResourceTracker, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
18723 }
18724 size_t count = 0;
18725 size_t* countPtr = &count;
18726 {
18727 uint64_t cgen_var_0;
18728 *countPtr += 1 * 8;
18729 count_VkImageSparseMemoryRequirementsInfo2(
18730 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18731 (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo), countPtr);
18732 // WARNING PTR CHECK
18733 *countPtr += 8;
18734 if (pSparseMemoryRequirementCount) {
18735 *countPtr += sizeof(uint32_t);
18736 }
18737 // WARNING PTR CHECK
18738 *countPtr += 8;
18739 if (pSparseMemoryRequirements) {
18740 if (pSparseMemoryRequirementCount) {
18741 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
18742 count_VkSparseImageMemoryRequirements2(
18743 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18744 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i),
18745 countPtr);
18746 }
18747 }
18748 }
18749 }
18750 uint32_t packetSize_vkGetImageSparseMemoryRequirements2KHR =
18751 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18752 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageSparseMemoryRequirements2KHR);
18753 uint8_t* packetBeginPtr = streamPtr;
18754 uint8_t** streamPtrPtr = &streamPtr;
18755 uint32_t opcode_vkGetImageSparseMemoryRequirements2KHR =
18756 OP_vkGetImageSparseMemoryRequirements2KHR;
18757 uint32_t seqno;
18758 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18759 memcpy(streamPtr, &opcode_vkGetImageSparseMemoryRequirements2KHR, sizeof(uint32_t));
18760 streamPtr += sizeof(uint32_t);
18761 memcpy(streamPtr, &packetSize_vkGetImageSparseMemoryRequirements2KHR, sizeof(uint32_t));
18762 streamPtr += sizeof(uint32_t);
18763 if (queueSubmitWithCommandsEnabled) {
18764 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18765 streamPtr += sizeof(uint32_t);
18766 }
18767 uint64_t cgen_var_0;
18768 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
18769 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18770 *streamPtrPtr += 1 * 8;
18771 reservedmarshal_VkImageSparseMemoryRequirementsInfo2(
18772 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo),
18773 streamPtrPtr);
18774 // WARNING PTR CHECK
18775 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
18776 memcpy((*streamPtrPtr), &cgen_var_1, 8);
18777 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
18778 *streamPtrPtr += 8;
18779 if (pSparseMemoryRequirementCount) {
18780 memcpy(*streamPtrPtr, (uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
18781 *streamPtrPtr += sizeof(uint32_t);
18782 }
18783 // WARNING PTR CHECK
18784 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
18785 memcpy((*streamPtrPtr), &cgen_var_2, 8);
18786 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
18787 *streamPtrPtr += 8;
18788 if (pSparseMemoryRequirements) {
18789 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
18790 reservedmarshal_VkSparseImageMemoryRequirements2(
18791 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18792 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), streamPtrPtr);
18793 }
18794 }
18795 // WARNING PTR CHECK
18796 uint32_t* check_pSparseMemoryRequirementCount;
18797 check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
18798 if (pSparseMemoryRequirementCount) {
18799 if (!(check_pSparseMemoryRequirementCount)) {
18800 fprintf(stderr,
18801 "fatal: pSparseMemoryRequirementCount inconsistent between guest and host\n");
18802 }
18803 stream->read((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
18804 }
18805 // WARNING PTR CHECK
18806 VkSparseImageMemoryRequirements2* check_pSparseMemoryRequirements;
18807 check_pSparseMemoryRequirements =
18808 (VkSparseImageMemoryRequirements2*)(uintptr_t)stream->getBe64();
18809 if (pSparseMemoryRequirements) {
18810 if (!(check_pSparseMemoryRequirements)) {
18811 fprintf(stderr,
18812 "fatal: pSparseMemoryRequirements inconsistent between guest and host\n");
18813 }
18814 if (pSparseMemoryRequirementCount) {
18815 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
18816 unmarshal_VkSparseImageMemoryRequirements2(
18817 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18818 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
18819 }
18820 }
18821 }
18822 if (pSparseMemoryRequirementCount) {
18823 if (pSparseMemoryRequirements) {
18824 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
18825 transform_fromhost_VkSparseImageMemoryRequirements2(
18826 sResourceTracker,
18827 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
18828 }
18829 }
18830 }
18831 ++encodeCount;
18832 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18833 pool->freeAll();
18834 stream->clearPool();
18835 }
18836 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18837 }
18838
18839 #endif
18840 #ifdef VK_KHR_sampler_ycbcr_conversion
vkCreateSamplerYcbcrConversionKHR(VkDevice device,const VkSamplerYcbcrConversionCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSamplerYcbcrConversion * pYcbcrConversion,uint32_t doLock)18841 VkResult VkEncoder::vkCreateSamplerYcbcrConversionKHR(
18842 VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
18843 const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion,
18844 uint32_t doLock) {
18845 (void)doLock;
18846 bool queueSubmitWithCommandsEnabled =
18847 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18848 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18849 auto stream = mImpl->stream();
18850 auto pool = mImpl->pool();
18851 VkDevice local_device;
18852 VkSamplerYcbcrConversionCreateInfo* local_pCreateInfo;
18853 VkAllocationCallbacks* local_pAllocator;
18854 local_device = device;
18855 local_pCreateInfo = nullptr;
18856 if (pCreateInfo) {
18857 local_pCreateInfo = (VkSamplerYcbcrConversionCreateInfo*)pool->alloc(
18858 sizeof(const VkSamplerYcbcrConversionCreateInfo));
18859 deepcopy_VkSamplerYcbcrConversionCreateInfo(
18860 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
18861 (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
18862 }
18863 local_pAllocator = nullptr;
18864 if (pAllocator) {
18865 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
18866 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
18867 (VkAllocationCallbacks*)(local_pAllocator));
18868 }
18869 local_pAllocator = nullptr;
18870 if (local_pCreateInfo) {
18871 transform_tohost_VkSamplerYcbcrConversionCreateInfo(
18872 sResourceTracker, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
18873 }
18874 if (local_pAllocator) {
18875 transform_tohost_VkAllocationCallbacks(sResourceTracker,
18876 (VkAllocationCallbacks*)(local_pAllocator));
18877 }
18878 size_t count = 0;
18879 size_t* countPtr = &count;
18880 {
18881 uint64_t cgen_var_0;
18882 *countPtr += 1 * 8;
18883 count_VkSamplerYcbcrConversionCreateInfo(
18884 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18885 (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), countPtr);
18886 // WARNING PTR CHECK
18887 *countPtr += 8;
18888 if (local_pAllocator) {
18889 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18890 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
18891 }
18892 uint64_t cgen_var_1;
18893 *countPtr += 8;
18894 }
18895 uint32_t packetSize_vkCreateSamplerYcbcrConversionKHR =
18896 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18897 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateSamplerYcbcrConversionKHR);
18898 uint8_t* packetBeginPtr = streamPtr;
18899 uint8_t** streamPtrPtr = &streamPtr;
18900 uint32_t opcode_vkCreateSamplerYcbcrConversionKHR = OP_vkCreateSamplerYcbcrConversionKHR;
18901 uint32_t seqno;
18902 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18903 memcpy(streamPtr, &opcode_vkCreateSamplerYcbcrConversionKHR, sizeof(uint32_t));
18904 streamPtr += sizeof(uint32_t);
18905 memcpy(streamPtr, &packetSize_vkCreateSamplerYcbcrConversionKHR, sizeof(uint32_t));
18906 streamPtr += sizeof(uint32_t);
18907 if (queueSubmitWithCommandsEnabled) {
18908 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18909 streamPtr += sizeof(uint32_t);
18910 }
18911 uint64_t cgen_var_0;
18912 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
18913 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18914 *streamPtrPtr += 1 * 8;
18915 reservedmarshal_VkSamplerYcbcrConversionCreateInfo(
18916 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18917 (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), streamPtrPtr);
18918 // WARNING PTR CHECK
18919 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
18920 memcpy((*streamPtrPtr), &cgen_var_1, 8);
18921 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
18922 *streamPtrPtr += 8;
18923 if (local_pAllocator) {
18924 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18925 (VkAllocationCallbacks*)(local_pAllocator),
18926 streamPtrPtr);
18927 }
18928 /* is handle, possibly out */;
18929 uint64_t cgen_var_2;
18930 *&cgen_var_2 = (uint64_t)((*pYcbcrConversion));
18931 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
18932 *streamPtrPtr += 8;
18933 /* is handle, possibly out */;
18934 stream->setHandleMapping(sResourceTracker->createMapping());
18935 uint64_t cgen_var_3;
18936 stream->read((uint64_t*)&cgen_var_3, 8);
18937 stream->handleMapping()->mapHandles_u64_VkSamplerYcbcrConversion(
18938 &cgen_var_3, (VkSamplerYcbcrConversion*)pYcbcrConversion, 1);
18939 stream->unsetHandleMapping();
18940 VkResult vkCreateSamplerYcbcrConversionKHR_VkResult_return = (VkResult)0;
18941 stream->read(&vkCreateSamplerYcbcrConversionKHR_VkResult_return, sizeof(VkResult));
18942 ++encodeCount;
18943 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18944 pool->freeAll();
18945 stream->clearPool();
18946 }
18947 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18948 return vkCreateSamplerYcbcrConversionKHR_VkResult_return;
18949 }
18950
vkDestroySamplerYcbcrConversionKHR(VkDevice device,VkSamplerYcbcrConversion ycbcrConversion,const VkAllocationCallbacks * pAllocator,uint32_t doLock)18951 void VkEncoder::vkDestroySamplerYcbcrConversionKHR(VkDevice device,
18952 VkSamplerYcbcrConversion ycbcrConversion,
18953 const VkAllocationCallbacks* pAllocator,
18954 uint32_t doLock) {
18955 (void)doLock;
18956 bool queueSubmitWithCommandsEnabled =
18957 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18958 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18959 auto stream = mImpl->stream();
18960 auto pool = mImpl->pool();
18961 VkDevice local_device;
18962 VkSamplerYcbcrConversion local_ycbcrConversion;
18963 VkAllocationCallbacks* local_pAllocator;
18964 local_device = device;
18965 local_ycbcrConversion = ycbcrConversion;
18966 local_pAllocator = nullptr;
18967 if (pAllocator) {
18968 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
18969 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
18970 (VkAllocationCallbacks*)(local_pAllocator));
18971 }
18972 local_pAllocator = nullptr;
18973 if (local_pAllocator) {
18974 transform_tohost_VkAllocationCallbacks(sResourceTracker,
18975 (VkAllocationCallbacks*)(local_pAllocator));
18976 }
18977 size_t count = 0;
18978 size_t* countPtr = &count;
18979 {
18980 uint64_t cgen_var_0;
18981 *countPtr += 1 * 8;
18982 uint64_t cgen_var_1;
18983 *countPtr += 1 * 8;
18984 // WARNING PTR CHECK
18985 *countPtr += 8;
18986 if (local_pAllocator) {
18987 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18988 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
18989 }
18990 }
18991 uint32_t packetSize_vkDestroySamplerYcbcrConversionKHR =
18992 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18993 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroySamplerYcbcrConversionKHR);
18994 uint8_t* packetBeginPtr = streamPtr;
18995 uint8_t** streamPtrPtr = &streamPtr;
18996 uint32_t opcode_vkDestroySamplerYcbcrConversionKHR = OP_vkDestroySamplerYcbcrConversionKHR;
18997 uint32_t seqno;
18998 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18999 memcpy(streamPtr, &opcode_vkDestroySamplerYcbcrConversionKHR, sizeof(uint32_t));
19000 streamPtr += sizeof(uint32_t);
19001 memcpy(streamPtr, &packetSize_vkDestroySamplerYcbcrConversionKHR, sizeof(uint32_t));
19002 streamPtr += sizeof(uint32_t);
19003 if (queueSubmitWithCommandsEnabled) {
19004 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19005 streamPtr += sizeof(uint32_t);
19006 }
19007 uint64_t cgen_var_0;
19008 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19009 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19010 *streamPtrPtr += 1 * 8;
19011 uint64_t cgen_var_1;
19012 *&cgen_var_1 = get_host_u64_VkSamplerYcbcrConversion((*&local_ycbcrConversion));
19013 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
19014 *streamPtrPtr += 1 * 8;
19015 // WARNING PTR CHECK
19016 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
19017 memcpy((*streamPtrPtr), &cgen_var_2, 8);
19018 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
19019 *streamPtrPtr += 8;
19020 if (local_pAllocator) {
19021 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19022 (VkAllocationCallbacks*)(local_pAllocator),
19023 streamPtrPtr);
19024 }
19025 sResourceTracker->destroyMapping()->mapHandles_VkSamplerYcbcrConversion(
19026 (VkSamplerYcbcrConversion*)&ycbcrConversion);
19027 stream->flush();
19028 ++encodeCount;
19029 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19030 pool->freeAll();
19031 stream->clearPool();
19032 }
19033 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19034 }
19035
19036 #endif
19037 #ifdef VK_KHR_bind_memory2
vkBindBufferMemory2KHR(VkDevice device,uint32_t bindInfoCount,const VkBindBufferMemoryInfo * pBindInfos,uint32_t doLock)19038 VkResult VkEncoder::vkBindBufferMemory2KHR(VkDevice device, uint32_t bindInfoCount,
19039 const VkBindBufferMemoryInfo* pBindInfos,
19040 uint32_t doLock) {
19041 (void)doLock;
19042 bool queueSubmitWithCommandsEnabled =
19043 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19044 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19045 auto stream = mImpl->stream();
19046 auto pool = mImpl->pool();
19047 VkDevice local_device;
19048 uint32_t local_bindInfoCount;
19049 VkBindBufferMemoryInfo* local_pBindInfos;
19050 local_device = device;
19051 local_bindInfoCount = bindInfoCount;
19052 local_pBindInfos = nullptr;
19053 if (pBindInfos) {
19054 local_pBindInfos = (VkBindBufferMemoryInfo*)pool->alloc(
19055 ((bindInfoCount)) * sizeof(const VkBindBufferMemoryInfo));
19056 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
19057 deepcopy_VkBindBufferMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfos + i,
19058 (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
19059 }
19060 }
19061 if (local_pBindInfos) {
19062 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
19063 transform_tohost_VkBindBufferMemoryInfo(
19064 sResourceTracker, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
19065 }
19066 }
19067 size_t count = 0;
19068 size_t* countPtr = &count;
19069 {
19070 uint64_t cgen_var_0;
19071 *countPtr += 1 * 8;
19072 *countPtr += sizeof(uint32_t);
19073 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
19074 count_VkBindBufferMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19075 (VkBindBufferMemoryInfo*)(local_pBindInfos + i), countPtr);
19076 }
19077 }
19078 uint32_t packetSize_vkBindBufferMemory2KHR =
19079 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19080 uint8_t* streamPtr = stream->reserve(packetSize_vkBindBufferMemory2KHR);
19081 uint8_t* packetBeginPtr = streamPtr;
19082 uint8_t** streamPtrPtr = &streamPtr;
19083 uint32_t opcode_vkBindBufferMemory2KHR = OP_vkBindBufferMemory2KHR;
19084 uint32_t seqno;
19085 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19086 memcpy(streamPtr, &opcode_vkBindBufferMemory2KHR, sizeof(uint32_t));
19087 streamPtr += sizeof(uint32_t);
19088 memcpy(streamPtr, &packetSize_vkBindBufferMemory2KHR, sizeof(uint32_t));
19089 streamPtr += sizeof(uint32_t);
19090 if (queueSubmitWithCommandsEnabled) {
19091 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19092 streamPtr += sizeof(uint32_t);
19093 }
19094 uint64_t cgen_var_0;
19095 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19096 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19097 *streamPtrPtr += 1 * 8;
19098 memcpy(*streamPtrPtr, (uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
19099 *streamPtrPtr += sizeof(uint32_t);
19100 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
19101 reservedmarshal_VkBindBufferMemoryInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19102 (VkBindBufferMemoryInfo*)(local_pBindInfos + i),
19103 streamPtrPtr);
19104 }
19105 VkResult vkBindBufferMemory2KHR_VkResult_return = (VkResult)0;
19106 stream->read(&vkBindBufferMemory2KHR_VkResult_return, sizeof(VkResult));
19107 ++encodeCount;
19108 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19109 pool->freeAll();
19110 stream->clearPool();
19111 }
19112 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19113 return vkBindBufferMemory2KHR_VkResult_return;
19114 }
19115
vkBindImageMemory2KHR(VkDevice device,uint32_t bindInfoCount,const VkBindImageMemoryInfo * pBindInfos,uint32_t doLock)19116 VkResult VkEncoder::vkBindImageMemory2KHR(VkDevice device, uint32_t bindInfoCount,
19117 const VkBindImageMemoryInfo* pBindInfos,
19118 uint32_t doLock) {
19119 (void)doLock;
19120 bool queueSubmitWithCommandsEnabled =
19121 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19122 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19123 auto stream = mImpl->stream();
19124 auto pool = mImpl->pool();
19125 VkDevice local_device;
19126 uint32_t local_bindInfoCount;
19127 VkBindImageMemoryInfo* local_pBindInfos;
19128 local_device = device;
19129 local_bindInfoCount = bindInfoCount;
19130 local_pBindInfos = nullptr;
19131 if (pBindInfos) {
19132 local_pBindInfos = (VkBindImageMemoryInfo*)pool->alloc(((bindInfoCount)) *
19133 sizeof(const VkBindImageMemoryInfo));
19134 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
19135 deepcopy_VkBindImageMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfos + i,
19136 (VkBindImageMemoryInfo*)(local_pBindInfos + i));
19137 }
19138 }
19139 if (local_pBindInfos) {
19140 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
19141 transform_tohost_VkBindImageMemoryInfo(sResourceTracker,
19142 (VkBindImageMemoryInfo*)(local_pBindInfos + i));
19143 }
19144 }
19145 size_t count = 0;
19146 size_t* countPtr = &count;
19147 {
19148 uint64_t cgen_var_0;
19149 *countPtr += 1 * 8;
19150 *countPtr += sizeof(uint32_t);
19151 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
19152 count_VkBindImageMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19153 (VkBindImageMemoryInfo*)(local_pBindInfos + i), countPtr);
19154 }
19155 }
19156 uint32_t packetSize_vkBindImageMemory2KHR =
19157 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19158 uint8_t* streamPtr = stream->reserve(packetSize_vkBindImageMemory2KHR);
19159 uint8_t* packetBeginPtr = streamPtr;
19160 uint8_t** streamPtrPtr = &streamPtr;
19161 uint32_t opcode_vkBindImageMemory2KHR = OP_vkBindImageMemory2KHR;
19162 uint32_t seqno;
19163 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19164 memcpy(streamPtr, &opcode_vkBindImageMemory2KHR, sizeof(uint32_t));
19165 streamPtr += sizeof(uint32_t);
19166 memcpy(streamPtr, &packetSize_vkBindImageMemory2KHR, sizeof(uint32_t));
19167 streamPtr += sizeof(uint32_t);
19168 if (queueSubmitWithCommandsEnabled) {
19169 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19170 streamPtr += sizeof(uint32_t);
19171 }
19172 uint64_t cgen_var_0;
19173 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19174 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19175 *streamPtrPtr += 1 * 8;
19176 memcpy(*streamPtrPtr, (uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
19177 *streamPtrPtr += sizeof(uint32_t);
19178 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
19179 reservedmarshal_VkBindImageMemoryInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19180 (VkBindImageMemoryInfo*)(local_pBindInfos + i),
19181 streamPtrPtr);
19182 }
19183 VkResult vkBindImageMemory2KHR_VkResult_return = (VkResult)0;
19184 stream->read(&vkBindImageMemory2KHR_VkResult_return, sizeof(VkResult));
19185 ++encodeCount;
19186 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19187 pool->freeAll();
19188 stream->clearPool();
19189 }
19190 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19191 return vkBindImageMemory2KHR_VkResult_return;
19192 }
19193
19194 #endif
19195 #ifdef VK_KHR_maintenance3
vkGetDescriptorSetLayoutSupportKHR(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,VkDescriptorSetLayoutSupport * pSupport,uint32_t doLock)19196 void VkEncoder::vkGetDescriptorSetLayoutSupportKHR(
19197 VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
19198 VkDescriptorSetLayoutSupport* pSupport, uint32_t doLock) {
19199 (void)doLock;
19200 bool queueSubmitWithCommandsEnabled =
19201 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19202 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19203 auto stream = mImpl->stream();
19204 auto pool = mImpl->pool();
19205 VkDevice local_device;
19206 VkDescriptorSetLayoutCreateInfo* local_pCreateInfo;
19207 local_device = device;
19208 local_pCreateInfo = nullptr;
19209 if (pCreateInfo) {
19210 local_pCreateInfo = (VkDescriptorSetLayoutCreateInfo*)pool->alloc(
19211 sizeof(const VkDescriptorSetLayoutCreateInfo));
19212 deepcopy_VkDescriptorSetLayoutCreateInfo(
19213 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
19214 (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
19215 }
19216 if (local_pCreateInfo) {
19217 transform_tohost_VkDescriptorSetLayoutCreateInfo(
19218 sResourceTracker, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
19219 }
19220 size_t count = 0;
19221 size_t* countPtr = &count;
19222 {
19223 uint64_t cgen_var_0;
19224 *countPtr += 1 * 8;
19225 count_VkDescriptorSetLayoutCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19226 (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo),
19227 countPtr);
19228 count_VkDescriptorSetLayoutSupport(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19229 (VkDescriptorSetLayoutSupport*)(pSupport), countPtr);
19230 }
19231 uint32_t packetSize_vkGetDescriptorSetLayoutSupportKHR =
19232 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19233 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDescriptorSetLayoutSupportKHR);
19234 uint8_t* packetBeginPtr = streamPtr;
19235 uint8_t** streamPtrPtr = &streamPtr;
19236 uint32_t opcode_vkGetDescriptorSetLayoutSupportKHR = OP_vkGetDescriptorSetLayoutSupportKHR;
19237 uint32_t seqno;
19238 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19239 memcpy(streamPtr, &opcode_vkGetDescriptorSetLayoutSupportKHR, sizeof(uint32_t));
19240 streamPtr += sizeof(uint32_t);
19241 memcpy(streamPtr, &packetSize_vkGetDescriptorSetLayoutSupportKHR, sizeof(uint32_t));
19242 streamPtr += sizeof(uint32_t);
19243 if (queueSubmitWithCommandsEnabled) {
19244 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19245 streamPtr += sizeof(uint32_t);
19246 }
19247 uint64_t cgen_var_0;
19248 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19249 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19250 *streamPtrPtr += 1 * 8;
19251 reservedmarshal_VkDescriptorSetLayoutCreateInfo(
19252 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo),
19253 streamPtrPtr);
19254 reservedmarshal_VkDescriptorSetLayoutSupport(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19255 (VkDescriptorSetLayoutSupport*)(pSupport),
19256 streamPtrPtr);
19257 unmarshal_VkDescriptorSetLayoutSupport(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19258 (VkDescriptorSetLayoutSupport*)(pSupport));
19259 if (pSupport) {
19260 transform_fromhost_VkDescriptorSetLayoutSupport(sResourceTracker,
19261 (VkDescriptorSetLayoutSupport*)(pSupport));
19262 }
19263 ++encodeCount;
19264 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19265 pool->freeAll();
19266 stream->clearPool();
19267 }
19268 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19269 }
19270
19271 #endif
19272 #ifdef VK_KHR_buffer_device_address
vkGetBufferDeviceAddressKHR(VkDevice device,const VkBufferDeviceAddressInfo * pInfo,uint32_t doLock)19273 VkDeviceAddress VkEncoder::vkGetBufferDeviceAddressKHR(VkDevice device,
19274 const VkBufferDeviceAddressInfo* pInfo,
19275 uint32_t doLock) {
19276 (void)doLock;
19277 bool queueSubmitWithCommandsEnabled =
19278 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19279 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19280 auto stream = mImpl->stream();
19281 auto pool = mImpl->pool();
19282 VkDevice local_device;
19283 VkBufferDeviceAddressInfo* local_pInfo;
19284 local_device = device;
19285 local_pInfo = nullptr;
19286 if (pInfo) {
19287 local_pInfo =
19288 (VkBufferDeviceAddressInfo*)pool->alloc(sizeof(const VkBufferDeviceAddressInfo));
19289 deepcopy_VkBufferDeviceAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
19290 (VkBufferDeviceAddressInfo*)(local_pInfo));
19291 }
19292 if (local_pInfo) {
19293 transform_tohost_VkBufferDeviceAddressInfo(sResourceTracker,
19294 (VkBufferDeviceAddressInfo*)(local_pInfo));
19295 }
19296 size_t count = 0;
19297 size_t* countPtr = &count;
19298 {
19299 uint64_t cgen_var_0;
19300 *countPtr += 1 * 8;
19301 count_VkBufferDeviceAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19302 (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
19303 }
19304 uint32_t packetSize_vkGetBufferDeviceAddressKHR =
19305 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19306 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferDeviceAddressKHR);
19307 uint8_t* packetBeginPtr = streamPtr;
19308 uint8_t** streamPtrPtr = &streamPtr;
19309 uint32_t opcode_vkGetBufferDeviceAddressKHR = OP_vkGetBufferDeviceAddressKHR;
19310 uint32_t seqno;
19311 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19312 memcpy(streamPtr, &opcode_vkGetBufferDeviceAddressKHR, sizeof(uint32_t));
19313 streamPtr += sizeof(uint32_t);
19314 memcpy(streamPtr, &packetSize_vkGetBufferDeviceAddressKHR, sizeof(uint32_t));
19315 streamPtr += sizeof(uint32_t);
19316 if (queueSubmitWithCommandsEnabled) {
19317 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19318 streamPtr += sizeof(uint32_t);
19319 }
19320 uint64_t cgen_var_0;
19321 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19322 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19323 *streamPtrPtr += 1 * 8;
19324 reservedmarshal_VkBufferDeviceAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19325 (VkBufferDeviceAddressInfo*)(local_pInfo),
19326 streamPtrPtr);
19327 VkDeviceAddress vkGetBufferDeviceAddressKHR_VkDeviceAddress_return = (VkDeviceAddress)0;
19328 stream->read(&vkGetBufferDeviceAddressKHR_VkDeviceAddress_return, sizeof(VkDeviceAddress));
19329 ++encodeCount;
19330 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19331 pool->freeAll();
19332 stream->clearPool();
19333 }
19334 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19335 return vkGetBufferDeviceAddressKHR_VkDeviceAddress_return;
19336 }
19337
vkGetBufferOpaqueCaptureAddressKHR(VkDevice device,const VkBufferDeviceAddressInfo * pInfo,uint32_t doLock)19338 uint64_t VkEncoder::vkGetBufferOpaqueCaptureAddressKHR(VkDevice device,
19339 const VkBufferDeviceAddressInfo* pInfo,
19340 uint32_t doLock) {
19341 (void)doLock;
19342 bool queueSubmitWithCommandsEnabled =
19343 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19344 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19345 auto stream = mImpl->stream();
19346 auto pool = mImpl->pool();
19347 VkDevice local_device;
19348 VkBufferDeviceAddressInfo* local_pInfo;
19349 local_device = device;
19350 local_pInfo = nullptr;
19351 if (pInfo) {
19352 local_pInfo =
19353 (VkBufferDeviceAddressInfo*)pool->alloc(sizeof(const VkBufferDeviceAddressInfo));
19354 deepcopy_VkBufferDeviceAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
19355 (VkBufferDeviceAddressInfo*)(local_pInfo));
19356 }
19357 if (local_pInfo) {
19358 transform_tohost_VkBufferDeviceAddressInfo(sResourceTracker,
19359 (VkBufferDeviceAddressInfo*)(local_pInfo));
19360 }
19361 size_t count = 0;
19362 size_t* countPtr = &count;
19363 {
19364 uint64_t cgen_var_0;
19365 *countPtr += 1 * 8;
19366 count_VkBufferDeviceAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19367 (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
19368 }
19369 uint32_t packetSize_vkGetBufferOpaqueCaptureAddressKHR =
19370 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19371 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferOpaqueCaptureAddressKHR);
19372 uint8_t* packetBeginPtr = streamPtr;
19373 uint8_t** streamPtrPtr = &streamPtr;
19374 uint32_t opcode_vkGetBufferOpaqueCaptureAddressKHR = OP_vkGetBufferOpaqueCaptureAddressKHR;
19375 uint32_t seqno;
19376 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19377 memcpy(streamPtr, &opcode_vkGetBufferOpaqueCaptureAddressKHR, sizeof(uint32_t));
19378 streamPtr += sizeof(uint32_t);
19379 memcpy(streamPtr, &packetSize_vkGetBufferOpaqueCaptureAddressKHR, sizeof(uint32_t));
19380 streamPtr += sizeof(uint32_t);
19381 if (queueSubmitWithCommandsEnabled) {
19382 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19383 streamPtr += sizeof(uint32_t);
19384 }
19385 uint64_t cgen_var_0;
19386 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19387 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19388 *streamPtrPtr += 1 * 8;
19389 reservedmarshal_VkBufferDeviceAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19390 (VkBufferDeviceAddressInfo*)(local_pInfo),
19391 streamPtrPtr);
19392 uint64_t vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return = (uint64_t)0;
19393 stream->read(&vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return, sizeof(uint64_t));
19394 ++encodeCount;
19395 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19396 pool->freeAll();
19397 stream->clearPool();
19398 }
19399 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19400 return vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return;
19401 }
19402
vkGetDeviceMemoryOpaqueCaptureAddressKHR(VkDevice device,const VkDeviceMemoryOpaqueCaptureAddressInfo * pInfo,uint32_t doLock)19403 uint64_t VkEncoder::vkGetDeviceMemoryOpaqueCaptureAddressKHR(
19404 VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo, uint32_t doLock) {
19405 (void)doLock;
19406 bool queueSubmitWithCommandsEnabled =
19407 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19408 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19409 auto stream = mImpl->stream();
19410 auto pool = mImpl->pool();
19411 VkDevice local_device;
19412 VkDeviceMemoryOpaqueCaptureAddressInfo* local_pInfo;
19413 local_device = device;
19414 local_pInfo = nullptr;
19415 if (pInfo) {
19416 local_pInfo = (VkDeviceMemoryOpaqueCaptureAddressInfo*)pool->alloc(
19417 sizeof(const VkDeviceMemoryOpaqueCaptureAddressInfo));
19418 deepcopy_VkDeviceMemoryOpaqueCaptureAddressInfo(
19419 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
19420 (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo));
19421 }
19422 if (local_pInfo) {
19423 transform_tohost_VkDeviceMemoryOpaqueCaptureAddressInfo(
19424 sResourceTracker, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo));
19425 }
19426 size_t count = 0;
19427 size_t* countPtr = &count;
19428 {
19429 uint64_t cgen_var_0;
19430 *countPtr += 1 * 8;
19431 count_VkDeviceMemoryOpaqueCaptureAddressInfo(
19432 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19433 (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo), countPtr);
19434 }
19435 uint32_t packetSize_vkGetDeviceMemoryOpaqueCaptureAddressKHR =
19436 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19437 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceMemoryOpaqueCaptureAddressKHR);
19438 uint8_t* packetBeginPtr = streamPtr;
19439 uint8_t** streamPtrPtr = &streamPtr;
19440 uint32_t opcode_vkGetDeviceMemoryOpaqueCaptureAddressKHR =
19441 OP_vkGetDeviceMemoryOpaqueCaptureAddressKHR;
19442 uint32_t seqno;
19443 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19444 memcpy(streamPtr, &opcode_vkGetDeviceMemoryOpaqueCaptureAddressKHR, sizeof(uint32_t));
19445 streamPtr += sizeof(uint32_t);
19446 memcpy(streamPtr, &packetSize_vkGetDeviceMemoryOpaqueCaptureAddressKHR, sizeof(uint32_t));
19447 streamPtr += sizeof(uint32_t);
19448 if (queueSubmitWithCommandsEnabled) {
19449 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19450 streamPtr += sizeof(uint32_t);
19451 }
19452 uint64_t cgen_var_0;
19453 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19454 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19455 *streamPtrPtr += 1 * 8;
19456 reservedmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(
19457 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo),
19458 streamPtrPtr);
19459 uint64_t vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return = (uint64_t)0;
19460 stream->read(&vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return, sizeof(uint64_t));
19461 ++encodeCount;
19462 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19463 pool->freeAll();
19464 stream->clearPool();
19465 }
19466 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19467 return vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return;
19468 }
19469
19470 #endif
19471 #ifdef VK_KHR_pipeline_executable_properties
vkGetPipelineExecutablePropertiesKHR(VkDevice device,const VkPipelineInfoKHR * pPipelineInfo,uint32_t * pExecutableCount,VkPipelineExecutablePropertiesKHR * pProperties,uint32_t doLock)19472 VkResult VkEncoder::vkGetPipelineExecutablePropertiesKHR(
19473 VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, uint32_t* pExecutableCount,
19474 VkPipelineExecutablePropertiesKHR* pProperties, uint32_t doLock) {
19475 (void)doLock;
19476 bool queueSubmitWithCommandsEnabled =
19477 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19478 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19479 auto stream = mImpl->stream();
19480 auto pool = mImpl->pool();
19481 VkDevice local_device;
19482 VkPipelineInfoKHR* local_pPipelineInfo;
19483 local_device = device;
19484 local_pPipelineInfo = nullptr;
19485 if (pPipelineInfo) {
19486 local_pPipelineInfo = (VkPipelineInfoKHR*)pool->alloc(sizeof(const VkPipelineInfoKHR));
19487 deepcopy_VkPipelineInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pPipelineInfo,
19488 (VkPipelineInfoKHR*)(local_pPipelineInfo));
19489 }
19490 if (local_pPipelineInfo) {
19491 transform_tohost_VkPipelineInfoKHR(sResourceTracker,
19492 (VkPipelineInfoKHR*)(local_pPipelineInfo));
19493 }
19494 size_t count = 0;
19495 size_t* countPtr = &count;
19496 {
19497 uint64_t cgen_var_0;
19498 *countPtr += 1 * 8;
19499 count_VkPipelineInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19500 (VkPipelineInfoKHR*)(local_pPipelineInfo), countPtr);
19501 // WARNING PTR CHECK
19502 *countPtr += 8;
19503 if (pExecutableCount) {
19504 *countPtr += sizeof(uint32_t);
19505 }
19506 // WARNING PTR CHECK
19507 *countPtr += 8;
19508 if (pProperties) {
19509 if (pExecutableCount) {
19510 for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
19511 count_VkPipelineExecutablePropertiesKHR(
19512 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19513 (VkPipelineExecutablePropertiesKHR*)(pProperties + i), countPtr);
19514 }
19515 }
19516 }
19517 }
19518 uint32_t packetSize_vkGetPipelineExecutablePropertiesKHR =
19519 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19520 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPipelineExecutablePropertiesKHR);
19521 uint8_t* packetBeginPtr = streamPtr;
19522 uint8_t** streamPtrPtr = &streamPtr;
19523 uint32_t opcode_vkGetPipelineExecutablePropertiesKHR = OP_vkGetPipelineExecutablePropertiesKHR;
19524 uint32_t seqno;
19525 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19526 memcpy(streamPtr, &opcode_vkGetPipelineExecutablePropertiesKHR, sizeof(uint32_t));
19527 streamPtr += sizeof(uint32_t);
19528 memcpy(streamPtr, &packetSize_vkGetPipelineExecutablePropertiesKHR, sizeof(uint32_t));
19529 streamPtr += sizeof(uint32_t);
19530 if (queueSubmitWithCommandsEnabled) {
19531 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19532 streamPtr += sizeof(uint32_t);
19533 }
19534 uint64_t cgen_var_0;
19535 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19536 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19537 *streamPtrPtr += 1 * 8;
19538 reservedmarshal_VkPipelineInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19539 (VkPipelineInfoKHR*)(local_pPipelineInfo), streamPtrPtr);
19540 // WARNING PTR CHECK
19541 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pExecutableCount;
19542 memcpy((*streamPtrPtr), &cgen_var_1, 8);
19543 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
19544 *streamPtrPtr += 8;
19545 if (pExecutableCount) {
19546 memcpy(*streamPtrPtr, (uint32_t*)pExecutableCount, sizeof(uint32_t));
19547 *streamPtrPtr += sizeof(uint32_t);
19548 }
19549 // WARNING PTR CHECK
19550 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pProperties;
19551 memcpy((*streamPtrPtr), &cgen_var_2, 8);
19552 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
19553 *streamPtrPtr += 8;
19554 if (pProperties) {
19555 for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
19556 reservedmarshal_VkPipelineExecutablePropertiesKHR(
19557 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19558 (VkPipelineExecutablePropertiesKHR*)(pProperties + i), streamPtrPtr);
19559 }
19560 }
19561 // WARNING PTR CHECK
19562 uint32_t* check_pExecutableCount;
19563 check_pExecutableCount = (uint32_t*)(uintptr_t)stream->getBe64();
19564 if (pExecutableCount) {
19565 if (!(check_pExecutableCount)) {
19566 fprintf(stderr, "fatal: pExecutableCount inconsistent between guest and host\n");
19567 }
19568 stream->read((uint32_t*)pExecutableCount, sizeof(uint32_t));
19569 }
19570 // WARNING PTR CHECK
19571 VkPipelineExecutablePropertiesKHR* check_pProperties;
19572 check_pProperties = (VkPipelineExecutablePropertiesKHR*)(uintptr_t)stream->getBe64();
19573 if (pProperties) {
19574 if (!(check_pProperties)) {
19575 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
19576 }
19577 if (pExecutableCount) {
19578 for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
19579 unmarshal_VkPipelineExecutablePropertiesKHR(
19580 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19581 (VkPipelineExecutablePropertiesKHR*)(pProperties + i));
19582 }
19583 }
19584 }
19585 if (pExecutableCount) {
19586 if (pProperties) {
19587 for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
19588 transform_fromhost_VkPipelineExecutablePropertiesKHR(
19589 sResourceTracker, (VkPipelineExecutablePropertiesKHR*)(pProperties + i));
19590 }
19591 }
19592 }
19593 VkResult vkGetPipelineExecutablePropertiesKHR_VkResult_return = (VkResult)0;
19594 stream->read(&vkGetPipelineExecutablePropertiesKHR_VkResult_return, sizeof(VkResult));
19595 ++encodeCount;
19596 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19597 pool->freeAll();
19598 stream->clearPool();
19599 }
19600 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19601 return vkGetPipelineExecutablePropertiesKHR_VkResult_return;
19602 }
19603
vkGetPipelineExecutableStatisticsKHR(VkDevice device,const VkPipelineExecutableInfoKHR * pExecutableInfo,uint32_t * pStatisticCount,VkPipelineExecutableStatisticKHR * pStatistics,uint32_t doLock)19604 VkResult VkEncoder::vkGetPipelineExecutableStatisticsKHR(
19605 VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pStatisticCount,
19606 VkPipelineExecutableStatisticKHR* pStatistics, uint32_t doLock) {
19607 (void)doLock;
19608 bool queueSubmitWithCommandsEnabled =
19609 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19610 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19611 auto stream = mImpl->stream();
19612 auto pool = mImpl->pool();
19613 VkDevice local_device;
19614 VkPipelineExecutableInfoKHR* local_pExecutableInfo;
19615 local_device = device;
19616 local_pExecutableInfo = nullptr;
19617 if (pExecutableInfo) {
19618 local_pExecutableInfo =
19619 (VkPipelineExecutableInfoKHR*)pool->alloc(sizeof(const VkPipelineExecutableInfoKHR));
19620 deepcopy_VkPipelineExecutableInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExecutableInfo,
19621 (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
19622 }
19623 if (local_pExecutableInfo) {
19624 transform_tohost_VkPipelineExecutableInfoKHR(
19625 sResourceTracker, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
19626 }
19627 size_t count = 0;
19628 size_t* countPtr = &count;
19629 {
19630 uint64_t cgen_var_0;
19631 *countPtr += 1 * 8;
19632 count_VkPipelineExecutableInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19633 (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo),
19634 countPtr);
19635 // WARNING PTR CHECK
19636 *countPtr += 8;
19637 if (pStatisticCount) {
19638 *countPtr += sizeof(uint32_t);
19639 }
19640 // WARNING PTR CHECK
19641 *countPtr += 8;
19642 if (pStatistics) {
19643 if (pStatisticCount) {
19644 for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
19645 count_VkPipelineExecutableStatisticKHR(
19646 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19647 (VkPipelineExecutableStatisticKHR*)(pStatistics + i), countPtr);
19648 }
19649 }
19650 }
19651 }
19652 uint32_t packetSize_vkGetPipelineExecutableStatisticsKHR =
19653 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19654 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPipelineExecutableStatisticsKHR);
19655 uint8_t* packetBeginPtr = streamPtr;
19656 uint8_t** streamPtrPtr = &streamPtr;
19657 uint32_t opcode_vkGetPipelineExecutableStatisticsKHR = OP_vkGetPipelineExecutableStatisticsKHR;
19658 uint32_t seqno;
19659 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19660 memcpy(streamPtr, &opcode_vkGetPipelineExecutableStatisticsKHR, sizeof(uint32_t));
19661 streamPtr += sizeof(uint32_t);
19662 memcpy(streamPtr, &packetSize_vkGetPipelineExecutableStatisticsKHR, sizeof(uint32_t));
19663 streamPtr += sizeof(uint32_t);
19664 if (queueSubmitWithCommandsEnabled) {
19665 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19666 streamPtr += sizeof(uint32_t);
19667 }
19668 uint64_t cgen_var_0;
19669 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19670 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19671 *streamPtrPtr += 1 * 8;
19672 reservedmarshal_VkPipelineExecutableInfoKHR(
19673 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo),
19674 streamPtrPtr);
19675 // WARNING PTR CHECK
19676 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pStatisticCount;
19677 memcpy((*streamPtrPtr), &cgen_var_1, 8);
19678 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
19679 *streamPtrPtr += 8;
19680 if (pStatisticCount) {
19681 memcpy(*streamPtrPtr, (uint32_t*)pStatisticCount, sizeof(uint32_t));
19682 *streamPtrPtr += sizeof(uint32_t);
19683 }
19684 // WARNING PTR CHECK
19685 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pStatistics;
19686 memcpy((*streamPtrPtr), &cgen_var_2, 8);
19687 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
19688 *streamPtrPtr += 8;
19689 if (pStatistics) {
19690 for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
19691 reservedmarshal_VkPipelineExecutableStatisticKHR(
19692 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19693 (VkPipelineExecutableStatisticKHR*)(pStatistics + i), streamPtrPtr);
19694 }
19695 }
19696 // WARNING PTR CHECK
19697 uint32_t* check_pStatisticCount;
19698 check_pStatisticCount = (uint32_t*)(uintptr_t)stream->getBe64();
19699 if (pStatisticCount) {
19700 if (!(check_pStatisticCount)) {
19701 fprintf(stderr, "fatal: pStatisticCount inconsistent between guest and host\n");
19702 }
19703 stream->read((uint32_t*)pStatisticCount, sizeof(uint32_t));
19704 }
19705 // WARNING PTR CHECK
19706 VkPipelineExecutableStatisticKHR* check_pStatistics;
19707 check_pStatistics = (VkPipelineExecutableStatisticKHR*)(uintptr_t)stream->getBe64();
19708 if (pStatistics) {
19709 if (!(check_pStatistics)) {
19710 fprintf(stderr, "fatal: pStatistics inconsistent between guest and host\n");
19711 }
19712 if (pStatisticCount) {
19713 for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
19714 unmarshal_VkPipelineExecutableStatisticKHR(
19715 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19716 (VkPipelineExecutableStatisticKHR*)(pStatistics + i));
19717 }
19718 }
19719 }
19720 if (pStatisticCount) {
19721 if (pStatistics) {
19722 for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
19723 transform_fromhost_VkPipelineExecutableStatisticKHR(
19724 sResourceTracker, (VkPipelineExecutableStatisticKHR*)(pStatistics + i));
19725 }
19726 }
19727 }
19728 VkResult vkGetPipelineExecutableStatisticsKHR_VkResult_return = (VkResult)0;
19729 stream->read(&vkGetPipelineExecutableStatisticsKHR_VkResult_return, sizeof(VkResult));
19730 ++encodeCount;
19731 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19732 pool->freeAll();
19733 stream->clearPool();
19734 }
19735 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19736 return vkGetPipelineExecutableStatisticsKHR_VkResult_return;
19737 }
19738
vkGetPipelineExecutableInternalRepresentationsKHR(VkDevice device,const VkPipelineExecutableInfoKHR * pExecutableInfo,uint32_t * pInternalRepresentationCount,VkPipelineExecutableInternalRepresentationKHR * pInternalRepresentations,uint32_t doLock)19739 VkResult VkEncoder::vkGetPipelineExecutableInternalRepresentationsKHR(
19740 VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo,
19741 uint32_t* pInternalRepresentationCount,
19742 VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations, uint32_t doLock) {
19743 (void)doLock;
19744 bool queueSubmitWithCommandsEnabled =
19745 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19746 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19747 auto stream = mImpl->stream();
19748 auto pool = mImpl->pool();
19749 VkDevice local_device;
19750 VkPipelineExecutableInfoKHR* local_pExecutableInfo;
19751 local_device = device;
19752 local_pExecutableInfo = nullptr;
19753 if (pExecutableInfo) {
19754 local_pExecutableInfo =
19755 (VkPipelineExecutableInfoKHR*)pool->alloc(sizeof(const VkPipelineExecutableInfoKHR));
19756 deepcopy_VkPipelineExecutableInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExecutableInfo,
19757 (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
19758 }
19759 if (local_pExecutableInfo) {
19760 transform_tohost_VkPipelineExecutableInfoKHR(
19761 sResourceTracker, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
19762 }
19763 size_t count = 0;
19764 size_t* countPtr = &count;
19765 {
19766 uint64_t cgen_var_0;
19767 *countPtr += 1 * 8;
19768 count_VkPipelineExecutableInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19769 (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo),
19770 countPtr);
19771 // WARNING PTR CHECK
19772 *countPtr += 8;
19773 if (pInternalRepresentationCount) {
19774 *countPtr += sizeof(uint32_t);
19775 }
19776 // WARNING PTR CHECK
19777 *countPtr += 8;
19778 if (pInternalRepresentations) {
19779 if (pInternalRepresentationCount) {
19780 for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
19781 count_VkPipelineExecutableInternalRepresentationKHR(
19782 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19783 (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations +
19784 i),
19785 countPtr);
19786 }
19787 }
19788 }
19789 }
19790 uint32_t packetSize_vkGetPipelineExecutableInternalRepresentationsKHR =
19791 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19792 uint8_t* streamPtr =
19793 stream->reserve(packetSize_vkGetPipelineExecutableInternalRepresentationsKHR);
19794 uint8_t* packetBeginPtr = streamPtr;
19795 uint8_t** streamPtrPtr = &streamPtr;
19796 uint32_t opcode_vkGetPipelineExecutableInternalRepresentationsKHR =
19797 OP_vkGetPipelineExecutableInternalRepresentationsKHR;
19798 uint32_t seqno;
19799 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19800 memcpy(streamPtr, &opcode_vkGetPipelineExecutableInternalRepresentationsKHR, sizeof(uint32_t));
19801 streamPtr += sizeof(uint32_t);
19802 memcpy(streamPtr, &packetSize_vkGetPipelineExecutableInternalRepresentationsKHR,
19803 sizeof(uint32_t));
19804 streamPtr += sizeof(uint32_t);
19805 if (queueSubmitWithCommandsEnabled) {
19806 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19807 streamPtr += sizeof(uint32_t);
19808 }
19809 uint64_t cgen_var_0;
19810 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19811 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19812 *streamPtrPtr += 1 * 8;
19813 reservedmarshal_VkPipelineExecutableInfoKHR(
19814 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo),
19815 streamPtrPtr);
19816 // WARNING PTR CHECK
19817 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pInternalRepresentationCount;
19818 memcpy((*streamPtrPtr), &cgen_var_1, 8);
19819 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
19820 *streamPtrPtr += 8;
19821 if (pInternalRepresentationCount) {
19822 memcpy(*streamPtrPtr, (uint32_t*)pInternalRepresentationCount, sizeof(uint32_t));
19823 *streamPtrPtr += sizeof(uint32_t);
19824 }
19825 // WARNING PTR CHECK
19826 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pInternalRepresentations;
19827 memcpy((*streamPtrPtr), &cgen_var_2, 8);
19828 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
19829 *streamPtrPtr += 8;
19830 if (pInternalRepresentations) {
19831 for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
19832 reservedmarshal_VkPipelineExecutableInternalRepresentationKHR(
19833 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19834 (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i),
19835 streamPtrPtr);
19836 }
19837 }
19838 // WARNING PTR CHECK
19839 uint32_t* check_pInternalRepresentationCount;
19840 check_pInternalRepresentationCount = (uint32_t*)(uintptr_t)stream->getBe64();
19841 if (pInternalRepresentationCount) {
19842 if (!(check_pInternalRepresentationCount)) {
19843 fprintf(stderr,
19844 "fatal: pInternalRepresentationCount inconsistent between guest and host\n");
19845 }
19846 stream->read((uint32_t*)pInternalRepresentationCount, sizeof(uint32_t));
19847 }
19848 // WARNING PTR CHECK
19849 VkPipelineExecutableInternalRepresentationKHR* check_pInternalRepresentations;
19850 check_pInternalRepresentations =
19851 (VkPipelineExecutableInternalRepresentationKHR*)(uintptr_t)stream->getBe64();
19852 if (pInternalRepresentations) {
19853 if (!(check_pInternalRepresentations)) {
19854 fprintf(stderr,
19855 "fatal: pInternalRepresentations inconsistent between guest and host\n");
19856 }
19857 if (pInternalRepresentationCount) {
19858 for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
19859 unmarshal_VkPipelineExecutableInternalRepresentationKHR(
19860 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19861 (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i));
19862 }
19863 }
19864 }
19865 if (pInternalRepresentationCount) {
19866 if (pInternalRepresentations) {
19867 for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
19868 transform_fromhost_VkPipelineExecutableInternalRepresentationKHR(
19869 sResourceTracker,
19870 (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i));
19871 }
19872 }
19873 }
19874 VkResult vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return = (VkResult)0;
19875 stream->read(&vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return,
19876 sizeof(VkResult));
19877 ++encodeCount;
19878 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19879 pool->freeAll();
19880 stream->clearPool();
19881 }
19882 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19883 return vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return;
19884 }
19885
19886 #endif
19887 #ifdef VK_KHR_synchronization2
vkCmdSetEvent2KHR(VkCommandBuffer commandBuffer,VkEvent event,const VkDependencyInfo * pDependencyInfo,uint32_t doLock)19888 void VkEncoder::vkCmdSetEvent2KHR(VkCommandBuffer commandBuffer, VkEvent event,
19889 const VkDependencyInfo* pDependencyInfo, uint32_t doLock) {
19890 (void)doLock;
19891 bool queueSubmitWithCommandsEnabled =
19892 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19893 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19894 auto stream = mImpl->stream();
19895 auto pool = mImpl->pool();
19896 VkCommandBuffer local_commandBuffer;
19897 VkEvent local_event;
19898 VkDependencyInfo* local_pDependencyInfo;
19899 local_commandBuffer = commandBuffer;
19900 local_event = event;
19901 local_pDependencyInfo = nullptr;
19902 if (pDependencyInfo) {
19903 local_pDependencyInfo = (VkDependencyInfo*)pool->alloc(sizeof(const VkDependencyInfo));
19904 deepcopy_VkDependencyInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDependencyInfo,
19905 (VkDependencyInfo*)(local_pDependencyInfo));
19906 }
19907 if (local_pDependencyInfo) {
19908 transform_tohost_VkDependencyInfo(sResourceTracker,
19909 (VkDependencyInfo*)(local_pDependencyInfo));
19910 }
19911 size_t count = 0;
19912 size_t* countPtr = &count;
19913 {
19914 uint64_t cgen_var_0;
19915 *countPtr += 1 * 8;
19916 uint64_t cgen_var_1;
19917 *countPtr += 1 * 8;
19918 count_VkDependencyInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19919 (VkDependencyInfo*)(local_pDependencyInfo), countPtr);
19920 }
19921 uint32_t packetSize_vkCmdSetEvent2KHR = 4 + 4 + count;
19922 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetEvent2KHR -= 8;
19923 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetEvent2KHR);
19924 uint8_t* packetBeginPtr = streamPtr;
19925 uint8_t** streamPtrPtr = &streamPtr;
19926 uint32_t opcode_vkCmdSetEvent2KHR = OP_vkCmdSetEvent2KHR;
19927 memcpy(streamPtr, &opcode_vkCmdSetEvent2KHR, sizeof(uint32_t));
19928 streamPtr += sizeof(uint32_t);
19929 memcpy(streamPtr, &packetSize_vkCmdSetEvent2KHR, sizeof(uint32_t));
19930 streamPtr += sizeof(uint32_t);
19931 if (!queueSubmitWithCommandsEnabled) {
19932 uint64_t cgen_var_0;
19933 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
19934 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19935 *streamPtrPtr += 1 * 8;
19936 }
19937 uint64_t cgen_var_0;
19938 *&cgen_var_0 = get_host_u64_VkEvent((*&local_event));
19939 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19940 *streamPtrPtr += 1 * 8;
19941 reservedmarshal_VkDependencyInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19942 (VkDependencyInfo*)(local_pDependencyInfo), streamPtrPtr);
19943 ++encodeCount;
19944 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19945 pool->freeAll();
19946 stream->clearPool();
19947 }
19948 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19949 }
19950
vkCmdResetEvent2KHR(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags2 stageMask,uint32_t doLock)19951 void VkEncoder::vkCmdResetEvent2KHR(VkCommandBuffer commandBuffer, VkEvent event,
19952 VkPipelineStageFlags2 stageMask, uint32_t doLock) {
19953 (void)doLock;
19954 bool queueSubmitWithCommandsEnabled =
19955 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19956 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19957 auto stream = mImpl->stream();
19958 auto pool = mImpl->pool();
19959 VkCommandBuffer local_commandBuffer;
19960 VkEvent local_event;
19961 VkPipelineStageFlags2 local_stageMask;
19962 local_commandBuffer = commandBuffer;
19963 local_event = event;
19964 local_stageMask = stageMask;
19965 size_t count = 0;
19966 size_t* countPtr = &count;
19967 {
19968 uint64_t cgen_var_0;
19969 *countPtr += 1 * 8;
19970 uint64_t cgen_var_1;
19971 *countPtr += 1 * 8;
19972 *countPtr += sizeof(VkPipelineStageFlags2);
19973 }
19974 uint32_t packetSize_vkCmdResetEvent2KHR = 4 + 4 + count;
19975 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdResetEvent2KHR -= 8;
19976 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdResetEvent2KHR);
19977 uint8_t* packetBeginPtr = streamPtr;
19978 uint8_t** streamPtrPtr = &streamPtr;
19979 uint32_t opcode_vkCmdResetEvent2KHR = OP_vkCmdResetEvent2KHR;
19980 memcpy(streamPtr, &opcode_vkCmdResetEvent2KHR, sizeof(uint32_t));
19981 streamPtr += sizeof(uint32_t);
19982 memcpy(streamPtr, &packetSize_vkCmdResetEvent2KHR, sizeof(uint32_t));
19983 streamPtr += sizeof(uint32_t);
19984 if (!queueSubmitWithCommandsEnabled) {
19985 uint64_t cgen_var_0;
19986 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
19987 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19988 *streamPtrPtr += 1 * 8;
19989 }
19990 uint64_t cgen_var_0;
19991 *&cgen_var_0 = get_host_u64_VkEvent((*&local_event));
19992 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19993 *streamPtrPtr += 1 * 8;
19994 memcpy(*streamPtrPtr, (VkPipelineStageFlags2*)&local_stageMask, sizeof(VkPipelineStageFlags2));
19995 *streamPtrPtr += sizeof(VkPipelineStageFlags2);
19996 ++encodeCount;
19997 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19998 pool->freeAll();
19999 stream->clearPool();
20000 }
20001 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20002 }
20003
vkCmdWaitEvents2KHR(VkCommandBuffer commandBuffer,uint32_t eventCount,const VkEvent * pEvents,const VkDependencyInfo * pDependencyInfos,uint32_t doLock)20004 void VkEncoder::vkCmdWaitEvents2KHR(VkCommandBuffer commandBuffer, uint32_t eventCount,
20005 const VkEvent* pEvents,
20006 const VkDependencyInfo* pDependencyInfos, uint32_t doLock) {
20007 (void)doLock;
20008 bool queueSubmitWithCommandsEnabled =
20009 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20010 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20011 auto stream = mImpl->stream();
20012 auto pool = mImpl->pool();
20013 VkCommandBuffer local_commandBuffer;
20014 uint32_t local_eventCount;
20015 VkEvent* local_pEvents;
20016 VkDependencyInfo* local_pDependencyInfos;
20017 local_commandBuffer = commandBuffer;
20018 local_eventCount = eventCount;
20019 // Avoiding deepcopy for pEvents
20020 local_pEvents = (VkEvent*)pEvents;
20021 local_pDependencyInfos = nullptr;
20022 if (pDependencyInfos) {
20023 local_pDependencyInfos =
20024 (VkDependencyInfo*)pool->alloc(((eventCount)) * sizeof(const VkDependencyInfo));
20025 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
20026 deepcopy_VkDependencyInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDependencyInfos + i,
20027 (VkDependencyInfo*)(local_pDependencyInfos + i));
20028 }
20029 }
20030 if (local_pDependencyInfos) {
20031 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
20032 transform_tohost_VkDependencyInfo(sResourceTracker,
20033 (VkDependencyInfo*)(local_pDependencyInfos + i));
20034 }
20035 }
20036 size_t count = 0;
20037 size_t* countPtr = &count;
20038 {
20039 uint64_t cgen_var_0;
20040 *countPtr += 1 * 8;
20041 *countPtr += sizeof(uint32_t);
20042 if (((eventCount))) {
20043 *countPtr += ((eventCount)) * 8;
20044 }
20045 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
20046 count_VkDependencyInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20047 (VkDependencyInfo*)(local_pDependencyInfos + i), countPtr);
20048 }
20049 }
20050 uint32_t packetSize_vkCmdWaitEvents2KHR = 4 + 4 + count;
20051 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdWaitEvents2KHR -= 8;
20052 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdWaitEvents2KHR);
20053 uint8_t* packetBeginPtr = streamPtr;
20054 uint8_t** streamPtrPtr = &streamPtr;
20055 uint32_t opcode_vkCmdWaitEvents2KHR = OP_vkCmdWaitEvents2KHR;
20056 memcpy(streamPtr, &opcode_vkCmdWaitEvents2KHR, sizeof(uint32_t));
20057 streamPtr += sizeof(uint32_t);
20058 memcpy(streamPtr, &packetSize_vkCmdWaitEvents2KHR, sizeof(uint32_t));
20059 streamPtr += sizeof(uint32_t);
20060 if (!queueSubmitWithCommandsEnabled) {
20061 uint64_t cgen_var_0;
20062 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
20063 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20064 *streamPtrPtr += 1 * 8;
20065 }
20066 memcpy(*streamPtrPtr, (uint32_t*)&local_eventCount, sizeof(uint32_t));
20067 *streamPtrPtr += sizeof(uint32_t);
20068 if (((eventCount))) {
20069 uint8_t* cgen_var_0_ptr = (uint8_t*)(*streamPtrPtr);
20070 for (uint32_t k = 0; k < ((eventCount)); ++k) {
20071 uint64_t tmpval = get_host_u64_VkEvent(local_pEvents[k]);
20072 memcpy(cgen_var_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
20073 }
20074 *streamPtrPtr += 8 * ((eventCount));
20075 }
20076 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
20077 reservedmarshal_VkDependencyInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20078 (VkDependencyInfo*)(local_pDependencyInfos + i),
20079 streamPtrPtr);
20080 }
20081 ++encodeCount;
20082 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20083 pool->freeAll();
20084 stream->clearPool();
20085 }
20086 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20087 }
20088
vkCmdPipelineBarrier2KHR(VkCommandBuffer commandBuffer,const VkDependencyInfo * pDependencyInfo,uint32_t doLock)20089 void VkEncoder::vkCmdPipelineBarrier2KHR(VkCommandBuffer commandBuffer,
20090 const VkDependencyInfo* pDependencyInfo, uint32_t doLock) {
20091 (void)doLock;
20092 bool queueSubmitWithCommandsEnabled =
20093 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20094 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20095 auto stream = mImpl->stream();
20096 auto pool = mImpl->pool();
20097 VkCommandBuffer local_commandBuffer;
20098 VkDependencyInfo* local_pDependencyInfo;
20099 local_commandBuffer = commandBuffer;
20100 local_pDependencyInfo = nullptr;
20101 if (pDependencyInfo) {
20102 local_pDependencyInfo = (VkDependencyInfo*)pool->alloc(sizeof(const VkDependencyInfo));
20103 deepcopy_VkDependencyInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDependencyInfo,
20104 (VkDependencyInfo*)(local_pDependencyInfo));
20105 }
20106 if (local_pDependencyInfo) {
20107 transform_tohost_VkDependencyInfo(sResourceTracker,
20108 (VkDependencyInfo*)(local_pDependencyInfo));
20109 }
20110 size_t count = 0;
20111 size_t* countPtr = &count;
20112 {
20113 uint64_t cgen_var_0;
20114 *countPtr += 1 * 8;
20115 count_VkDependencyInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20116 (VkDependencyInfo*)(local_pDependencyInfo), countPtr);
20117 }
20118 uint32_t packetSize_vkCmdPipelineBarrier2KHR = 4 + 4 + count;
20119 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdPipelineBarrier2KHR -= 8;
20120 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdPipelineBarrier2KHR);
20121 uint8_t* packetBeginPtr = streamPtr;
20122 uint8_t** streamPtrPtr = &streamPtr;
20123 uint32_t opcode_vkCmdPipelineBarrier2KHR = OP_vkCmdPipelineBarrier2KHR;
20124 memcpy(streamPtr, &opcode_vkCmdPipelineBarrier2KHR, sizeof(uint32_t));
20125 streamPtr += sizeof(uint32_t);
20126 memcpy(streamPtr, &packetSize_vkCmdPipelineBarrier2KHR, sizeof(uint32_t));
20127 streamPtr += sizeof(uint32_t);
20128 if (!queueSubmitWithCommandsEnabled) {
20129 uint64_t cgen_var_0;
20130 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
20131 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20132 *streamPtrPtr += 1 * 8;
20133 }
20134 reservedmarshal_VkDependencyInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20135 (VkDependencyInfo*)(local_pDependencyInfo), streamPtrPtr);
20136 ++encodeCount;
20137 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20138 pool->freeAll();
20139 stream->clearPool();
20140 }
20141 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20142 }
20143
vkCmdWriteTimestamp2KHR(VkCommandBuffer commandBuffer,VkPipelineStageFlags2 stage,VkQueryPool queryPool,uint32_t query,uint32_t doLock)20144 void VkEncoder::vkCmdWriteTimestamp2KHR(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage,
20145 VkQueryPool queryPool, uint32_t query, uint32_t doLock) {
20146 (void)doLock;
20147 bool queueSubmitWithCommandsEnabled =
20148 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20149 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20150 auto stream = mImpl->stream();
20151 auto pool = mImpl->pool();
20152 VkCommandBuffer local_commandBuffer;
20153 VkPipelineStageFlags2 local_stage;
20154 VkQueryPool local_queryPool;
20155 uint32_t local_query;
20156 local_commandBuffer = commandBuffer;
20157 local_stage = stage;
20158 local_queryPool = queryPool;
20159 local_query = query;
20160 size_t count = 0;
20161 size_t* countPtr = &count;
20162 {
20163 uint64_t cgen_var_0;
20164 *countPtr += 1 * 8;
20165 *countPtr += sizeof(VkPipelineStageFlags2);
20166 uint64_t cgen_var_1;
20167 *countPtr += 1 * 8;
20168 *countPtr += sizeof(uint32_t);
20169 }
20170 uint32_t packetSize_vkCmdWriteTimestamp2KHR = 4 + 4 + count;
20171 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdWriteTimestamp2KHR -= 8;
20172 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdWriteTimestamp2KHR);
20173 uint8_t* packetBeginPtr = streamPtr;
20174 uint8_t** streamPtrPtr = &streamPtr;
20175 uint32_t opcode_vkCmdWriteTimestamp2KHR = OP_vkCmdWriteTimestamp2KHR;
20176 memcpy(streamPtr, &opcode_vkCmdWriteTimestamp2KHR, sizeof(uint32_t));
20177 streamPtr += sizeof(uint32_t);
20178 memcpy(streamPtr, &packetSize_vkCmdWriteTimestamp2KHR, sizeof(uint32_t));
20179 streamPtr += sizeof(uint32_t);
20180 if (!queueSubmitWithCommandsEnabled) {
20181 uint64_t cgen_var_0;
20182 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
20183 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20184 *streamPtrPtr += 1 * 8;
20185 }
20186 memcpy(*streamPtrPtr, (VkPipelineStageFlags2*)&local_stage, sizeof(VkPipelineStageFlags2));
20187 *streamPtrPtr += sizeof(VkPipelineStageFlags2);
20188 uint64_t cgen_var_0;
20189 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
20190 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20191 *streamPtrPtr += 1 * 8;
20192 memcpy(*streamPtrPtr, (uint32_t*)&local_query, sizeof(uint32_t));
20193 *streamPtrPtr += sizeof(uint32_t);
20194 ++encodeCount;
20195 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20196 pool->freeAll();
20197 stream->clearPool();
20198 }
20199 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20200 }
20201
vkQueueSubmit2KHR(VkQueue queue,uint32_t submitCount,const VkSubmitInfo2 * pSubmits,VkFence fence,uint32_t doLock)20202 VkResult VkEncoder::vkQueueSubmit2KHR(VkQueue queue, uint32_t submitCount,
20203 const VkSubmitInfo2* pSubmits, VkFence fence,
20204 uint32_t doLock) {
20205 (void)doLock;
20206 bool queueSubmitWithCommandsEnabled =
20207 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20208 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20209 auto stream = mImpl->stream();
20210 auto pool = mImpl->pool();
20211 VkQueue local_queue;
20212 uint32_t local_submitCount;
20213 VkSubmitInfo2* local_pSubmits;
20214 VkFence local_fence;
20215 local_queue = queue;
20216 local_submitCount = submitCount;
20217 local_pSubmits = nullptr;
20218 if (pSubmits) {
20219 local_pSubmits = (VkSubmitInfo2*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo2));
20220 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
20221 deepcopy_VkSubmitInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubmits + i,
20222 (VkSubmitInfo2*)(local_pSubmits + i));
20223 }
20224 }
20225 local_fence = fence;
20226 if (local_pSubmits) {
20227 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
20228 transform_tohost_VkSubmitInfo2(sResourceTracker, (VkSubmitInfo2*)(local_pSubmits + i));
20229 }
20230 }
20231 size_t count = 0;
20232 size_t* countPtr = &count;
20233 {
20234 uint64_t cgen_var_0;
20235 *countPtr += 1 * 8;
20236 *countPtr += sizeof(uint32_t);
20237 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
20238 count_VkSubmitInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20239 (VkSubmitInfo2*)(local_pSubmits + i), countPtr);
20240 }
20241 uint64_t cgen_var_1;
20242 *countPtr += 1 * 8;
20243 }
20244 uint32_t packetSize_vkQueueSubmit2KHR =
20245 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20246 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSubmit2KHR);
20247 uint8_t* packetBeginPtr = streamPtr;
20248 uint8_t** streamPtrPtr = &streamPtr;
20249 uint32_t opcode_vkQueueSubmit2KHR = OP_vkQueueSubmit2KHR;
20250 uint32_t seqno;
20251 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20252 memcpy(streamPtr, &opcode_vkQueueSubmit2KHR, sizeof(uint32_t));
20253 streamPtr += sizeof(uint32_t);
20254 memcpy(streamPtr, &packetSize_vkQueueSubmit2KHR, sizeof(uint32_t));
20255 streamPtr += sizeof(uint32_t);
20256 if (queueSubmitWithCommandsEnabled) {
20257 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20258 streamPtr += sizeof(uint32_t);
20259 }
20260 uint64_t cgen_var_0;
20261 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
20262 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20263 *streamPtrPtr += 1 * 8;
20264 memcpy(*streamPtrPtr, (uint32_t*)&local_submitCount, sizeof(uint32_t));
20265 *streamPtrPtr += sizeof(uint32_t);
20266 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
20267 reservedmarshal_VkSubmitInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20268 (VkSubmitInfo2*)(local_pSubmits + i), streamPtrPtr);
20269 }
20270 uint64_t cgen_var_1;
20271 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
20272 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
20273 *streamPtrPtr += 1 * 8;
20274 VkResult vkQueueSubmit2KHR_VkResult_return = (VkResult)0;
20275 stream->read(&vkQueueSubmit2KHR_VkResult_return, sizeof(VkResult));
20276 ++encodeCount;
20277 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20278 pool->freeAll();
20279 stream->clearPool();
20280 }
20281 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20282 return vkQueueSubmit2KHR_VkResult_return;
20283 }
20284
vkCmdWriteBufferMarker2AMD(VkCommandBuffer commandBuffer,VkPipelineStageFlags2 stage,VkBuffer dstBuffer,VkDeviceSize dstOffset,uint32_t marker,uint32_t doLock)20285 void VkEncoder::vkCmdWriteBufferMarker2AMD(VkCommandBuffer commandBuffer,
20286 VkPipelineStageFlags2 stage, VkBuffer dstBuffer,
20287 VkDeviceSize dstOffset, uint32_t marker,
20288 uint32_t doLock) {
20289 (void)doLock;
20290 bool queueSubmitWithCommandsEnabled =
20291 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20292 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20293 auto stream = mImpl->stream();
20294 auto pool = mImpl->pool();
20295 VkCommandBuffer local_commandBuffer;
20296 VkPipelineStageFlags2 local_stage;
20297 VkBuffer local_dstBuffer;
20298 VkDeviceSize local_dstOffset;
20299 uint32_t local_marker;
20300 local_commandBuffer = commandBuffer;
20301 local_stage = stage;
20302 local_dstBuffer = dstBuffer;
20303 local_dstOffset = dstOffset;
20304 local_marker = marker;
20305 size_t count = 0;
20306 size_t* countPtr = &count;
20307 {
20308 uint64_t cgen_var_0;
20309 *countPtr += 1 * 8;
20310 *countPtr += sizeof(VkPipelineStageFlags2);
20311 uint64_t cgen_var_1;
20312 *countPtr += 1 * 8;
20313 *countPtr += sizeof(VkDeviceSize);
20314 *countPtr += sizeof(uint32_t);
20315 }
20316 uint32_t packetSize_vkCmdWriteBufferMarker2AMD = 4 + 4 + count;
20317 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdWriteBufferMarker2AMD -= 8;
20318 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdWriteBufferMarker2AMD);
20319 uint8_t* packetBeginPtr = streamPtr;
20320 uint8_t** streamPtrPtr = &streamPtr;
20321 uint32_t opcode_vkCmdWriteBufferMarker2AMD = OP_vkCmdWriteBufferMarker2AMD;
20322 memcpy(streamPtr, &opcode_vkCmdWriteBufferMarker2AMD, sizeof(uint32_t));
20323 streamPtr += sizeof(uint32_t);
20324 memcpy(streamPtr, &packetSize_vkCmdWriteBufferMarker2AMD, sizeof(uint32_t));
20325 streamPtr += sizeof(uint32_t);
20326 if (!queueSubmitWithCommandsEnabled) {
20327 uint64_t cgen_var_0;
20328 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
20329 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20330 *streamPtrPtr += 1 * 8;
20331 }
20332 memcpy(*streamPtrPtr, (VkPipelineStageFlags2*)&local_stage, sizeof(VkPipelineStageFlags2));
20333 *streamPtrPtr += sizeof(VkPipelineStageFlags2);
20334 uint64_t cgen_var_0;
20335 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_dstBuffer));
20336 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20337 *streamPtrPtr += 1 * 8;
20338 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
20339 *streamPtrPtr += sizeof(VkDeviceSize);
20340 memcpy(*streamPtrPtr, (uint32_t*)&local_marker, sizeof(uint32_t));
20341 *streamPtrPtr += sizeof(uint32_t);
20342 ++encodeCount;
20343 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20344 pool->freeAll();
20345 stream->clearPool();
20346 }
20347 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20348 }
20349
vkGetQueueCheckpointData2NV(VkQueue queue,uint32_t * pCheckpointDataCount,VkCheckpointData2NV * pCheckpointData,uint32_t doLock)20350 void VkEncoder::vkGetQueueCheckpointData2NV(VkQueue queue, uint32_t* pCheckpointDataCount,
20351 VkCheckpointData2NV* pCheckpointData, uint32_t doLock) {
20352 (void)doLock;
20353 bool queueSubmitWithCommandsEnabled =
20354 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20355 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20356 auto stream = mImpl->stream();
20357 auto pool = mImpl->pool();
20358 VkQueue local_queue;
20359 local_queue = queue;
20360 size_t count = 0;
20361 size_t* countPtr = &count;
20362 {
20363 uint64_t cgen_var_0;
20364 *countPtr += 1 * 8;
20365 // WARNING PTR CHECK
20366 *countPtr += 8;
20367 if (pCheckpointDataCount) {
20368 *countPtr += sizeof(uint32_t);
20369 }
20370 // WARNING PTR CHECK
20371 *countPtr += 8;
20372 if (pCheckpointData) {
20373 if (pCheckpointDataCount) {
20374 for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
20375 count_VkCheckpointData2NV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20376 (VkCheckpointData2NV*)(pCheckpointData + i),
20377 countPtr);
20378 }
20379 }
20380 }
20381 }
20382 uint32_t packetSize_vkGetQueueCheckpointData2NV =
20383 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20384 uint8_t* streamPtr = stream->reserve(packetSize_vkGetQueueCheckpointData2NV);
20385 uint8_t* packetBeginPtr = streamPtr;
20386 uint8_t** streamPtrPtr = &streamPtr;
20387 uint32_t opcode_vkGetQueueCheckpointData2NV = OP_vkGetQueueCheckpointData2NV;
20388 uint32_t seqno;
20389 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20390 memcpy(streamPtr, &opcode_vkGetQueueCheckpointData2NV, sizeof(uint32_t));
20391 streamPtr += sizeof(uint32_t);
20392 memcpy(streamPtr, &packetSize_vkGetQueueCheckpointData2NV, sizeof(uint32_t));
20393 streamPtr += sizeof(uint32_t);
20394 if (queueSubmitWithCommandsEnabled) {
20395 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20396 streamPtr += sizeof(uint32_t);
20397 }
20398 uint64_t cgen_var_0;
20399 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
20400 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20401 *streamPtrPtr += 1 * 8;
20402 // WARNING PTR CHECK
20403 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pCheckpointDataCount;
20404 memcpy((*streamPtrPtr), &cgen_var_1, 8);
20405 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
20406 *streamPtrPtr += 8;
20407 if (pCheckpointDataCount) {
20408 memcpy(*streamPtrPtr, (uint32_t*)pCheckpointDataCount, sizeof(uint32_t));
20409 *streamPtrPtr += sizeof(uint32_t);
20410 }
20411 // WARNING PTR CHECK
20412 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pCheckpointData;
20413 memcpy((*streamPtrPtr), &cgen_var_2, 8);
20414 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
20415 *streamPtrPtr += 8;
20416 if (pCheckpointData) {
20417 for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
20418 reservedmarshal_VkCheckpointData2NV(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20419 (VkCheckpointData2NV*)(pCheckpointData + i),
20420 streamPtrPtr);
20421 }
20422 }
20423 // WARNING PTR CHECK
20424 uint32_t* check_pCheckpointDataCount;
20425 check_pCheckpointDataCount = (uint32_t*)(uintptr_t)stream->getBe64();
20426 if (pCheckpointDataCount) {
20427 if (!(check_pCheckpointDataCount)) {
20428 fprintf(stderr, "fatal: pCheckpointDataCount inconsistent between guest and host\n");
20429 }
20430 stream->read((uint32_t*)pCheckpointDataCount, sizeof(uint32_t));
20431 }
20432 // WARNING PTR CHECK
20433 VkCheckpointData2NV* check_pCheckpointData;
20434 check_pCheckpointData = (VkCheckpointData2NV*)(uintptr_t)stream->getBe64();
20435 if (pCheckpointData) {
20436 if (!(check_pCheckpointData)) {
20437 fprintf(stderr, "fatal: pCheckpointData inconsistent between guest and host\n");
20438 }
20439 if (pCheckpointDataCount) {
20440 for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
20441 unmarshal_VkCheckpointData2NV(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20442 (VkCheckpointData2NV*)(pCheckpointData + i));
20443 }
20444 }
20445 }
20446 if (pCheckpointDataCount) {
20447 if (pCheckpointData) {
20448 for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i) {
20449 transform_fromhost_VkCheckpointData2NV(sResourceTracker,
20450 (VkCheckpointData2NV*)(pCheckpointData + i));
20451 }
20452 }
20453 }
20454 ++encodeCount;
20455 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20456 pool->freeAll();
20457 stream->clearPool();
20458 }
20459 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20460 }
20461
20462 #endif
20463 #ifdef VK_KHR_copy_commands2
vkCmdCopyBuffer2KHR(VkCommandBuffer commandBuffer,const VkCopyBufferInfo2 * pCopyBufferInfo,uint32_t doLock)20464 void VkEncoder::vkCmdCopyBuffer2KHR(VkCommandBuffer commandBuffer,
20465 const VkCopyBufferInfo2* pCopyBufferInfo, uint32_t doLock) {
20466 (void)doLock;
20467 bool queueSubmitWithCommandsEnabled =
20468 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20469 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20470 auto stream = mImpl->stream();
20471 auto pool = mImpl->pool();
20472 VkCommandBuffer local_commandBuffer;
20473 VkCopyBufferInfo2* local_pCopyBufferInfo;
20474 local_commandBuffer = commandBuffer;
20475 local_pCopyBufferInfo = nullptr;
20476 if (pCopyBufferInfo) {
20477 local_pCopyBufferInfo = (VkCopyBufferInfo2*)pool->alloc(sizeof(const VkCopyBufferInfo2));
20478 deepcopy_VkCopyBufferInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyBufferInfo,
20479 (VkCopyBufferInfo2*)(local_pCopyBufferInfo));
20480 }
20481 if (local_pCopyBufferInfo) {
20482 transform_tohost_VkCopyBufferInfo2(sResourceTracker,
20483 (VkCopyBufferInfo2*)(local_pCopyBufferInfo));
20484 }
20485 size_t count = 0;
20486 size_t* countPtr = &count;
20487 {
20488 uint64_t cgen_var_0;
20489 *countPtr += 1 * 8;
20490 count_VkCopyBufferInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20491 (VkCopyBufferInfo2*)(local_pCopyBufferInfo), countPtr);
20492 }
20493 uint32_t packetSize_vkCmdCopyBuffer2KHR = 4 + 4 + count;
20494 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyBuffer2KHR -= 8;
20495 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyBuffer2KHR);
20496 uint8_t* packetBeginPtr = streamPtr;
20497 uint8_t** streamPtrPtr = &streamPtr;
20498 uint32_t opcode_vkCmdCopyBuffer2KHR = OP_vkCmdCopyBuffer2KHR;
20499 memcpy(streamPtr, &opcode_vkCmdCopyBuffer2KHR, sizeof(uint32_t));
20500 streamPtr += sizeof(uint32_t);
20501 memcpy(streamPtr, &packetSize_vkCmdCopyBuffer2KHR, sizeof(uint32_t));
20502 streamPtr += sizeof(uint32_t);
20503 if (!queueSubmitWithCommandsEnabled) {
20504 uint64_t cgen_var_0;
20505 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
20506 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20507 *streamPtrPtr += 1 * 8;
20508 }
20509 reservedmarshal_VkCopyBufferInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20510 (VkCopyBufferInfo2*)(local_pCopyBufferInfo), streamPtrPtr);
20511 ++encodeCount;
20512 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20513 pool->freeAll();
20514 stream->clearPool();
20515 }
20516 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20517 }
20518
vkCmdCopyImage2KHR(VkCommandBuffer commandBuffer,const VkCopyImageInfo2 * pCopyImageInfo,uint32_t doLock)20519 void VkEncoder::vkCmdCopyImage2KHR(VkCommandBuffer commandBuffer,
20520 const VkCopyImageInfo2* pCopyImageInfo, uint32_t doLock) {
20521 (void)doLock;
20522 bool queueSubmitWithCommandsEnabled =
20523 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20524 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20525 auto stream = mImpl->stream();
20526 auto pool = mImpl->pool();
20527 VkCommandBuffer local_commandBuffer;
20528 VkCopyImageInfo2* local_pCopyImageInfo;
20529 local_commandBuffer = commandBuffer;
20530 local_pCopyImageInfo = nullptr;
20531 if (pCopyImageInfo) {
20532 local_pCopyImageInfo = (VkCopyImageInfo2*)pool->alloc(sizeof(const VkCopyImageInfo2));
20533 deepcopy_VkCopyImageInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageInfo,
20534 (VkCopyImageInfo2*)(local_pCopyImageInfo));
20535 }
20536 if (local_pCopyImageInfo) {
20537 transform_tohost_VkCopyImageInfo2(sResourceTracker,
20538 (VkCopyImageInfo2*)(local_pCopyImageInfo));
20539 }
20540 size_t count = 0;
20541 size_t* countPtr = &count;
20542 {
20543 uint64_t cgen_var_0;
20544 *countPtr += 1 * 8;
20545 count_VkCopyImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20546 (VkCopyImageInfo2*)(local_pCopyImageInfo), countPtr);
20547 }
20548 uint32_t packetSize_vkCmdCopyImage2KHR = 4 + 4 + count;
20549 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyImage2KHR -= 8;
20550 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyImage2KHR);
20551 uint8_t* packetBeginPtr = streamPtr;
20552 uint8_t** streamPtrPtr = &streamPtr;
20553 uint32_t opcode_vkCmdCopyImage2KHR = OP_vkCmdCopyImage2KHR;
20554 memcpy(streamPtr, &opcode_vkCmdCopyImage2KHR, sizeof(uint32_t));
20555 streamPtr += sizeof(uint32_t);
20556 memcpy(streamPtr, &packetSize_vkCmdCopyImage2KHR, sizeof(uint32_t));
20557 streamPtr += sizeof(uint32_t);
20558 if (!queueSubmitWithCommandsEnabled) {
20559 uint64_t cgen_var_0;
20560 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
20561 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20562 *streamPtrPtr += 1 * 8;
20563 }
20564 reservedmarshal_VkCopyImageInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20565 (VkCopyImageInfo2*)(local_pCopyImageInfo), streamPtrPtr);
20566 ++encodeCount;
20567 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20568 pool->freeAll();
20569 stream->clearPool();
20570 }
20571 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20572 }
20573
vkCmdCopyBufferToImage2KHR(VkCommandBuffer commandBuffer,const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo,uint32_t doLock)20574 void VkEncoder::vkCmdCopyBufferToImage2KHR(VkCommandBuffer commandBuffer,
20575 const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo,
20576 uint32_t doLock) {
20577 (void)doLock;
20578 bool queueSubmitWithCommandsEnabled =
20579 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20580 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20581 auto stream = mImpl->stream();
20582 auto pool = mImpl->pool();
20583 VkCommandBuffer local_commandBuffer;
20584 VkCopyBufferToImageInfo2* local_pCopyBufferToImageInfo;
20585 local_commandBuffer = commandBuffer;
20586 local_pCopyBufferToImageInfo = nullptr;
20587 if (pCopyBufferToImageInfo) {
20588 local_pCopyBufferToImageInfo =
20589 (VkCopyBufferToImageInfo2*)pool->alloc(sizeof(const VkCopyBufferToImageInfo2));
20590 deepcopy_VkCopyBufferToImageInfo2(
20591 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyBufferToImageInfo,
20592 (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo));
20593 }
20594 if (local_pCopyBufferToImageInfo) {
20595 transform_tohost_VkCopyBufferToImageInfo2(
20596 sResourceTracker, (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo));
20597 }
20598 size_t count = 0;
20599 size_t* countPtr = &count;
20600 {
20601 uint64_t cgen_var_0;
20602 *countPtr += 1 * 8;
20603 count_VkCopyBufferToImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20604 (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo),
20605 countPtr);
20606 }
20607 uint32_t packetSize_vkCmdCopyBufferToImage2KHR = 4 + 4 + count;
20608 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyBufferToImage2KHR -= 8;
20609 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyBufferToImage2KHR);
20610 uint8_t* packetBeginPtr = streamPtr;
20611 uint8_t** streamPtrPtr = &streamPtr;
20612 uint32_t opcode_vkCmdCopyBufferToImage2KHR = OP_vkCmdCopyBufferToImage2KHR;
20613 memcpy(streamPtr, &opcode_vkCmdCopyBufferToImage2KHR, sizeof(uint32_t));
20614 streamPtr += sizeof(uint32_t);
20615 memcpy(streamPtr, &packetSize_vkCmdCopyBufferToImage2KHR, sizeof(uint32_t));
20616 streamPtr += sizeof(uint32_t);
20617 if (!queueSubmitWithCommandsEnabled) {
20618 uint64_t cgen_var_0;
20619 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
20620 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20621 *streamPtrPtr += 1 * 8;
20622 }
20623 reservedmarshal_VkCopyBufferToImageInfo2(
20624 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20625 (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo), streamPtrPtr);
20626 ++encodeCount;
20627 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20628 pool->freeAll();
20629 stream->clearPool();
20630 }
20631 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20632 }
20633
vkCmdCopyImageToBuffer2KHR(VkCommandBuffer commandBuffer,const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo,uint32_t doLock)20634 void VkEncoder::vkCmdCopyImageToBuffer2KHR(VkCommandBuffer commandBuffer,
20635 const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo,
20636 uint32_t doLock) {
20637 (void)doLock;
20638 bool queueSubmitWithCommandsEnabled =
20639 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20640 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20641 auto stream = mImpl->stream();
20642 auto pool = mImpl->pool();
20643 VkCommandBuffer local_commandBuffer;
20644 VkCopyImageToBufferInfo2* local_pCopyImageToBufferInfo;
20645 local_commandBuffer = commandBuffer;
20646 local_pCopyImageToBufferInfo = nullptr;
20647 if (pCopyImageToBufferInfo) {
20648 local_pCopyImageToBufferInfo =
20649 (VkCopyImageToBufferInfo2*)pool->alloc(sizeof(const VkCopyImageToBufferInfo2));
20650 deepcopy_VkCopyImageToBufferInfo2(
20651 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageToBufferInfo,
20652 (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo));
20653 }
20654 if (local_pCopyImageToBufferInfo) {
20655 transform_tohost_VkCopyImageToBufferInfo2(
20656 sResourceTracker, (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo));
20657 }
20658 size_t count = 0;
20659 size_t* countPtr = &count;
20660 {
20661 uint64_t cgen_var_0;
20662 *countPtr += 1 * 8;
20663 count_VkCopyImageToBufferInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20664 (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo),
20665 countPtr);
20666 }
20667 uint32_t packetSize_vkCmdCopyImageToBuffer2KHR = 4 + 4 + count;
20668 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyImageToBuffer2KHR -= 8;
20669 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyImageToBuffer2KHR);
20670 uint8_t* packetBeginPtr = streamPtr;
20671 uint8_t** streamPtrPtr = &streamPtr;
20672 uint32_t opcode_vkCmdCopyImageToBuffer2KHR = OP_vkCmdCopyImageToBuffer2KHR;
20673 memcpy(streamPtr, &opcode_vkCmdCopyImageToBuffer2KHR, sizeof(uint32_t));
20674 streamPtr += sizeof(uint32_t);
20675 memcpy(streamPtr, &packetSize_vkCmdCopyImageToBuffer2KHR, sizeof(uint32_t));
20676 streamPtr += sizeof(uint32_t);
20677 if (!queueSubmitWithCommandsEnabled) {
20678 uint64_t cgen_var_0;
20679 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
20680 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20681 *streamPtrPtr += 1 * 8;
20682 }
20683 reservedmarshal_VkCopyImageToBufferInfo2(
20684 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20685 (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo), streamPtrPtr);
20686 ++encodeCount;
20687 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20688 pool->freeAll();
20689 stream->clearPool();
20690 }
20691 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20692 }
20693
vkCmdBlitImage2KHR(VkCommandBuffer commandBuffer,const VkBlitImageInfo2 * pBlitImageInfo,uint32_t doLock)20694 void VkEncoder::vkCmdBlitImage2KHR(VkCommandBuffer commandBuffer,
20695 const VkBlitImageInfo2* pBlitImageInfo, uint32_t doLock) {
20696 (void)doLock;
20697 bool queueSubmitWithCommandsEnabled =
20698 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20699 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20700 auto stream = mImpl->stream();
20701 auto pool = mImpl->pool();
20702 VkCommandBuffer local_commandBuffer;
20703 VkBlitImageInfo2* local_pBlitImageInfo;
20704 local_commandBuffer = commandBuffer;
20705 local_pBlitImageInfo = nullptr;
20706 if (pBlitImageInfo) {
20707 local_pBlitImageInfo = (VkBlitImageInfo2*)pool->alloc(sizeof(const VkBlitImageInfo2));
20708 deepcopy_VkBlitImageInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBlitImageInfo,
20709 (VkBlitImageInfo2*)(local_pBlitImageInfo));
20710 }
20711 if (local_pBlitImageInfo) {
20712 transform_tohost_VkBlitImageInfo2(sResourceTracker,
20713 (VkBlitImageInfo2*)(local_pBlitImageInfo));
20714 }
20715 size_t count = 0;
20716 size_t* countPtr = &count;
20717 {
20718 uint64_t cgen_var_0;
20719 *countPtr += 1 * 8;
20720 count_VkBlitImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20721 (VkBlitImageInfo2*)(local_pBlitImageInfo), countPtr);
20722 }
20723 uint32_t packetSize_vkCmdBlitImage2KHR = 4 + 4 + count;
20724 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBlitImage2KHR -= 8;
20725 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBlitImage2KHR);
20726 uint8_t* packetBeginPtr = streamPtr;
20727 uint8_t** streamPtrPtr = &streamPtr;
20728 uint32_t opcode_vkCmdBlitImage2KHR = OP_vkCmdBlitImage2KHR;
20729 memcpy(streamPtr, &opcode_vkCmdBlitImage2KHR, sizeof(uint32_t));
20730 streamPtr += sizeof(uint32_t);
20731 memcpy(streamPtr, &packetSize_vkCmdBlitImage2KHR, sizeof(uint32_t));
20732 streamPtr += sizeof(uint32_t);
20733 if (!queueSubmitWithCommandsEnabled) {
20734 uint64_t cgen_var_0;
20735 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
20736 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20737 *streamPtrPtr += 1 * 8;
20738 }
20739 reservedmarshal_VkBlitImageInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20740 (VkBlitImageInfo2*)(local_pBlitImageInfo), streamPtrPtr);
20741 ++encodeCount;
20742 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20743 pool->freeAll();
20744 stream->clearPool();
20745 }
20746 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20747 }
20748
vkCmdResolveImage2KHR(VkCommandBuffer commandBuffer,const VkResolveImageInfo2 * pResolveImageInfo,uint32_t doLock)20749 void VkEncoder::vkCmdResolveImage2KHR(VkCommandBuffer commandBuffer,
20750 const VkResolveImageInfo2* pResolveImageInfo,
20751 uint32_t doLock) {
20752 (void)doLock;
20753 bool queueSubmitWithCommandsEnabled =
20754 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20755 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20756 auto stream = mImpl->stream();
20757 auto pool = mImpl->pool();
20758 VkCommandBuffer local_commandBuffer;
20759 VkResolveImageInfo2* local_pResolveImageInfo;
20760 local_commandBuffer = commandBuffer;
20761 local_pResolveImageInfo = nullptr;
20762 if (pResolveImageInfo) {
20763 local_pResolveImageInfo =
20764 (VkResolveImageInfo2*)pool->alloc(sizeof(const VkResolveImageInfo2));
20765 deepcopy_VkResolveImageInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pResolveImageInfo,
20766 (VkResolveImageInfo2*)(local_pResolveImageInfo));
20767 }
20768 if (local_pResolveImageInfo) {
20769 transform_tohost_VkResolveImageInfo2(sResourceTracker,
20770 (VkResolveImageInfo2*)(local_pResolveImageInfo));
20771 }
20772 size_t count = 0;
20773 size_t* countPtr = &count;
20774 {
20775 uint64_t cgen_var_0;
20776 *countPtr += 1 * 8;
20777 count_VkResolveImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20778 (VkResolveImageInfo2*)(local_pResolveImageInfo), countPtr);
20779 }
20780 uint32_t packetSize_vkCmdResolveImage2KHR = 4 + 4 + count;
20781 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdResolveImage2KHR -= 8;
20782 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdResolveImage2KHR);
20783 uint8_t* packetBeginPtr = streamPtr;
20784 uint8_t** streamPtrPtr = &streamPtr;
20785 uint32_t opcode_vkCmdResolveImage2KHR = OP_vkCmdResolveImage2KHR;
20786 memcpy(streamPtr, &opcode_vkCmdResolveImage2KHR, sizeof(uint32_t));
20787 streamPtr += sizeof(uint32_t);
20788 memcpy(streamPtr, &packetSize_vkCmdResolveImage2KHR, sizeof(uint32_t));
20789 streamPtr += sizeof(uint32_t);
20790 if (!queueSubmitWithCommandsEnabled) {
20791 uint64_t cgen_var_0;
20792 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
20793 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20794 *streamPtrPtr += 1 * 8;
20795 }
20796 reservedmarshal_VkResolveImageInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20797 (VkResolveImageInfo2*)(local_pResolveImageInfo),
20798 streamPtrPtr);
20799 ++encodeCount;
20800 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20801 pool->freeAll();
20802 stream->clearPool();
20803 }
20804 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20805 }
20806
20807 #endif
20808 #ifdef VK_KHR_maintenance4
vkGetDeviceBufferMemoryRequirementsKHR(VkDevice device,const VkDeviceBufferMemoryRequirements * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)20809 void VkEncoder::vkGetDeviceBufferMemoryRequirementsKHR(
20810 VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo,
20811 VkMemoryRequirements2* pMemoryRequirements, uint32_t doLock) {
20812 (void)doLock;
20813 bool queueSubmitWithCommandsEnabled =
20814 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20815 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20816 auto stream = mImpl->stream();
20817 auto pool = mImpl->pool();
20818 VkDevice local_device;
20819 VkDeviceBufferMemoryRequirements* local_pInfo;
20820 local_device = device;
20821 local_pInfo = nullptr;
20822 if (pInfo) {
20823 local_pInfo = (VkDeviceBufferMemoryRequirements*)pool->alloc(
20824 sizeof(const VkDeviceBufferMemoryRequirements));
20825 deepcopy_VkDeviceBufferMemoryRequirements(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
20826 (VkDeviceBufferMemoryRequirements*)(local_pInfo));
20827 }
20828 if (local_pInfo) {
20829 transform_tohost_VkDeviceBufferMemoryRequirements(
20830 sResourceTracker, (VkDeviceBufferMemoryRequirements*)(local_pInfo));
20831 }
20832 size_t count = 0;
20833 size_t* countPtr = &count;
20834 {
20835 uint64_t cgen_var_0;
20836 *countPtr += 1 * 8;
20837 count_VkDeviceBufferMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20838 (VkDeviceBufferMemoryRequirements*)(local_pInfo),
20839 countPtr);
20840 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20841 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
20842 }
20843 uint32_t packetSize_vkGetDeviceBufferMemoryRequirementsKHR =
20844 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20845 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceBufferMemoryRequirementsKHR);
20846 uint8_t* packetBeginPtr = streamPtr;
20847 uint8_t** streamPtrPtr = &streamPtr;
20848 uint32_t opcode_vkGetDeviceBufferMemoryRequirementsKHR =
20849 OP_vkGetDeviceBufferMemoryRequirementsKHR;
20850 uint32_t seqno;
20851 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20852 memcpy(streamPtr, &opcode_vkGetDeviceBufferMemoryRequirementsKHR, sizeof(uint32_t));
20853 streamPtr += sizeof(uint32_t);
20854 memcpy(streamPtr, &packetSize_vkGetDeviceBufferMemoryRequirementsKHR, sizeof(uint32_t));
20855 streamPtr += sizeof(uint32_t);
20856 if (queueSubmitWithCommandsEnabled) {
20857 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20858 streamPtr += sizeof(uint32_t);
20859 }
20860 uint64_t cgen_var_0;
20861 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20862 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20863 *streamPtrPtr += 1 * 8;
20864 reservedmarshal_VkDeviceBufferMemoryRequirements(
20865 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceBufferMemoryRequirements*)(local_pInfo),
20866 streamPtrPtr);
20867 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20868 (VkMemoryRequirements2*)(pMemoryRequirements),
20869 streamPtrPtr);
20870 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20871 (VkMemoryRequirements2*)(pMemoryRequirements));
20872 if (pMemoryRequirements) {
20873 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
20874 (VkMemoryRequirements2*)(pMemoryRequirements));
20875 }
20876 ++encodeCount;
20877 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20878 pool->freeAll();
20879 stream->clearPool();
20880 }
20881 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20882 }
20883
vkGetDeviceImageMemoryRequirementsKHR(VkDevice device,const VkDeviceImageMemoryRequirements * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)20884 void VkEncoder::vkGetDeviceImageMemoryRequirementsKHR(VkDevice device,
20885 const VkDeviceImageMemoryRequirements* pInfo,
20886 VkMemoryRequirements2* pMemoryRequirements,
20887 uint32_t doLock) {
20888 (void)doLock;
20889 bool queueSubmitWithCommandsEnabled =
20890 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20891 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20892 auto stream = mImpl->stream();
20893 auto pool = mImpl->pool();
20894 VkDevice local_device;
20895 VkDeviceImageMemoryRequirements* local_pInfo;
20896 local_device = device;
20897 local_pInfo = nullptr;
20898 if (pInfo) {
20899 local_pInfo = (VkDeviceImageMemoryRequirements*)pool->alloc(
20900 sizeof(const VkDeviceImageMemoryRequirements));
20901 deepcopy_VkDeviceImageMemoryRequirements(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
20902 (VkDeviceImageMemoryRequirements*)(local_pInfo));
20903 }
20904 if (local_pInfo) {
20905 transform_tohost_VkDeviceImageMemoryRequirements(
20906 sResourceTracker, (VkDeviceImageMemoryRequirements*)(local_pInfo));
20907 }
20908 size_t count = 0;
20909 size_t* countPtr = &count;
20910 {
20911 uint64_t cgen_var_0;
20912 *countPtr += 1 * 8;
20913 count_VkDeviceImageMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20914 (VkDeviceImageMemoryRequirements*)(local_pInfo),
20915 countPtr);
20916 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20917 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
20918 }
20919 uint32_t packetSize_vkGetDeviceImageMemoryRequirementsKHR =
20920 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20921 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceImageMemoryRequirementsKHR);
20922 uint8_t* packetBeginPtr = streamPtr;
20923 uint8_t** streamPtrPtr = &streamPtr;
20924 uint32_t opcode_vkGetDeviceImageMemoryRequirementsKHR =
20925 OP_vkGetDeviceImageMemoryRequirementsKHR;
20926 uint32_t seqno;
20927 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20928 memcpy(streamPtr, &opcode_vkGetDeviceImageMemoryRequirementsKHR, sizeof(uint32_t));
20929 streamPtr += sizeof(uint32_t);
20930 memcpy(streamPtr, &packetSize_vkGetDeviceImageMemoryRequirementsKHR, sizeof(uint32_t));
20931 streamPtr += sizeof(uint32_t);
20932 if (queueSubmitWithCommandsEnabled) {
20933 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20934 streamPtr += sizeof(uint32_t);
20935 }
20936 uint64_t cgen_var_0;
20937 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20938 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20939 *streamPtrPtr += 1 * 8;
20940 reservedmarshal_VkDeviceImageMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20941 (VkDeviceImageMemoryRequirements*)(local_pInfo),
20942 streamPtrPtr);
20943 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20944 (VkMemoryRequirements2*)(pMemoryRequirements),
20945 streamPtrPtr);
20946 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20947 (VkMemoryRequirements2*)(pMemoryRequirements));
20948 if (pMemoryRequirements) {
20949 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
20950 (VkMemoryRequirements2*)(pMemoryRequirements));
20951 }
20952 ++encodeCount;
20953 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20954 pool->freeAll();
20955 stream->clearPool();
20956 }
20957 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20958 }
20959
vkGetDeviceImageSparseMemoryRequirementsKHR(VkDevice device,const VkDeviceImageMemoryRequirements * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements,uint32_t doLock)20960 void VkEncoder::vkGetDeviceImageSparseMemoryRequirementsKHR(
20961 VkDevice device, const VkDeviceImageMemoryRequirements* pInfo,
20962 uint32_t* pSparseMemoryRequirementCount,
20963 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements, uint32_t doLock) {
20964 (void)doLock;
20965 bool queueSubmitWithCommandsEnabled =
20966 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20967 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20968 auto stream = mImpl->stream();
20969 auto pool = mImpl->pool();
20970 VkDevice local_device;
20971 VkDeviceImageMemoryRequirements* local_pInfo;
20972 local_device = device;
20973 local_pInfo = nullptr;
20974 if (pInfo) {
20975 local_pInfo = (VkDeviceImageMemoryRequirements*)pool->alloc(
20976 sizeof(const VkDeviceImageMemoryRequirements));
20977 deepcopy_VkDeviceImageMemoryRequirements(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
20978 (VkDeviceImageMemoryRequirements*)(local_pInfo));
20979 }
20980 if (local_pInfo) {
20981 transform_tohost_VkDeviceImageMemoryRequirements(
20982 sResourceTracker, (VkDeviceImageMemoryRequirements*)(local_pInfo));
20983 }
20984 size_t count = 0;
20985 size_t* countPtr = &count;
20986 {
20987 uint64_t cgen_var_0;
20988 *countPtr += 1 * 8;
20989 count_VkDeviceImageMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20990 (VkDeviceImageMemoryRequirements*)(local_pInfo),
20991 countPtr);
20992 // WARNING PTR CHECK
20993 *countPtr += 8;
20994 if (pSparseMemoryRequirementCount) {
20995 *countPtr += sizeof(uint32_t);
20996 }
20997 // WARNING PTR CHECK
20998 *countPtr += 8;
20999 if (pSparseMemoryRequirements) {
21000 if (pSparseMemoryRequirementCount) {
21001 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
21002 count_VkSparseImageMemoryRequirements2(
21003 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21004 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i),
21005 countPtr);
21006 }
21007 }
21008 }
21009 }
21010 uint32_t packetSize_vkGetDeviceImageSparseMemoryRequirementsKHR =
21011 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
21012 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceImageSparseMemoryRequirementsKHR);
21013 uint8_t* packetBeginPtr = streamPtr;
21014 uint8_t** streamPtrPtr = &streamPtr;
21015 uint32_t opcode_vkGetDeviceImageSparseMemoryRequirementsKHR =
21016 OP_vkGetDeviceImageSparseMemoryRequirementsKHR;
21017 uint32_t seqno;
21018 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
21019 memcpy(streamPtr, &opcode_vkGetDeviceImageSparseMemoryRequirementsKHR, sizeof(uint32_t));
21020 streamPtr += sizeof(uint32_t);
21021 memcpy(streamPtr, &packetSize_vkGetDeviceImageSparseMemoryRequirementsKHR, sizeof(uint32_t));
21022 streamPtr += sizeof(uint32_t);
21023 if (queueSubmitWithCommandsEnabled) {
21024 memcpy(streamPtr, &seqno, sizeof(uint32_t));
21025 streamPtr += sizeof(uint32_t);
21026 }
21027 uint64_t cgen_var_0;
21028 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
21029 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21030 *streamPtrPtr += 1 * 8;
21031 reservedmarshal_VkDeviceImageMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21032 (VkDeviceImageMemoryRequirements*)(local_pInfo),
21033 streamPtrPtr);
21034 // WARNING PTR CHECK
21035 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
21036 memcpy((*streamPtrPtr), &cgen_var_1, 8);
21037 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
21038 *streamPtrPtr += 8;
21039 if (pSparseMemoryRequirementCount) {
21040 memcpy(*streamPtrPtr, (uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
21041 *streamPtrPtr += sizeof(uint32_t);
21042 }
21043 // WARNING PTR CHECK
21044 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
21045 memcpy((*streamPtrPtr), &cgen_var_2, 8);
21046 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
21047 *streamPtrPtr += 8;
21048 if (pSparseMemoryRequirements) {
21049 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
21050 reservedmarshal_VkSparseImageMemoryRequirements2(
21051 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21052 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), streamPtrPtr);
21053 }
21054 }
21055 // WARNING PTR CHECK
21056 uint32_t* check_pSparseMemoryRequirementCount;
21057 check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
21058 if (pSparseMemoryRequirementCount) {
21059 if (!(check_pSparseMemoryRequirementCount)) {
21060 fprintf(stderr,
21061 "fatal: pSparseMemoryRequirementCount inconsistent between guest and host\n");
21062 }
21063 stream->read((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
21064 }
21065 // WARNING PTR CHECK
21066 VkSparseImageMemoryRequirements2* check_pSparseMemoryRequirements;
21067 check_pSparseMemoryRequirements =
21068 (VkSparseImageMemoryRequirements2*)(uintptr_t)stream->getBe64();
21069 if (pSparseMemoryRequirements) {
21070 if (!(check_pSparseMemoryRequirements)) {
21071 fprintf(stderr,
21072 "fatal: pSparseMemoryRequirements inconsistent between guest and host\n");
21073 }
21074 if (pSparseMemoryRequirementCount) {
21075 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
21076 unmarshal_VkSparseImageMemoryRequirements2(
21077 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21078 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
21079 }
21080 }
21081 }
21082 if (pSparseMemoryRequirementCount) {
21083 if (pSparseMemoryRequirements) {
21084 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
21085 transform_fromhost_VkSparseImageMemoryRequirements2(
21086 sResourceTracker,
21087 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
21088 }
21089 }
21090 }
21091 ++encodeCount;
21092 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21093 pool->freeAll();
21094 stream->clearPool();
21095 }
21096 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21097 }
21098
21099 #endif
21100 #ifdef VK_KHR_maintenance5
vkCmdBindIndexBuffer2KHR(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkDeviceSize size,VkIndexType indexType,uint32_t doLock)21101 void VkEncoder::vkCmdBindIndexBuffer2KHR(VkCommandBuffer commandBuffer, VkBuffer buffer,
21102 VkDeviceSize offset, VkDeviceSize size,
21103 VkIndexType indexType, uint32_t doLock) {
21104 (void)doLock;
21105 bool queueSubmitWithCommandsEnabled =
21106 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21107 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21108 auto stream = mImpl->stream();
21109 auto pool = mImpl->pool();
21110 VkCommandBuffer local_commandBuffer;
21111 VkBuffer local_buffer;
21112 VkDeviceSize local_offset;
21113 VkDeviceSize local_size;
21114 VkIndexType local_indexType;
21115 local_commandBuffer = commandBuffer;
21116 local_buffer = buffer;
21117 local_offset = offset;
21118 local_size = size;
21119 local_indexType = indexType;
21120 size_t count = 0;
21121 size_t* countPtr = &count;
21122 {
21123 uint64_t cgen_var_0;
21124 *countPtr += 1 * 8;
21125 uint64_t cgen_var_1;
21126 *countPtr += 1 * 8;
21127 *countPtr += sizeof(VkDeviceSize);
21128 *countPtr += sizeof(VkDeviceSize);
21129 *countPtr += sizeof(VkIndexType);
21130 }
21131 uint32_t packetSize_vkCmdBindIndexBuffer2KHR = 4 + 4 + count;
21132 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindIndexBuffer2KHR -= 8;
21133 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindIndexBuffer2KHR);
21134 uint8_t* packetBeginPtr = streamPtr;
21135 uint8_t** streamPtrPtr = &streamPtr;
21136 uint32_t opcode_vkCmdBindIndexBuffer2KHR = OP_vkCmdBindIndexBuffer2KHR;
21137 memcpy(streamPtr, &opcode_vkCmdBindIndexBuffer2KHR, sizeof(uint32_t));
21138 streamPtr += sizeof(uint32_t);
21139 memcpy(streamPtr, &packetSize_vkCmdBindIndexBuffer2KHR, sizeof(uint32_t));
21140 streamPtr += sizeof(uint32_t);
21141 if (!queueSubmitWithCommandsEnabled) {
21142 uint64_t cgen_var_0;
21143 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21144 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21145 *streamPtrPtr += 1 * 8;
21146 }
21147 uint64_t cgen_var_0;
21148 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_buffer));
21149 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21150 *streamPtrPtr += 1 * 8;
21151 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
21152 *streamPtrPtr += sizeof(VkDeviceSize);
21153 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_size, sizeof(VkDeviceSize));
21154 *streamPtrPtr += sizeof(VkDeviceSize);
21155 memcpy(*streamPtrPtr, (VkIndexType*)&local_indexType, sizeof(VkIndexType));
21156 *streamPtrPtr += sizeof(VkIndexType);
21157 ++encodeCount;
21158 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21159 pool->freeAll();
21160 stream->clearPool();
21161 }
21162 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21163 }
21164
vkGetRenderingAreaGranularityKHR(VkDevice device,const VkRenderingAreaInfoKHR * pRenderingAreaInfo,VkExtent2D * pGranularity,uint32_t doLock)21165 void VkEncoder::vkGetRenderingAreaGranularityKHR(VkDevice device,
21166 const VkRenderingAreaInfoKHR* pRenderingAreaInfo,
21167 VkExtent2D* pGranularity, uint32_t doLock) {
21168 (void)doLock;
21169 bool queueSubmitWithCommandsEnabled =
21170 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21171 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21172 auto stream = mImpl->stream();
21173 auto pool = mImpl->pool();
21174 VkDevice local_device;
21175 VkRenderingAreaInfoKHR* local_pRenderingAreaInfo;
21176 local_device = device;
21177 local_pRenderingAreaInfo = nullptr;
21178 if (pRenderingAreaInfo) {
21179 local_pRenderingAreaInfo =
21180 (VkRenderingAreaInfoKHR*)pool->alloc(sizeof(const VkRenderingAreaInfoKHR));
21181 deepcopy_VkRenderingAreaInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderingAreaInfo,
21182 (VkRenderingAreaInfoKHR*)(local_pRenderingAreaInfo));
21183 }
21184 if (local_pRenderingAreaInfo) {
21185 transform_tohost_VkRenderingAreaInfoKHR(
21186 sResourceTracker, (VkRenderingAreaInfoKHR*)(local_pRenderingAreaInfo));
21187 }
21188 size_t count = 0;
21189 size_t* countPtr = &count;
21190 {
21191 uint64_t cgen_var_0;
21192 *countPtr += 1 * 8;
21193 count_VkRenderingAreaInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21194 (VkRenderingAreaInfoKHR*)(local_pRenderingAreaInfo), countPtr);
21195 count_VkExtent2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity),
21196 countPtr);
21197 }
21198 uint32_t packetSize_vkGetRenderingAreaGranularityKHR =
21199 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
21200 uint8_t* streamPtr = stream->reserve(packetSize_vkGetRenderingAreaGranularityKHR);
21201 uint8_t* packetBeginPtr = streamPtr;
21202 uint8_t** streamPtrPtr = &streamPtr;
21203 uint32_t opcode_vkGetRenderingAreaGranularityKHR = OP_vkGetRenderingAreaGranularityKHR;
21204 uint32_t seqno;
21205 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
21206 memcpy(streamPtr, &opcode_vkGetRenderingAreaGranularityKHR, sizeof(uint32_t));
21207 streamPtr += sizeof(uint32_t);
21208 memcpy(streamPtr, &packetSize_vkGetRenderingAreaGranularityKHR, sizeof(uint32_t));
21209 streamPtr += sizeof(uint32_t);
21210 if (queueSubmitWithCommandsEnabled) {
21211 memcpy(streamPtr, &seqno, sizeof(uint32_t));
21212 streamPtr += sizeof(uint32_t);
21213 }
21214 uint64_t cgen_var_0;
21215 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
21216 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21217 *streamPtrPtr += 1 * 8;
21218 reservedmarshal_VkRenderingAreaInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21219 (VkRenderingAreaInfoKHR*)(local_pRenderingAreaInfo),
21220 streamPtrPtr);
21221 reservedmarshal_VkExtent2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity),
21222 streamPtrPtr);
21223 unmarshal_VkExtent2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity));
21224 if (pGranularity) {
21225 transform_fromhost_VkExtent2D(sResourceTracker, (VkExtent2D*)(pGranularity));
21226 }
21227 ++encodeCount;
21228 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21229 pool->freeAll();
21230 stream->clearPool();
21231 }
21232 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21233 }
21234
vkGetDeviceImageSubresourceLayoutKHR(VkDevice device,const VkDeviceImageSubresourceInfoKHR * pInfo,VkSubresourceLayout2KHR * pLayout,uint32_t doLock)21235 void VkEncoder::vkGetDeviceImageSubresourceLayoutKHR(VkDevice device,
21236 const VkDeviceImageSubresourceInfoKHR* pInfo,
21237 VkSubresourceLayout2KHR* pLayout,
21238 uint32_t doLock) {
21239 (void)doLock;
21240 bool queueSubmitWithCommandsEnabled =
21241 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21242 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21243 auto stream = mImpl->stream();
21244 auto pool = mImpl->pool();
21245 VkDevice local_device;
21246 VkDeviceImageSubresourceInfoKHR* local_pInfo;
21247 local_device = device;
21248 local_pInfo = nullptr;
21249 if (pInfo) {
21250 local_pInfo = (VkDeviceImageSubresourceInfoKHR*)pool->alloc(
21251 sizeof(const VkDeviceImageSubresourceInfoKHR));
21252 deepcopy_VkDeviceImageSubresourceInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
21253 (VkDeviceImageSubresourceInfoKHR*)(local_pInfo));
21254 }
21255 if (local_pInfo) {
21256 transform_tohost_VkDeviceImageSubresourceInfoKHR(
21257 sResourceTracker, (VkDeviceImageSubresourceInfoKHR*)(local_pInfo));
21258 }
21259 size_t count = 0;
21260 size_t* countPtr = &count;
21261 {
21262 uint64_t cgen_var_0;
21263 *countPtr += 1 * 8;
21264 count_VkDeviceImageSubresourceInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21265 (VkDeviceImageSubresourceInfoKHR*)(local_pInfo),
21266 countPtr);
21267 count_VkSubresourceLayout2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21268 (VkSubresourceLayout2KHR*)(pLayout), countPtr);
21269 }
21270 uint32_t packetSize_vkGetDeviceImageSubresourceLayoutKHR =
21271 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
21272 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceImageSubresourceLayoutKHR);
21273 uint8_t* packetBeginPtr = streamPtr;
21274 uint8_t** streamPtrPtr = &streamPtr;
21275 uint32_t opcode_vkGetDeviceImageSubresourceLayoutKHR = OP_vkGetDeviceImageSubresourceLayoutKHR;
21276 uint32_t seqno;
21277 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
21278 memcpy(streamPtr, &opcode_vkGetDeviceImageSubresourceLayoutKHR, sizeof(uint32_t));
21279 streamPtr += sizeof(uint32_t);
21280 memcpy(streamPtr, &packetSize_vkGetDeviceImageSubresourceLayoutKHR, sizeof(uint32_t));
21281 streamPtr += sizeof(uint32_t);
21282 if (queueSubmitWithCommandsEnabled) {
21283 memcpy(streamPtr, &seqno, sizeof(uint32_t));
21284 streamPtr += sizeof(uint32_t);
21285 }
21286 uint64_t cgen_var_0;
21287 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
21288 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21289 *streamPtrPtr += 1 * 8;
21290 reservedmarshal_VkDeviceImageSubresourceInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21291 (VkDeviceImageSubresourceInfoKHR*)(local_pInfo),
21292 streamPtrPtr);
21293 reservedmarshal_VkSubresourceLayout2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21294 (VkSubresourceLayout2KHR*)(pLayout), streamPtrPtr);
21295 unmarshal_VkSubresourceLayout2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21296 (VkSubresourceLayout2KHR*)(pLayout));
21297 if (pLayout) {
21298 transform_fromhost_VkSubresourceLayout2KHR(sResourceTracker,
21299 (VkSubresourceLayout2KHR*)(pLayout));
21300 }
21301 ++encodeCount;
21302 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21303 pool->freeAll();
21304 stream->clearPool();
21305 }
21306 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21307 }
21308
vkGetImageSubresourceLayout2KHR(VkDevice device,VkImage image,const VkImageSubresource2KHR * pSubresource,VkSubresourceLayout2KHR * pLayout,uint32_t doLock)21309 void VkEncoder::vkGetImageSubresourceLayout2KHR(VkDevice device, VkImage image,
21310 const VkImageSubresource2KHR* pSubresource,
21311 VkSubresourceLayout2KHR* pLayout, uint32_t doLock) {
21312 (void)doLock;
21313 bool queueSubmitWithCommandsEnabled =
21314 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21315 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21316 auto stream = mImpl->stream();
21317 auto pool = mImpl->pool();
21318 VkDevice local_device;
21319 VkImage local_image;
21320 VkImageSubresource2KHR* local_pSubresource;
21321 local_device = device;
21322 local_image = image;
21323 local_pSubresource = nullptr;
21324 if (pSubresource) {
21325 local_pSubresource =
21326 (VkImageSubresource2KHR*)pool->alloc(sizeof(const VkImageSubresource2KHR));
21327 deepcopy_VkImageSubresource2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubresource,
21328 (VkImageSubresource2KHR*)(local_pSubresource));
21329 }
21330 if (local_pSubresource) {
21331 transform_tohost_VkImageSubresource2KHR(sResourceTracker,
21332 (VkImageSubresource2KHR*)(local_pSubresource));
21333 }
21334 size_t count = 0;
21335 size_t* countPtr = &count;
21336 {
21337 uint64_t cgen_var_0;
21338 *countPtr += 1 * 8;
21339 uint64_t cgen_var_1;
21340 *countPtr += 1 * 8;
21341 count_VkImageSubresource2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21342 (VkImageSubresource2KHR*)(local_pSubresource), countPtr);
21343 count_VkSubresourceLayout2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21344 (VkSubresourceLayout2KHR*)(pLayout), countPtr);
21345 }
21346 uint32_t packetSize_vkGetImageSubresourceLayout2KHR =
21347 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
21348 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageSubresourceLayout2KHR);
21349 uint8_t* packetBeginPtr = streamPtr;
21350 uint8_t** streamPtrPtr = &streamPtr;
21351 uint32_t opcode_vkGetImageSubresourceLayout2KHR = OP_vkGetImageSubresourceLayout2KHR;
21352 uint32_t seqno;
21353 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
21354 memcpy(streamPtr, &opcode_vkGetImageSubresourceLayout2KHR, sizeof(uint32_t));
21355 streamPtr += sizeof(uint32_t);
21356 memcpy(streamPtr, &packetSize_vkGetImageSubresourceLayout2KHR, sizeof(uint32_t));
21357 streamPtr += sizeof(uint32_t);
21358 if (queueSubmitWithCommandsEnabled) {
21359 memcpy(streamPtr, &seqno, sizeof(uint32_t));
21360 streamPtr += sizeof(uint32_t);
21361 }
21362 uint64_t cgen_var_0;
21363 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
21364 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21365 *streamPtrPtr += 1 * 8;
21366 uint64_t cgen_var_1;
21367 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
21368 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
21369 *streamPtrPtr += 1 * 8;
21370 reservedmarshal_VkImageSubresource2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21371 (VkImageSubresource2KHR*)(local_pSubresource),
21372 streamPtrPtr);
21373 reservedmarshal_VkSubresourceLayout2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21374 (VkSubresourceLayout2KHR*)(pLayout), streamPtrPtr);
21375 unmarshal_VkSubresourceLayout2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21376 (VkSubresourceLayout2KHR*)(pLayout));
21377 if (pLayout) {
21378 transform_fromhost_VkSubresourceLayout2KHR(sResourceTracker,
21379 (VkSubresourceLayout2KHR*)(pLayout));
21380 }
21381 ++encodeCount;
21382 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21383 pool->freeAll();
21384 stream->clearPool();
21385 }
21386 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21387 }
21388
21389 #endif
21390 #ifdef VK_KHR_line_rasterization
vkCmdSetLineStippleKHR(VkCommandBuffer commandBuffer,uint32_t lineStippleFactor,uint16_t lineStipplePattern,uint32_t doLock)21391 void VkEncoder::vkCmdSetLineStippleKHR(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor,
21392 uint16_t lineStipplePattern, uint32_t doLock) {
21393 (void)doLock;
21394 bool queueSubmitWithCommandsEnabled =
21395 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21396 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21397 auto stream = mImpl->stream();
21398 auto pool = mImpl->pool();
21399 VkCommandBuffer local_commandBuffer;
21400 uint32_t local_lineStippleFactor;
21401 uint16_t local_lineStipplePattern;
21402 local_commandBuffer = commandBuffer;
21403 local_lineStippleFactor = lineStippleFactor;
21404 local_lineStipplePattern = lineStipplePattern;
21405 size_t count = 0;
21406 size_t* countPtr = &count;
21407 {
21408 uint64_t cgen_var_0;
21409 *countPtr += 1 * 8;
21410 *countPtr += sizeof(uint32_t);
21411 *countPtr += sizeof(uint16_t);
21412 }
21413 uint32_t packetSize_vkCmdSetLineStippleKHR = 4 + 4 + count;
21414 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetLineStippleKHR -= 8;
21415 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetLineStippleKHR);
21416 uint8_t* packetBeginPtr = streamPtr;
21417 uint8_t** streamPtrPtr = &streamPtr;
21418 uint32_t opcode_vkCmdSetLineStippleKHR = OP_vkCmdSetLineStippleKHR;
21419 memcpy(streamPtr, &opcode_vkCmdSetLineStippleKHR, sizeof(uint32_t));
21420 streamPtr += sizeof(uint32_t);
21421 memcpy(streamPtr, &packetSize_vkCmdSetLineStippleKHR, sizeof(uint32_t));
21422 streamPtr += sizeof(uint32_t);
21423 if (!queueSubmitWithCommandsEnabled) {
21424 uint64_t cgen_var_0;
21425 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21426 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21427 *streamPtrPtr += 1 * 8;
21428 }
21429 memcpy(*streamPtrPtr, (uint32_t*)&local_lineStippleFactor, sizeof(uint32_t));
21430 *streamPtrPtr += sizeof(uint32_t);
21431 memcpy(*streamPtrPtr, (uint16_t*)&local_lineStipplePattern, sizeof(uint16_t));
21432 *streamPtrPtr += sizeof(uint16_t);
21433 ++encodeCount;
21434 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21435 pool->freeAll();
21436 stream->clearPool();
21437 }
21438 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21439 }
21440
21441 #endif
21442 #ifdef VK_ANDROID_native_buffer
vkGetSwapchainGrallocUsageANDROID(VkDevice device,VkFormat format,VkImageUsageFlags imageUsage,int * grallocUsage,uint32_t doLock)21443 VkResult VkEncoder::vkGetSwapchainGrallocUsageANDROID(VkDevice device, VkFormat format,
21444 VkImageUsageFlags imageUsage,
21445 int* grallocUsage, uint32_t doLock) {
21446 (void)doLock;
21447 bool queueSubmitWithCommandsEnabled =
21448 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21449 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21450 auto stream = mImpl->stream();
21451 auto pool = mImpl->pool();
21452 VkDevice local_device;
21453 VkFormat local_format;
21454 VkImageUsageFlags local_imageUsage;
21455 local_device = device;
21456 local_format = format;
21457 local_imageUsage = imageUsage;
21458 size_t count = 0;
21459 size_t* countPtr = &count;
21460 {
21461 uint64_t cgen_var_0;
21462 *countPtr += 1 * 8;
21463 *countPtr += sizeof(VkFormat);
21464 *countPtr += sizeof(VkImageUsageFlags);
21465 *countPtr += sizeof(int);
21466 }
21467 uint32_t packetSize_vkGetSwapchainGrallocUsageANDROID =
21468 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
21469 uint8_t* streamPtr = stream->reserve(packetSize_vkGetSwapchainGrallocUsageANDROID);
21470 uint8_t* packetBeginPtr = streamPtr;
21471 uint8_t** streamPtrPtr = &streamPtr;
21472 uint32_t opcode_vkGetSwapchainGrallocUsageANDROID = OP_vkGetSwapchainGrallocUsageANDROID;
21473 uint32_t seqno;
21474 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
21475 memcpy(streamPtr, &opcode_vkGetSwapchainGrallocUsageANDROID, sizeof(uint32_t));
21476 streamPtr += sizeof(uint32_t);
21477 memcpy(streamPtr, &packetSize_vkGetSwapchainGrallocUsageANDROID, sizeof(uint32_t));
21478 streamPtr += sizeof(uint32_t);
21479 if (queueSubmitWithCommandsEnabled) {
21480 memcpy(streamPtr, &seqno, sizeof(uint32_t));
21481 streamPtr += sizeof(uint32_t);
21482 }
21483 uint64_t cgen_var_0;
21484 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
21485 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21486 *streamPtrPtr += 1 * 8;
21487 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
21488 *streamPtrPtr += sizeof(VkFormat);
21489 memcpy(*streamPtrPtr, (VkImageUsageFlags*)&local_imageUsage, sizeof(VkImageUsageFlags));
21490 *streamPtrPtr += sizeof(VkImageUsageFlags);
21491 memcpy(*streamPtrPtr, (int*)grallocUsage, sizeof(int));
21492 *streamPtrPtr += sizeof(int);
21493 stream->read((int*)grallocUsage, sizeof(int));
21494 VkResult vkGetSwapchainGrallocUsageANDROID_VkResult_return = (VkResult)0;
21495 stream->read(&vkGetSwapchainGrallocUsageANDROID_VkResult_return, sizeof(VkResult));
21496 ++encodeCount;
21497 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21498 pool->freeAll();
21499 stream->clearPool();
21500 }
21501 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21502 return vkGetSwapchainGrallocUsageANDROID_VkResult_return;
21503 }
21504
vkAcquireImageANDROID(VkDevice device,VkImage image,int nativeFenceFd,VkSemaphore semaphore,VkFence fence,uint32_t doLock)21505 VkResult VkEncoder::vkAcquireImageANDROID(VkDevice device, VkImage image, int nativeFenceFd,
21506 VkSemaphore semaphore, VkFence fence, uint32_t doLock) {
21507 (void)doLock;
21508 bool queueSubmitWithCommandsEnabled =
21509 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21510 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21511 auto stream = mImpl->stream();
21512 auto pool = mImpl->pool();
21513 VkDevice local_device;
21514 VkImage local_image;
21515 int local_nativeFenceFd;
21516 VkSemaphore local_semaphore;
21517 VkFence local_fence;
21518 local_device = device;
21519 local_image = image;
21520 local_nativeFenceFd = nativeFenceFd;
21521 local_semaphore = semaphore;
21522 local_fence = fence;
21523 sResourceTracker->unwrap_vkAcquireImageANDROID_nativeFenceFd(nativeFenceFd,
21524 &local_nativeFenceFd);
21525 size_t count = 0;
21526 size_t* countPtr = &count;
21527 {
21528 uint64_t cgen_var_0;
21529 *countPtr += 1 * 8;
21530 uint64_t cgen_var_1;
21531 *countPtr += 1 * 8;
21532 *countPtr += sizeof(int);
21533 uint64_t cgen_var_2;
21534 *countPtr += 1 * 8;
21535 uint64_t cgen_var_3;
21536 *countPtr += 1 * 8;
21537 }
21538 uint32_t packetSize_vkAcquireImageANDROID =
21539 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
21540 uint8_t* streamPtr = stream->reserve(packetSize_vkAcquireImageANDROID);
21541 uint8_t* packetBeginPtr = streamPtr;
21542 uint8_t** streamPtrPtr = &streamPtr;
21543 uint32_t opcode_vkAcquireImageANDROID = OP_vkAcquireImageANDROID;
21544 uint32_t seqno;
21545 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
21546 memcpy(streamPtr, &opcode_vkAcquireImageANDROID, sizeof(uint32_t));
21547 streamPtr += sizeof(uint32_t);
21548 memcpy(streamPtr, &packetSize_vkAcquireImageANDROID, sizeof(uint32_t));
21549 streamPtr += sizeof(uint32_t);
21550 if (queueSubmitWithCommandsEnabled) {
21551 memcpy(streamPtr, &seqno, sizeof(uint32_t));
21552 streamPtr += sizeof(uint32_t);
21553 }
21554 uint64_t cgen_var_0;
21555 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
21556 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21557 *streamPtrPtr += 1 * 8;
21558 uint64_t cgen_var_1;
21559 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
21560 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
21561 *streamPtrPtr += 1 * 8;
21562 memcpy(*streamPtrPtr, (int*)&local_nativeFenceFd, sizeof(int));
21563 *streamPtrPtr += sizeof(int);
21564 uint64_t cgen_var_2;
21565 *&cgen_var_2 = get_host_u64_VkSemaphore((*&local_semaphore));
21566 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
21567 *streamPtrPtr += 1 * 8;
21568 uint64_t cgen_var_3;
21569 *&cgen_var_3 = get_host_u64_VkFence((*&local_fence));
21570 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_3, 1 * 8);
21571 *streamPtrPtr += 1 * 8;
21572 VkResult vkAcquireImageANDROID_VkResult_return = (VkResult)0;
21573 stream->read(&vkAcquireImageANDROID_VkResult_return, sizeof(VkResult));
21574 ++encodeCount;
21575 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21576 pool->freeAll();
21577 stream->clearPool();
21578 }
21579 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21580 return vkAcquireImageANDROID_VkResult_return;
21581 }
21582
vkQueueSignalReleaseImageANDROID(VkQueue queue,uint32_t waitSemaphoreCount,const VkSemaphore * pWaitSemaphores,VkImage image,int * pNativeFenceFd,uint32_t doLock)21583 VkResult VkEncoder::vkQueueSignalReleaseImageANDROID(VkQueue queue, uint32_t waitSemaphoreCount,
21584 const VkSemaphore* pWaitSemaphores,
21585 VkImage image, int* pNativeFenceFd,
21586 uint32_t doLock) {
21587 (void)doLock;
21588 bool queueSubmitWithCommandsEnabled =
21589 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21590 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21591 auto stream = mImpl->stream();
21592 auto pool = mImpl->pool();
21593 VkQueue local_queue;
21594 uint32_t local_waitSemaphoreCount;
21595 VkSemaphore* local_pWaitSemaphores;
21596 VkImage local_image;
21597 local_queue = queue;
21598 local_waitSemaphoreCount = waitSemaphoreCount;
21599 // Avoiding deepcopy for pWaitSemaphores
21600 local_pWaitSemaphores = (VkSemaphore*)pWaitSemaphores;
21601 local_image = image;
21602 size_t count = 0;
21603 size_t* countPtr = &count;
21604 {
21605 uint64_t cgen_var_0;
21606 *countPtr += 1 * 8;
21607 *countPtr += sizeof(uint32_t);
21608 // WARNING PTR CHECK
21609 *countPtr += 8;
21610 if (local_pWaitSemaphores) {
21611 if (((waitSemaphoreCount))) {
21612 *countPtr += ((waitSemaphoreCount)) * 8;
21613 }
21614 }
21615 uint64_t cgen_var_1;
21616 *countPtr += 1 * 8;
21617 *countPtr += sizeof(int);
21618 }
21619 uint32_t packetSize_vkQueueSignalReleaseImageANDROID =
21620 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
21621 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSignalReleaseImageANDROID);
21622 uint8_t* packetBeginPtr = streamPtr;
21623 uint8_t** streamPtrPtr = &streamPtr;
21624 uint32_t opcode_vkQueueSignalReleaseImageANDROID = OP_vkQueueSignalReleaseImageANDROID;
21625 uint32_t seqno;
21626 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
21627 memcpy(streamPtr, &opcode_vkQueueSignalReleaseImageANDROID, sizeof(uint32_t));
21628 streamPtr += sizeof(uint32_t);
21629 memcpy(streamPtr, &packetSize_vkQueueSignalReleaseImageANDROID, sizeof(uint32_t));
21630 streamPtr += sizeof(uint32_t);
21631 if (queueSubmitWithCommandsEnabled) {
21632 memcpy(streamPtr, &seqno, sizeof(uint32_t));
21633 streamPtr += sizeof(uint32_t);
21634 }
21635 uint64_t cgen_var_0;
21636 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
21637 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21638 *streamPtrPtr += 1 * 8;
21639 memcpy(*streamPtrPtr, (uint32_t*)&local_waitSemaphoreCount, sizeof(uint32_t));
21640 *streamPtrPtr += sizeof(uint32_t);
21641 // WARNING PTR CHECK
21642 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pWaitSemaphores;
21643 memcpy((*streamPtrPtr), &cgen_var_1, 8);
21644 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
21645 *streamPtrPtr += 8;
21646 if (local_pWaitSemaphores) {
21647 if (((waitSemaphoreCount))) {
21648 uint8_t* cgen_var_1_0_ptr = (uint8_t*)(*streamPtrPtr);
21649 for (uint32_t k = 0; k < ((waitSemaphoreCount)); ++k) {
21650 uint64_t tmpval = get_host_u64_VkSemaphore(local_pWaitSemaphores[k]);
21651 memcpy(cgen_var_1_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
21652 }
21653 *streamPtrPtr += 8 * ((waitSemaphoreCount));
21654 }
21655 }
21656 uint64_t cgen_var_2;
21657 *&cgen_var_2 = get_host_u64_VkImage((*&local_image));
21658 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
21659 *streamPtrPtr += 1 * 8;
21660 memcpy(*streamPtrPtr, (int*)pNativeFenceFd, sizeof(int));
21661 *streamPtrPtr += sizeof(int);
21662 stream->read((int*)pNativeFenceFd, sizeof(int));
21663 VkResult vkQueueSignalReleaseImageANDROID_VkResult_return = (VkResult)0;
21664 stream->read(&vkQueueSignalReleaseImageANDROID_VkResult_return, sizeof(VkResult));
21665 stream->flush();
21666 ++encodeCount;
21667 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21668 pool->freeAll();
21669 stream->clearPool();
21670 }
21671 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21672 return vkQueueSignalReleaseImageANDROID_VkResult_return;
21673 }
21674
vkGetSwapchainGrallocUsage2ANDROID(VkDevice device,VkFormat format,VkImageUsageFlags imageUsage,VkSwapchainImageUsageFlagsANDROID swapchainImageUsage,uint64_t * grallocConsumerUsage,uint64_t * grallocProducerUsage,uint32_t doLock)21675 VkResult VkEncoder::vkGetSwapchainGrallocUsage2ANDROID(
21676 VkDevice device, VkFormat format, VkImageUsageFlags imageUsage,
21677 VkSwapchainImageUsageFlagsANDROID swapchainImageUsage, uint64_t* grallocConsumerUsage,
21678 uint64_t* grallocProducerUsage, uint32_t doLock) {
21679 (void)doLock;
21680 bool queueSubmitWithCommandsEnabled =
21681 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21682 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21683 auto stream = mImpl->stream();
21684 auto pool = mImpl->pool();
21685 VkDevice local_device;
21686 VkFormat local_format;
21687 VkImageUsageFlags local_imageUsage;
21688 VkSwapchainImageUsageFlagsANDROID local_swapchainImageUsage;
21689 local_device = device;
21690 local_format = format;
21691 local_imageUsage = imageUsage;
21692 local_swapchainImageUsage = swapchainImageUsage;
21693 size_t count = 0;
21694 size_t* countPtr = &count;
21695 {
21696 uint64_t cgen_var_0;
21697 *countPtr += 1 * 8;
21698 *countPtr += sizeof(VkFormat);
21699 *countPtr += sizeof(VkImageUsageFlags);
21700 *countPtr += sizeof(VkSwapchainImageUsageFlagsANDROID);
21701 *countPtr += sizeof(uint64_t);
21702 *countPtr += sizeof(uint64_t);
21703 }
21704 uint32_t packetSize_vkGetSwapchainGrallocUsage2ANDROID =
21705 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
21706 uint8_t* streamPtr = stream->reserve(packetSize_vkGetSwapchainGrallocUsage2ANDROID);
21707 uint8_t* packetBeginPtr = streamPtr;
21708 uint8_t** streamPtrPtr = &streamPtr;
21709 uint32_t opcode_vkGetSwapchainGrallocUsage2ANDROID = OP_vkGetSwapchainGrallocUsage2ANDROID;
21710 uint32_t seqno;
21711 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
21712 memcpy(streamPtr, &opcode_vkGetSwapchainGrallocUsage2ANDROID, sizeof(uint32_t));
21713 streamPtr += sizeof(uint32_t);
21714 memcpy(streamPtr, &packetSize_vkGetSwapchainGrallocUsage2ANDROID, sizeof(uint32_t));
21715 streamPtr += sizeof(uint32_t);
21716 if (queueSubmitWithCommandsEnabled) {
21717 memcpy(streamPtr, &seqno, sizeof(uint32_t));
21718 streamPtr += sizeof(uint32_t);
21719 }
21720 uint64_t cgen_var_0;
21721 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
21722 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21723 *streamPtrPtr += 1 * 8;
21724 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
21725 *streamPtrPtr += sizeof(VkFormat);
21726 memcpy(*streamPtrPtr, (VkImageUsageFlags*)&local_imageUsage, sizeof(VkImageUsageFlags));
21727 *streamPtrPtr += sizeof(VkImageUsageFlags);
21728 memcpy(*streamPtrPtr, (VkSwapchainImageUsageFlagsANDROID*)&local_swapchainImageUsage,
21729 sizeof(VkSwapchainImageUsageFlagsANDROID));
21730 *streamPtrPtr += sizeof(VkSwapchainImageUsageFlagsANDROID);
21731 memcpy(*streamPtrPtr, (uint64_t*)grallocConsumerUsage, sizeof(uint64_t));
21732 *streamPtrPtr += sizeof(uint64_t);
21733 memcpy(*streamPtrPtr, (uint64_t*)grallocProducerUsage, sizeof(uint64_t));
21734 *streamPtrPtr += sizeof(uint64_t);
21735 stream->read((uint64_t*)grallocConsumerUsage, sizeof(uint64_t));
21736 stream->read((uint64_t*)grallocProducerUsage, sizeof(uint64_t));
21737 VkResult vkGetSwapchainGrallocUsage2ANDROID_VkResult_return = (VkResult)0;
21738 stream->read(&vkGetSwapchainGrallocUsage2ANDROID_VkResult_return, sizeof(VkResult));
21739 ++encodeCount;
21740 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21741 pool->freeAll();
21742 stream->clearPool();
21743 }
21744 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21745 return vkGetSwapchainGrallocUsage2ANDROID_VkResult_return;
21746 }
21747
21748 #endif
21749 #ifdef VK_EXT_transform_feedback
vkCmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets,const VkDeviceSize * pSizes,uint32_t doLock)21750 void VkEncoder::vkCmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer,
21751 uint32_t firstBinding, uint32_t bindingCount,
21752 const VkBuffer* pBuffers,
21753 const VkDeviceSize* pOffsets,
21754 const VkDeviceSize* pSizes, uint32_t doLock) {
21755 (void)doLock;
21756 bool queueSubmitWithCommandsEnabled =
21757 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21758 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21759 auto stream = mImpl->stream();
21760 auto pool = mImpl->pool();
21761 VkCommandBuffer local_commandBuffer;
21762 uint32_t local_firstBinding;
21763 uint32_t local_bindingCount;
21764 VkBuffer* local_pBuffers;
21765 VkDeviceSize* local_pOffsets;
21766 VkDeviceSize* local_pSizes;
21767 local_commandBuffer = commandBuffer;
21768 local_firstBinding = firstBinding;
21769 local_bindingCount = bindingCount;
21770 // Avoiding deepcopy for pBuffers
21771 local_pBuffers = (VkBuffer*)pBuffers;
21772 // Avoiding deepcopy for pOffsets
21773 local_pOffsets = (VkDeviceSize*)pOffsets;
21774 // Avoiding deepcopy for pSizes
21775 local_pSizes = (VkDeviceSize*)pSizes;
21776 size_t count = 0;
21777 size_t* countPtr = &count;
21778 {
21779 uint64_t cgen_var_0;
21780 *countPtr += 1 * 8;
21781 *countPtr += sizeof(uint32_t);
21782 *countPtr += sizeof(uint32_t);
21783 if (((bindingCount))) {
21784 *countPtr += ((bindingCount)) * 8;
21785 }
21786 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
21787 // WARNING PTR CHECK
21788 *countPtr += 8;
21789 if (local_pSizes) {
21790 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
21791 }
21792 }
21793 uint32_t packetSize_vkCmdBindTransformFeedbackBuffersEXT = 4 + 4 + count;
21794 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindTransformFeedbackBuffersEXT -= 8;
21795 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindTransformFeedbackBuffersEXT);
21796 uint8_t* packetBeginPtr = streamPtr;
21797 uint8_t** streamPtrPtr = &streamPtr;
21798 uint32_t opcode_vkCmdBindTransformFeedbackBuffersEXT = OP_vkCmdBindTransformFeedbackBuffersEXT;
21799 memcpy(streamPtr, &opcode_vkCmdBindTransformFeedbackBuffersEXT, sizeof(uint32_t));
21800 streamPtr += sizeof(uint32_t);
21801 memcpy(streamPtr, &packetSize_vkCmdBindTransformFeedbackBuffersEXT, sizeof(uint32_t));
21802 streamPtr += sizeof(uint32_t);
21803 if (!queueSubmitWithCommandsEnabled) {
21804 uint64_t cgen_var_0;
21805 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21806 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21807 *streamPtrPtr += 1 * 8;
21808 }
21809 memcpy(*streamPtrPtr, (uint32_t*)&local_firstBinding, sizeof(uint32_t));
21810 *streamPtrPtr += sizeof(uint32_t);
21811 memcpy(*streamPtrPtr, (uint32_t*)&local_bindingCount, sizeof(uint32_t));
21812 *streamPtrPtr += sizeof(uint32_t);
21813 if (((bindingCount))) {
21814 uint8_t* cgen_var_0_ptr = (uint8_t*)(*streamPtrPtr);
21815 for (uint32_t k = 0; k < ((bindingCount)); ++k) {
21816 uint64_t tmpval = get_host_u64_VkBuffer(local_pBuffers[k]);
21817 memcpy(cgen_var_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
21818 }
21819 *streamPtrPtr += 8 * ((bindingCount));
21820 }
21821 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pOffsets, ((bindingCount)) * sizeof(VkDeviceSize));
21822 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
21823 // WARNING PTR CHECK
21824 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pSizes;
21825 memcpy((*streamPtrPtr), &cgen_var_1, 8);
21826 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
21827 *streamPtrPtr += 8;
21828 if (local_pSizes) {
21829 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pSizes, ((bindingCount)) * sizeof(VkDeviceSize));
21830 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
21831 }
21832 ++encodeCount;
21833 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21834 pool->freeAll();
21835 stream->clearPool();
21836 }
21837 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21838 }
21839
vkCmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer,uint32_t firstCounterBuffer,uint32_t counterBufferCount,const VkBuffer * pCounterBuffers,const VkDeviceSize * pCounterBufferOffsets,uint32_t doLock)21840 void VkEncoder::vkCmdBeginTransformFeedbackEXT(
21841 VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount,
21842 const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets, uint32_t doLock) {
21843 (void)doLock;
21844 bool queueSubmitWithCommandsEnabled =
21845 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21846 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21847 auto stream = mImpl->stream();
21848 auto pool = mImpl->pool();
21849 VkCommandBuffer local_commandBuffer;
21850 uint32_t local_firstCounterBuffer;
21851 uint32_t local_counterBufferCount;
21852 VkBuffer* local_pCounterBuffers;
21853 VkDeviceSize* local_pCounterBufferOffsets;
21854 local_commandBuffer = commandBuffer;
21855 local_firstCounterBuffer = firstCounterBuffer;
21856 local_counterBufferCount = counterBufferCount;
21857 // Avoiding deepcopy for pCounterBuffers
21858 local_pCounterBuffers = (VkBuffer*)pCounterBuffers;
21859 // Avoiding deepcopy for pCounterBufferOffsets
21860 local_pCounterBufferOffsets = (VkDeviceSize*)pCounterBufferOffsets;
21861 size_t count = 0;
21862 size_t* countPtr = &count;
21863 {
21864 uint64_t cgen_var_0;
21865 *countPtr += 1 * 8;
21866 *countPtr += sizeof(uint32_t);
21867 *countPtr += sizeof(uint32_t);
21868 // WARNING PTR CHECK
21869 *countPtr += 8;
21870 if (local_pCounterBuffers) {
21871 if (((counterBufferCount))) {
21872 *countPtr += ((counterBufferCount)) * 8;
21873 }
21874 }
21875 // WARNING PTR CHECK
21876 *countPtr += 8;
21877 if (local_pCounterBufferOffsets) {
21878 *countPtr += ((counterBufferCount)) * sizeof(VkDeviceSize);
21879 }
21880 }
21881 uint32_t packetSize_vkCmdBeginTransformFeedbackEXT = 4 + 4 + count;
21882 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginTransformFeedbackEXT -= 8;
21883 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginTransformFeedbackEXT);
21884 uint8_t* packetBeginPtr = streamPtr;
21885 uint8_t** streamPtrPtr = &streamPtr;
21886 uint32_t opcode_vkCmdBeginTransformFeedbackEXT = OP_vkCmdBeginTransformFeedbackEXT;
21887 memcpy(streamPtr, &opcode_vkCmdBeginTransformFeedbackEXT, sizeof(uint32_t));
21888 streamPtr += sizeof(uint32_t);
21889 memcpy(streamPtr, &packetSize_vkCmdBeginTransformFeedbackEXT, sizeof(uint32_t));
21890 streamPtr += sizeof(uint32_t);
21891 if (!queueSubmitWithCommandsEnabled) {
21892 uint64_t cgen_var_0;
21893 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21894 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21895 *streamPtrPtr += 1 * 8;
21896 }
21897 memcpy(*streamPtrPtr, (uint32_t*)&local_firstCounterBuffer, sizeof(uint32_t));
21898 *streamPtrPtr += sizeof(uint32_t);
21899 memcpy(*streamPtrPtr, (uint32_t*)&local_counterBufferCount, sizeof(uint32_t));
21900 *streamPtrPtr += sizeof(uint32_t);
21901 // WARNING PTR CHECK
21902 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)local_pCounterBuffers;
21903 memcpy((*streamPtrPtr), &cgen_var_0, 8);
21904 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
21905 *streamPtrPtr += 8;
21906 if (local_pCounterBuffers) {
21907 if (((counterBufferCount))) {
21908 uint8_t* cgen_var_0_0_ptr = (uint8_t*)(*streamPtrPtr);
21909 for (uint32_t k = 0; k < ((counterBufferCount)); ++k) {
21910 uint64_t tmpval = get_host_u64_VkBuffer(local_pCounterBuffers[k]);
21911 memcpy(cgen_var_0_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
21912 }
21913 *streamPtrPtr += 8 * ((counterBufferCount));
21914 }
21915 }
21916 // WARNING PTR CHECK
21917 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pCounterBufferOffsets;
21918 memcpy((*streamPtrPtr), &cgen_var_1, 8);
21919 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
21920 *streamPtrPtr += 8;
21921 if (local_pCounterBufferOffsets) {
21922 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pCounterBufferOffsets,
21923 ((counterBufferCount)) * sizeof(VkDeviceSize));
21924 *streamPtrPtr += ((counterBufferCount)) * sizeof(VkDeviceSize);
21925 }
21926 ++encodeCount;
21927 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21928 pool->freeAll();
21929 stream->clearPool();
21930 }
21931 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21932 }
21933
vkCmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer,uint32_t firstCounterBuffer,uint32_t counterBufferCount,const VkBuffer * pCounterBuffers,const VkDeviceSize * pCounterBufferOffsets,uint32_t doLock)21934 void VkEncoder::vkCmdEndTransformFeedbackEXT(
21935 VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount,
21936 const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets, uint32_t doLock) {
21937 (void)doLock;
21938 bool queueSubmitWithCommandsEnabled =
21939 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21940 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21941 auto stream = mImpl->stream();
21942 auto pool = mImpl->pool();
21943 VkCommandBuffer local_commandBuffer;
21944 uint32_t local_firstCounterBuffer;
21945 uint32_t local_counterBufferCount;
21946 VkBuffer* local_pCounterBuffers;
21947 VkDeviceSize* local_pCounterBufferOffsets;
21948 local_commandBuffer = commandBuffer;
21949 local_firstCounterBuffer = firstCounterBuffer;
21950 local_counterBufferCount = counterBufferCount;
21951 // Avoiding deepcopy for pCounterBuffers
21952 local_pCounterBuffers = (VkBuffer*)pCounterBuffers;
21953 // Avoiding deepcopy for pCounterBufferOffsets
21954 local_pCounterBufferOffsets = (VkDeviceSize*)pCounterBufferOffsets;
21955 size_t count = 0;
21956 size_t* countPtr = &count;
21957 {
21958 uint64_t cgen_var_0;
21959 *countPtr += 1 * 8;
21960 *countPtr += sizeof(uint32_t);
21961 *countPtr += sizeof(uint32_t);
21962 // WARNING PTR CHECK
21963 *countPtr += 8;
21964 if (local_pCounterBuffers) {
21965 if (((counterBufferCount))) {
21966 *countPtr += ((counterBufferCount)) * 8;
21967 }
21968 }
21969 // WARNING PTR CHECK
21970 *countPtr += 8;
21971 if (local_pCounterBufferOffsets) {
21972 *countPtr += ((counterBufferCount)) * sizeof(VkDeviceSize);
21973 }
21974 }
21975 uint32_t packetSize_vkCmdEndTransformFeedbackEXT = 4 + 4 + count;
21976 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndTransformFeedbackEXT -= 8;
21977 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndTransformFeedbackEXT);
21978 uint8_t* packetBeginPtr = streamPtr;
21979 uint8_t** streamPtrPtr = &streamPtr;
21980 uint32_t opcode_vkCmdEndTransformFeedbackEXT = OP_vkCmdEndTransformFeedbackEXT;
21981 memcpy(streamPtr, &opcode_vkCmdEndTransformFeedbackEXT, sizeof(uint32_t));
21982 streamPtr += sizeof(uint32_t);
21983 memcpy(streamPtr, &packetSize_vkCmdEndTransformFeedbackEXT, sizeof(uint32_t));
21984 streamPtr += sizeof(uint32_t);
21985 if (!queueSubmitWithCommandsEnabled) {
21986 uint64_t cgen_var_0;
21987 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21988 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21989 *streamPtrPtr += 1 * 8;
21990 }
21991 memcpy(*streamPtrPtr, (uint32_t*)&local_firstCounterBuffer, sizeof(uint32_t));
21992 *streamPtrPtr += sizeof(uint32_t);
21993 memcpy(*streamPtrPtr, (uint32_t*)&local_counterBufferCount, sizeof(uint32_t));
21994 *streamPtrPtr += sizeof(uint32_t);
21995 // WARNING PTR CHECK
21996 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)local_pCounterBuffers;
21997 memcpy((*streamPtrPtr), &cgen_var_0, 8);
21998 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
21999 *streamPtrPtr += 8;
22000 if (local_pCounterBuffers) {
22001 if (((counterBufferCount))) {
22002 uint8_t* cgen_var_0_0_ptr = (uint8_t*)(*streamPtrPtr);
22003 for (uint32_t k = 0; k < ((counterBufferCount)); ++k) {
22004 uint64_t tmpval = get_host_u64_VkBuffer(local_pCounterBuffers[k]);
22005 memcpy(cgen_var_0_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
22006 }
22007 *streamPtrPtr += 8 * ((counterBufferCount));
22008 }
22009 }
22010 // WARNING PTR CHECK
22011 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pCounterBufferOffsets;
22012 memcpy((*streamPtrPtr), &cgen_var_1, 8);
22013 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
22014 *streamPtrPtr += 8;
22015 if (local_pCounterBufferOffsets) {
22016 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pCounterBufferOffsets,
22017 ((counterBufferCount)) * sizeof(VkDeviceSize));
22018 *streamPtrPtr += ((counterBufferCount)) * sizeof(VkDeviceSize);
22019 }
22020 ++encodeCount;
22021 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22022 pool->freeAll();
22023 stream->clearPool();
22024 }
22025 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22026 }
22027
vkCmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,VkQueryControlFlags flags,uint32_t index,uint32_t doLock)22028 void VkEncoder::vkCmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
22029 uint32_t query, VkQueryControlFlags flags, uint32_t index,
22030 uint32_t doLock) {
22031 (void)doLock;
22032 bool queueSubmitWithCommandsEnabled =
22033 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22034 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22035 auto stream = mImpl->stream();
22036 auto pool = mImpl->pool();
22037 VkCommandBuffer local_commandBuffer;
22038 VkQueryPool local_queryPool;
22039 uint32_t local_query;
22040 VkQueryControlFlags local_flags;
22041 uint32_t local_index;
22042 local_commandBuffer = commandBuffer;
22043 local_queryPool = queryPool;
22044 local_query = query;
22045 local_flags = flags;
22046 local_index = index;
22047 size_t count = 0;
22048 size_t* countPtr = &count;
22049 {
22050 uint64_t cgen_var_0;
22051 *countPtr += 1 * 8;
22052 uint64_t cgen_var_1;
22053 *countPtr += 1 * 8;
22054 *countPtr += sizeof(uint32_t);
22055 *countPtr += sizeof(VkQueryControlFlags);
22056 *countPtr += sizeof(uint32_t);
22057 }
22058 uint32_t packetSize_vkCmdBeginQueryIndexedEXT = 4 + 4 + count;
22059 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginQueryIndexedEXT -= 8;
22060 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginQueryIndexedEXT);
22061 uint8_t* packetBeginPtr = streamPtr;
22062 uint8_t** streamPtrPtr = &streamPtr;
22063 uint32_t opcode_vkCmdBeginQueryIndexedEXT = OP_vkCmdBeginQueryIndexedEXT;
22064 memcpy(streamPtr, &opcode_vkCmdBeginQueryIndexedEXT, sizeof(uint32_t));
22065 streamPtr += sizeof(uint32_t);
22066 memcpy(streamPtr, &packetSize_vkCmdBeginQueryIndexedEXT, sizeof(uint32_t));
22067 streamPtr += sizeof(uint32_t);
22068 if (!queueSubmitWithCommandsEnabled) {
22069 uint64_t cgen_var_0;
22070 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22071 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22072 *streamPtrPtr += 1 * 8;
22073 }
22074 uint64_t cgen_var_0;
22075 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
22076 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22077 *streamPtrPtr += 1 * 8;
22078 memcpy(*streamPtrPtr, (uint32_t*)&local_query, sizeof(uint32_t));
22079 *streamPtrPtr += sizeof(uint32_t);
22080 memcpy(*streamPtrPtr, (VkQueryControlFlags*)&local_flags, sizeof(VkQueryControlFlags));
22081 *streamPtrPtr += sizeof(VkQueryControlFlags);
22082 memcpy(*streamPtrPtr, (uint32_t*)&local_index, sizeof(uint32_t));
22083 *streamPtrPtr += sizeof(uint32_t);
22084 ++encodeCount;
22085 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22086 pool->freeAll();
22087 stream->clearPool();
22088 }
22089 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22090 }
22091
vkCmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,uint32_t index,uint32_t doLock)22092 void VkEncoder::vkCmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
22093 uint32_t query, uint32_t index, uint32_t doLock) {
22094 (void)doLock;
22095 bool queueSubmitWithCommandsEnabled =
22096 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22097 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22098 auto stream = mImpl->stream();
22099 auto pool = mImpl->pool();
22100 VkCommandBuffer local_commandBuffer;
22101 VkQueryPool local_queryPool;
22102 uint32_t local_query;
22103 uint32_t local_index;
22104 local_commandBuffer = commandBuffer;
22105 local_queryPool = queryPool;
22106 local_query = query;
22107 local_index = index;
22108 size_t count = 0;
22109 size_t* countPtr = &count;
22110 {
22111 uint64_t cgen_var_0;
22112 *countPtr += 1 * 8;
22113 uint64_t cgen_var_1;
22114 *countPtr += 1 * 8;
22115 *countPtr += sizeof(uint32_t);
22116 *countPtr += sizeof(uint32_t);
22117 }
22118 uint32_t packetSize_vkCmdEndQueryIndexedEXT = 4 + 4 + count;
22119 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndQueryIndexedEXT -= 8;
22120 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndQueryIndexedEXT);
22121 uint8_t* packetBeginPtr = streamPtr;
22122 uint8_t** streamPtrPtr = &streamPtr;
22123 uint32_t opcode_vkCmdEndQueryIndexedEXT = OP_vkCmdEndQueryIndexedEXT;
22124 memcpy(streamPtr, &opcode_vkCmdEndQueryIndexedEXT, sizeof(uint32_t));
22125 streamPtr += sizeof(uint32_t);
22126 memcpy(streamPtr, &packetSize_vkCmdEndQueryIndexedEXT, sizeof(uint32_t));
22127 streamPtr += sizeof(uint32_t);
22128 if (!queueSubmitWithCommandsEnabled) {
22129 uint64_t cgen_var_0;
22130 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22131 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22132 *streamPtrPtr += 1 * 8;
22133 }
22134 uint64_t cgen_var_0;
22135 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
22136 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22137 *streamPtrPtr += 1 * 8;
22138 memcpy(*streamPtrPtr, (uint32_t*)&local_query, sizeof(uint32_t));
22139 *streamPtrPtr += sizeof(uint32_t);
22140 memcpy(*streamPtrPtr, (uint32_t*)&local_index, sizeof(uint32_t));
22141 *streamPtrPtr += sizeof(uint32_t);
22142 ++encodeCount;
22143 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22144 pool->freeAll();
22145 stream->clearPool();
22146 }
22147 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22148 }
22149
vkCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer,uint32_t instanceCount,uint32_t firstInstance,VkBuffer counterBuffer,VkDeviceSize counterBufferOffset,uint32_t counterOffset,uint32_t vertexStride,uint32_t doLock)22150 void VkEncoder::vkCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
22151 uint32_t firstInstance, VkBuffer counterBuffer,
22152 VkDeviceSize counterBufferOffset,
22153 uint32_t counterOffset, uint32_t vertexStride,
22154 uint32_t doLock) {
22155 (void)doLock;
22156 bool queueSubmitWithCommandsEnabled =
22157 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22158 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22159 auto stream = mImpl->stream();
22160 auto pool = mImpl->pool();
22161 VkCommandBuffer local_commandBuffer;
22162 uint32_t local_instanceCount;
22163 uint32_t local_firstInstance;
22164 VkBuffer local_counterBuffer;
22165 VkDeviceSize local_counterBufferOffset;
22166 uint32_t local_counterOffset;
22167 uint32_t local_vertexStride;
22168 local_commandBuffer = commandBuffer;
22169 local_instanceCount = instanceCount;
22170 local_firstInstance = firstInstance;
22171 local_counterBuffer = counterBuffer;
22172 local_counterBufferOffset = counterBufferOffset;
22173 local_counterOffset = counterOffset;
22174 local_vertexStride = vertexStride;
22175 size_t count = 0;
22176 size_t* countPtr = &count;
22177 {
22178 uint64_t cgen_var_0;
22179 *countPtr += 1 * 8;
22180 *countPtr += sizeof(uint32_t);
22181 *countPtr += sizeof(uint32_t);
22182 uint64_t cgen_var_1;
22183 *countPtr += 1 * 8;
22184 *countPtr += sizeof(VkDeviceSize);
22185 *countPtr += sizeof(uint32_t);
22186 *countPtr += sizeof(uint32_t);
22187 }
22188 uint32_t packetSize_vkCmdDrawIndirectByteCountEXT = 4 + 4 + count;
22189 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDrawIndirectByteCountEXT -= 8;
22190 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdDrawIndirectByteCountEXT);
22191 uint8_t* packetBeginPtr = streamPtr;
22192 uint8_t** streamPtrPtr = &streamPtr;
22193 uint32_t opcode_vkCmdDrawIndirectByteCountEXT = OP_vkCmdDrawIndirectByteCountEXT;
22194 memcpy(streamPtr, &opcode_vkCmdDrawIndirectByteCountEXT, sizeof(uint32_t));
22195 streamPtr += sizeof(uint32_t);
22196 memcpy(streamPtr, &packetSize_vkCmdDrawIndirectByteCountEXT, sizeof(uint32_t));
22197 streamPtr += sizeof(uint32_t);
22198 if (!queueSubmitWithCommandsEnabled) {
22199 uint64_t cgen_var_0;
22200 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22201 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22202 *streamPtrPtr += 1 * 8;
22203 }
22204 memcpy(*streamPtrPtr, (uint32_t*)&local_instanceCount, sizeof(uint32_t));
22205 *streamPtrPtr += sizeof(uint32_t);
22206 memcpy(*streamPtrPtr, (uint32_t*)&local_firstInstance, sizeof(uint32_t));
22207 *streamPtrPtr += sizeof(uint32_t);
22208 uint64_t cgen_var_0;
22209 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_counterBuffer));
22210 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22211 *streamPtrPtr += 1 * 8;
22212 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_counterBufferOffset, sizeof(VkDeviceSize));
22213 *streamPtrPtr += sizeof(VkDeviceSize);
22214 memcpy(*streamPtrPtr, (uint32_t*)&local_counterOffset, sizeof(uint32_t));
22215 *streamPtrPtr += sizeof(uint32_t);
22216 memcpy(*streamPtrPtr, (uint32_t*)&local_vertexStride, sizeof(uint32_t));
22217 *streamPtrPtr += sizeof(uint32_t);
22218 ++encodeCount;
22219 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22220 pool->freeAll();
22221 stream->clearPool();
22222 }
22223 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22224 }
22225
22226 #endif
22227 #ifdef VK_EXT_image_drm_format_modifier
vkGetImageDrmFormatModifierPropertiesEXT(VkDevice device,VkImage image,VkImageDrmFormatModifierPropertiesEXT * pProperties,uint32_t doLock)22228 VkResult VkEncoder::vkGetImageDrmFormatModifierPropertiesEXT(
22229 VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties,
22230 uint32_t doLock) {
22231 (void)doLock;
22232 bool queueSubmitWithCommandsEnabled =
22233 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22234 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22235 auto stream = mImpl->stream();
22236 auto pool = mImpl->pool();
22237 VkDevice local_device;
22238 VkImage local_image;
22239 local_device = device;
22240 local_image = image;
22241 size_t count = 0;
22242 size_t* countPtr = &count;
22243 {
22244 uint64_t cgen_var_0;
22245 *countPtr += 1 * 8;
22246 uint64_t cgen_var_1;
22247 *countPtr += 1 * 8;
22248 count_VkImageDrmFormatModifierPropertiesEXT(
22249 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22250 (VkImageDrmFormatModifierPropertiesEXT*)(pProperties), countPtr);
22251 }
22252 uint32_t packetSize_vkGetImageDrmFormatModifierPropertiesEXT =
22253 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
22254 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageDrmFormatModifierPropertiesEXT);
22255 uint8_t* packetBeginPtr = streamPtr;
22256 uint8_t** streamPtrPtr = &streamPtr;
22257 uint32_t opcode_vkGetImageDrmFormatModifierPropertiesEXT =
22258 OP_vkGetImageDrmFormatModifierPropertiesEXT;
22259 uint32_t seqno;
22260 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
22261 memcpy(streamPtr, &opcode_vkGetImageDrmFormatModifierPropertiesEXT, sizeof(uint32_t));
22262 streamPtr += sizeof(uint32_t);
22263 memcpy(streamPtr, &packetSize_vkGetImageDrmFormatModifierPropertiesEXT, sizeof(uint32_t));
22264 streamPtr += sizeof(uint32_t);
22265 if (queueSubmitWithCommandsEnabled) {
22266 memcpy(streamPtr, &seqno, sizeof(uint32_t));
22267 streamPtr += sizeof(uint32_t);
22268 }
22269 uint64_t cgen_var_0;
22270 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
22271 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22272 *streamPtrPtr += 1 * 8;
22273 uint64_t cgen_var_1;
22274 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
22275 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
22276 *streamPtrPtr += 1 * 8;
22277 reservedmarshal_VkImageDrmFormatModifierPropertiesEXT(
22278 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties),
22279 streamPtrPtr);
22280 unmarshal_VkImageDrmFormatModifierPropertiesEXT(
22281 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties));
22282 if (pProperties) {
22283 transform_fromhost_VkImageDrmFormatModifierPropertiesEXT(
22284 sResourceTracker, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties));
22285 }
22286 VkResult vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return = (VkResult)0;
22287 stream->read(&vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return, sizeof(VkResult));
22288 ++encodeCount;
22289 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22290 pool->freeAll();
22291 stream->clearPool();
22292 }
22293 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22294 return vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return;
22295 }
22296
22297 #endif
22298 #ifdef VK_EXT_tooling_info
vkGetPhysicalDeviceToolPropertiesEXT(VkPhysicalDevice physicalDevice,uint32_t * pToolCount,VkPhysicalDeviceToolProperties * pToolProperties,uint32_t doLock)22299 VkResult VkEncoder::vkGetPhysicalDeviceToolPropertiesEXT(
22300 VkPhysicalDevice physicalDevice, uint32_t* pToolCount,
22301 VkPhysicalDeviceToolProperties* pToolProperties, uint32_t doLock) {
22302 (void)doLock;
22303 bool queueSubmitWithCommandsEnabled =
22304 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22305 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22306 auto stream = mImpl->stream();
22307 auto pool = mImpl->pool();
22308 VkPhysicalDevice local_physicalDevice;
22309 local_physicalDevice = physicalDevice;
22310 size_t count = 0;
22311 size_t* countPtr = &count;
22312 {
22313 uint64_t cgen_var_0;
22314 *countPtr += 1 * 8;
22315 // WARNING PTR CHECK
22316 *countPtr += 8;
22317 if (pToolCount) {
22318 *countPtr += sizeof(uint32_t);
22319 }
22320 // WARNING PTR CHECK
22321 *countPtr += 8;
22322 if (pToolProperties) {
22323 if (pToolCount) {
22324 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
22325 count_VkPhysicalDeviceToolProperties(
22326 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22327 (VkPhysicalDeviceToolProperties*)(pToolProperties + i), countPtr);
22328 }
22329 }
22330 }
22331 }
22332 uint32_t packetSize_vkGetPhysicalDeviceToolPropertiesEXT =
22333 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
22334 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceToolPropertiesEXT);
22335 uint8_t* packetBeginPtr = streamPtr;
22336 uint8_t** streamPtrPtr = &streamPtr;
22337 uint32_t opcode_vkGetPhysicalDeviceToolPropertiesEXT = OP_vkGetPhysicalDeviceToolPropertiesEXT;
22338 uint32_t seqno;
22339 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
22340 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceToolPropertiesEXT, sizeof(uint32_t));
22341 streamPtr += sizeof(uint32_t);
22342 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceToolPropertiesEXT, sizeof(uint32_t));
22343 streamPtr += sizeof(uint32_t);
22344 if (queueSubmitWithCommandsEnabled) {
22345 memcpy(streamPtr, &seqno, sizeof(uint32_t));
22346 streamPtr += sizeof(uint32_t);
22347 }
22348 uint64_t cgen_var_0;
22349 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
22350 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22351 *streamPtrPtr += 1 * 8;
22352 // WARNING PTR CHECK
22353 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pToolCount;
22354 memcpy((*streamPtrPtr), &cgen_var_1, 8);
22355 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
22356 *streamPtrPtr += 8;
22357 if (pToolCount) {
22358 memcpy(*streamPtrPtr, (uint32_t*)pToolCount, sizeof(uint32_t));
22359 *streamPtrPtr += sizeof(uint32_t);
22360 }
22361 // WARNING PTR CHECK
22362 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pToolProperties;
22363 memcpy((*streamPtrPtr), &cgen_var_2, 8);
22364 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
22365 *streamPtrPtr += 8;
22366 if (pToolProperties) {
22367 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
22368 reservedmarshal_VkPhysicalDeviceToolProperties(
22369 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22370 (VkPhysicalDeviceToolProperties*)(pToolProperties + i), streamPtrPtr);
22371 }
22372 }
22373 // WARNING PTR CHECK
22374 uint32_t* check_pToolCount;
22375 check_pToolCount = (uint32_t*)(uintptr_t)stream->getBe64();
22376 if (pToolCount) {
22377 if (!(check_pToolCount)) {
22378 fprintf(stderr, "fatal: pToolCount inconsistent between guest and host\n");
22379 }
22380 stream->read((uint32_t*)pToolCount, sizeof(uint32_t));
22381 }
22382 // WARNING PTR CHECK
22383 VkPhysicalDeviceToolProperties* check_pToolProperties;
22384 check_pToolProperties = (VkPhysicalDeviceToolProperties*)(uintptr_t)stream->getBe64();
22385 if (pToolProperties) {
22386 if (!(check_pToolProperties)) {
22387 fprintf(stderr, "fatal: pToolProperties inconsistent between guest and host\n");
22388 }
22389 if (pToolCount) {
22390 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
22391 unmarshal_VkPhysicalDeviceToolProperties(
22392 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22393 (VkPhysicalDeviceToolProperties*)(pToolProperties + i));
22394 }
22395 }
22396 }
22397 if (pToolCount) {
22398 if (pToolProperties) {
22399 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
22400 transform_fromhost_VkPhysicalDeviceToolProperties(
22401 sResourceTracker, (VkPhysicalDeviceToolProperties*)(pToolProperties + i));
22402 }
22403 }
22404 }
22405 VkResult vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return = (VkResult)0;
22406 stream->read(&vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return, sizeof(VkResult));
22407 ++encodeCount;
22408 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22409 pool->freeAll();
22410 stream->clearPool();
22411 }
22412 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22413 return vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return;
22414 }
22415
22416 #endif
22417 #ifdef VK_EXT_line_rasterization
vkCmdSetLineStippleEXT(VkCommandBuffer commandBuffer,uint32_t lineStippleFactor,uint16_t lineStipplePattern,uint32_t doLock)22418 void VkEncoder::vkCmdSetLineStippleEXT(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor,
22419 uint16_t lineStipplePattern, uint32_t doLock) {
22420 (void)doLock;
22421 bool queueSubmitWithCommandsEnabled =
22422 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22423 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22424 auto stream = mImpl->stream();
22425 auto pool = mImpl->pool();
22426 VkCommandBuffer local_commandBuffer;
22427 uint32_t local_lineStippleFactor;
22428 uint16_t local_lineStipplePattern;
22429 local_commandBuffer = commandBuffer;
22430 local_lineStippleFactor = lineStippleFactor;
22431 local_lineStipplePattern = lineStipplePattern;
22432 size_t count = 0;
22433 size_t* countPtr = &count;
22434 {
22435 uint64_t cgen_var_0;
22436 *countPtr += 1 * 8;
22437 *countPtr += sizeof(uint32_t);
22438 *countPtr += sizeof(uint16_t);
22439 }
22440 uint32_t packetSize_vkCmdSetLineStippleEXT = 4 + 4 + count;
22441 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetLineStippleEXT -= 8;
22442 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetLineStippleEXT);
22443 uint8_t* packetBeginPtr = streamPtr;
22444 uint8_t** streamPtrPtr = &streamPtr;
22445 uint32_t opcode_vkCmdSetLineStippleEXT = OP_vkCmdSetLineStippleEXT;
22446 memcpy(streamPtr, &opcode_vkCmdSetLineStippleEXT, sizeof(uint32_t));
22447 streamPtr += sizeof(uint32_t);
22448 memcpy(streamPtr, &packetSize_vkCmdSetLineStippleEXT, sizeof(uint32_t));
22449 streamPtr += sizeof(uint32_t);
22450 if (!queueSubmitWithCommandsEnabled) {
22451 uint64_t cgen_var_0;
22452 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22453 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22454 *streamPtrPtr += 1 * 8;
22455 }
22456 memcpy(*streamPtrPtr, (uint32_t*)&local_lineStippleFactor, sizeof(uint32_t));
22457 *streamPtrPtr += sizeof(uint32_t);
22458 memcpy(*streamPtrPtr, (uint16_t*)&local_lineStipplePattern, sizeof(uint16_t));
22459 *streamPtrPtr += sizeof(uint16_t);
22460 ++encodeCount;
22461 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22462 pool->freeAll();
22463 stream->clearPool();
22464 }
22465 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22466 }
22467
22468 #endif
22469 #ifdef VK_EXT_extended_dynamic_state
vkCmdSetCullModeEXT(VkCommandBuffer commandBuffer,VkCullModeFlags cullMode,uint32_t doLock)22470 void VkEncoder::vkCmdSetCullModeEXT(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode,
22471 uint32_t doLock) {
22472 (void)doLock;
22473 bool queueSubmitWithCommandsEnabled =
22474 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22475 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22476 auto stream = mImpl->stream();
22477 auto pool = mImpl->pool();
22478 VkCommandBuffer local_commandBuffer;
22479 VkCullModeFlags local_cullMode;
22480 local_commandBuffer = commandBuffer;
22481 local_cullMode = cullMode;
22482 size_t count = 0;
22483 size_t* countPtr = &count;
22484 {
22485 uint64_t cgen_var_0;
22486 *countPtr += 1 * 8;
22487 *countPtr += sizeof(VkCullModeFlags);
22488 }
22489 uint32_t packetSize_vkCmdSetCullModeEXT = 4 + 4 + count;
22490 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetCullModeEXT -= 8;
22491 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetCullModeEXT);
22492 uint8_t* packetBeginPtr = streamPtr;
22493 uint8_t** streamPtrPtr = &streamPtr;
22494 uint32_t opcode_vkCmdSetCullModeEXT = OP_vkCmdSetCullModeEXT;
22495 memcpy(streamPtr, &opcode_vkCmdSetCullModeEXT, sizeof(uint32_t));
22496 streamPtr += sizeof(uint32_t);
22497 memcpy(streamPtr, &packetSize_vkCmdSetCullModeEXT, sizeof(uint32_t));
22498 streamPtr += sizeof(uint32_t);
22499 if (!queueSubmitWithCommandsEnabled) {
22500 uint64_t cgen_var_0;
22501 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22502 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22503 *streamPtrPtr += 1 * 8;
22504 }
22505 memcpy(*streamPtrPtr, (VkCullModeFlags*)&local_cullMode, sizeof(VkCullModeFlags));
22506 *streamPtrPtr += sizeof(VkCullModeFlags);
22507 ++encodeCount;
22508 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22509 pool->freeAll();
22510 stream->clearPool();
22511 }
22512 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22513 }
22514
vkCmdSetFrontFaceEXT(VkCommandBuffer commandBuffer,VkFrontFace frontFace,uint32_t doLock)22515 void VkEncoder::vkCmdSetFrontFaceEXT(VkCommandBuffer commandBuffer, VkFrontFace frontFace,
22516 uint32_t doLock) {
22517 (void)doLock;
22518 bool queueSubmitWithCommandsEnabled =
22519 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22520 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22521 auto stream = mImpl->stream();
22522 auto pool = mImpl->pool();
22523 VkCommandBuffer local_commandBuffer;
22524 VkFrontFace local_frontFace;
22525 local_commandBuffer = commandBuffer;
22526 local_frontFace = frontFace;
22527 size_t count = 0;
22528 size_t* countPtr = &count;
22529 {
22530 uint64_t cgen_var_0;
22531 *countPtr += 1 * 8;
22532 *countPtr += sizeof(VkFrontFace);
22533 }
22534 uint32_t packetSize_vkCmdSetFrontFaceEXT = 4 + 4 + count;
22535 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetFrontFaceEXT -= 8;
22536 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetFrontFaceEXT);
22537 uint8_t* packetBeginPtr = streamPtr;
22538 uint8_t** streamPtrPtr = &streamPtr;
22539 uint32_t opcode_vkCmdSetFrontFaceEXT = OP_vkCmdSetFrontFaceEXT;
22540 memcpy(streamPtr, &opcode_vkCmdSetFrontFaceEXT, sizeof(uint32_t));
22541 streamPtr += sizeof(uint32_t);
22542 memcpy(streamPtr, &packetSize_vkCmdSetFrontFaceEXT, sizeof(uint32_t));
22543 streamPtr += sizeof(uint32_t);
22544 if (!queueSubmitWithCommandsEnabled) {
22545 uint64_t cgen_var_0;
22546 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22547 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22548 *streamPtrPtr += 1 * 8;
22549 }
22550 memcpy(*streamPtrPtr, (VkFrontFace*)&local_frontFace, sizeof(VkFrontFace));
22551 *streamPtrPtr += sizeof(VkFrontFace);
22552 ++encodeCount;
22553 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22554 pool->freeAll();
22555 stream->clearPool();
22556 }
22557 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22558 }
22559
vkCmdSetPrimitiveTopologyEXT(VkCommandBuffer commandBuffer,VkPrimitiveTopology primitiveTopology,uint32_t doLock)22560 void VkEncoder::vkCmdSetPrimitiveTopologyEXT(VkCommandBuffer commandBuffer,
22561 VkPrimitiveTopology primitiveTopology,
22562 uint32_t doLock) {
22563 (void)doLock;
22564 bool queueSubmitWithCommandsEnabled =
22565 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22566 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22567 auto stream = mImpl->stream();
22568 auto pool = mImpl->pool();
22569 VkCommandBuffer local_commandBuffer;
22570 VkPrimitiveTopology local_primitiveTopology;
22571 local_commandBuffer = commandBuffer;
22572 local_primitiveTopology = primitiveTopology;
22573 size_t count = 0;
22574 size_t* countPtr = &count;
22575 {
22576 uint64_t cgen_var_0;
22577 *countPtr += 1 * 8;
22578 *countPtr += sizeof(VkPrimitiveTopology);
22579 }
22580 uint32_t packetSize_vkCmdSetPrimitiveTopologyEXT = 4 + 4 + count;
22581 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetPrimitiveTopologyEXT -= 8;
22582 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetPrimitiveTopologyEXT);
22583 uint8_t* packetBeginPtr = streamPtr;
22584 uint8_t** streamPtrPtr = &streamPtr;
22585 uint32_t opcode_vkCmdSetPrimitiveTopologyEXT = OP_vkCmdSetPrimitiveTopologyEXT;
22586 memcpy(streamPtr, &opcode_vkCmdSetPrimitiveTopologyEXT, sizeof(uint32_t));
22587 streamPtr += sizeof(uint32_t);
22588 memcpy(streamPtr, &packetSize_vkCmdSetPrimitiveTopologyEXT, sizeof(uint32_t));
22589 streamPtr += sizeof(uint32_t);
22590 if (!queueSubmitWithCommandsEnabled) {
22591 uint64_t cgen_var_0;
22592 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22593 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22594 *streamPtrPtr += 1 * 8;
22595 }
22596 memcpy(*streamPtrPtr, (VkPrimitiveTopology*)&local_primitiveTopology,
22597 sizeof(VkPrimitiveTopology));
22598 *streamPtrPtr += sizeof(VkPrimitiveTopology);
22599 ++encodeCount;
22600 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22601 pool->freeAll();
22602 stream->clearPool();
22603 }
22604 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22605 }
22606
vkCmdSetViewportWithCountEXT(VkCommandBuffer commandBuffer,uint32_t viewportCount,const VkViewport * pViewports,uint32_t doLock)22607 void VkEncoder::vkCmdSetViewportWithCountEXT(VkCommandBuffer commandBuffer, uint32_t viewportCount,
22608 const VkViewport* pViewports, uint32_t doLock) {
22609 (void)doLock;
22610 bool queueSubmitWithCommandsEnabled =
22611 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22612 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22613 auto stream = mImpl->stream();
22614 auto pool = mImpl->pool();
22615 VkCommandBuffer local_commandBuffer;
22616 uint32_t local_viewportCount;
22617 VkViewport* local_pViewports;
22618 local_commandBuffer = commandBuffer;
22619 local_viewportCount = viewportCount;
22620 local_pViewports = nullptr;
22621 if (pViewports) {
22622 local_pViewports = (VkViewport*)pool->alloc(((viewportCount)) * sizeof(const VkViewport));
22623 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
22624 deepcopy_VkViewport(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pViewports + i,
22625 (VkViewport*)(local_pViewports + i));
22626 }
22627 }
22628 if (local_pViewports) {
22629 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
22630 transform_tohost_VkViewport(sResourceTracker, (VkViewport*)(local_pViewports + i));
22631 }
22632 }
22633 size_t count = 0;
22634 size_t* countPtr = &count;
22635 {
22636 uint64_t cgen_var_0;
22637 *countPtr += 1 * 8;
22638 *countPtr += sizeof(uint32_t);
22639 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
22640 count_VkViewport(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22641 (VkViewport*)(local_pViewports + i), countPtr);
22642 }
22643 }
22644 uint32_t packetSize_vkCmdSetViewportWithCountEXT = 4 + 4 + count;
22645 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetViewportWithCountEXT -= 8;
22646 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetViewportWithCountEXT);
22647 uint8_t* packetBeginPtr = streamPtr;
22648 uint8_t** streamPtrPtr = &streamPtr;
22649 uint32_t opcode_vkCmdSetViewportWithCountEXT = OP_vkCmdSetViewportWithCountEXT;
22650 memcpy(streamPtr, &opcode_vkCmdSetViewportWithCountEXT, sizeof(uint32_t));
22651 streamPtr += sizeof(uint32_t);
22652 memcpy(streamPtr, &packetSize_vkCmdSetViewportWithCountEXT, sizeof(uint32_t));
22653 streamPtr += sizeof(uint32_t);
22654 if (!queueSubmitWithCommandsEnabled) {
22655 uint64_t cgen_var_0;
22656 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22657 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22658 *streamPtrPtr += 1 * 8;
22659 }
22660 memcpy(*streamPtrPtr, (uint32_t*)&local_viewportCount, sizeof(uint32_t));
22661 *streamPtrPtr += sizeof(uint32_t);
22662 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
22663 reservedmarshal_VkViewport(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22664 (VkViewport*)(local_pViewports + i), streamPtrPtr);
22665 }
22666 ++encodeCount;
22667 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22668 pool->freeAll();
22669 stream->clearPool();
22670 }
22671 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22672 }
22673
vkCmdSetScissorWithCountEXT(VkCommandBuffer commandBuffer,uint32_t scissorCount,const VkRect2D * pScissors,uint32_t doLock)22674 void VkEncoder::vkCmdSetScissorWithCountEXT(VkCommandBuffer commandBuffer, uint32_t scissorCount,
22675 const VkRect2D* pScissors, uint32_t doLock) {
22676 (void)doLock;
22677 bool queueSubmitWithCommandsEnabled =
22678 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22679 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22680 auto stream = mImpl->stream();
22681 auto pool = mImpl->pool();
22682 VkCommandBuffer local_commandBuffer;
22683 uint32_t local_scissorCount;
22684 VkRect2D* local_pScissors;
22685 local_commandBuffer = commandBuffer;
22686 local_scissorCount = scissorCount;
22687 local_pScissors = nullptr;
22688 if (pScissors) {
22689 local_pScissors = (VkRect2D*)pool->alloc(((scissorCount)) * sizeof(const VkRect2D));
22690 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
22691 deepcopy_VkRect2D(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pScissors + i,
22692 (VkRect2D*)(local_pScissors + i));
22693 }
22694 }
22695 if (local_pScissors) {
22696 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
22697 transform_tohost_VkRect2D(sResourceTracker, (VkRect2D*)(local_pScissors + i));
22698 }
22699 }
22700 size_t count = 0;
22701 size_t* countPtr = &count;
22702 {
22703 uint64_t cgen_var_0;
22704 *countPtr += 1 * 8;
22705 *countPtr += sizeof(uint32_t);
22706 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
22707 count_VkRect2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22708 (VkRect2D*)(local_pScissors + i), countPtr);
22709 }
22710 }
22711 uint32_t packetSize_vkCmdSetScissorWithCountEXT = 4 + 4 + count;
22712 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetScissorWithCountEXT -= 8;
22713 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetScissorWithCountEXT);
22714 uint8_t* packetBeginPtr = streamPtr;
22715 uint8_t** streamPtrPtr = &streamPtr;
22716 uint32_t opcode_vkCmdSetScissorWithCountEXT = OP_vkCmdSetScissorWithCountEXT;
22717 memcpy(streamPtr, &opcode_vkCmdSetScissorWithCountEXT, sizeof(uint32_t));
22718 streamPtr += sizeof(uint32_t);
22719 memcpy(streamPtr, &packetSize_vkCmdSetScissorWithCountEXT, sizeof(uint32_t));
22720 streamPtr += sizeof(uint32_t);
22721 if (!queueSubmitWithCommandsEnabled) {
22722 uint64_t cgen_var_0;
22723 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22724 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22725 *streamPtrPtr += 1 * 8;
22726 }
22727 memcpy(*streamPtrPtr, (uint32_t*)&local_scissorCount, sizeof(uint32_t));
22728 *streamPtrPtr += sizeof(uint32_t);
22729 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
22730 reservedmarshal_VkRect2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22731 (VkRect2D*)(local_pScissors + i), streamPtrPtr);
22732 }
22733 ++encodeCount;
22734 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22735 pool->freeAll();
22736 stream->clearPool();
22737 }
22738 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22739 }
22740
vkCmdBindVertexBuffers2EXT(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets,const VkDeviceSize * pSizes,const VkDeviceSize * pStrides,uint32_t doLock)22741 void VkEncoder::vkCmdBindVertexBuffers2EXT(VkCommandBuffer commandBuffer, uint32_t firstBinding,
22742 uint32_t bindingCount, const VkBuffer* pBuffers,
22743 const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes,
22744 const VkDeviceSize* pStrides, uint32_t doLock) {
22745 (void)doLock;
22746 bool queueSubmitWithCommandsEnabled =
22747 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22748 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22749 auto stream = mImpl->stream();
22750 auto pool = mImpl->pool();
22751 VkCommandBuffer local_commandBuffer;
22752 uint32_t local_firstBinding;
22753 uint32_t local_bindingCount;
22754 VkBuffer* local_pBuffers;
22755 VkDeviceSize* local_pOffsets;
22756 VkDeviceSize* local_pSizes;
22757 VkDeviceSize* local_pStrides;
22758 local_commandBuffer = commandBuffer;
22759 local_firstBinding = firstBinding;
22760 local_bindingCount = bindingCount;
22761 // Avoiding deepcopy for pBuffers
22762 local_pBuffers = (VkBuffer*)pBuffers;
22763 // Avoiding deepcopy for pOffsets
22764 local_pOffsets = (VkDeviceSize*)pOffsets;
22765 // Avoiding deepcopy for pSizes
22766 local_pSizes = (VkDeviceSize*)pSizes;
22767 // Avoiding deepcopy for pStrides
22768 local_pStrides = (VkDeviceSize*)pStrides;
22769 size_t count = 0;
22770 size_t* countPtr = &count;
22771 {
22772 uint64_t cgen_var_0;
22773 *countPtr += 1 * 8;
22774 *countPtr += sizeof(uint32_t);
22775 *countPtr += sizeof(uint32_t);
22776 // WARNING PTR CHECK
22777 *countPtr += 8;
22778 if (local_pBuffers) {
22779 if (((bindingCount))) {
22780 *countPtr += ((bindingCount)) * 8;
22781 }
22782 }
22783 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
22784 // WARNING PTR CHECK
22785 *countPtr += 8;
22786 if (local_pSizes) {
22787 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
22788 }
22789 // WARNING PTR CHECK
22790 *countPtr += 8;
22791 if (local_pStrides) {
22792 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
22793 }
22794 }
22795 uint32_t packetSize_vkCmdBindVertexBuffers2EXT = 4 + 4 + count;
22796 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindVertexBuffers2EXT -= 8;
22797 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindVertexBuffers2EXT);
22798 uint8_t* packetBeginPtr = streamPtr;
22799 uint8_t** streamPtrPtr = &streamPtr;
22800 uint32_t opcode_vkCmdBindVertexBuffers2EXT = OP_vkCmdBindVertexBuffers2EXT;
22801 memcpy(streamPtr, &opcode_vkCmdBindVertexBuffers2EXT, sizeof(uint32_t));
22802 streamPtr += sizeof(uint32_t);
22803 memcpy(streamPtr, &packetSize_vkCmdBindVertexBuffers2EXT, sizeof(uint32_t));
22804 streamPtr += sizeof(uint32_t);
22805 if (!queueSubmitWithCommandsEnabled) {
22806 uint64_t cgen_var_0;
22807 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22808 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22809 *streamPtrPtr += 1 * 8;
22810 }
22811 memcpy(*streamPtrPtr, (uint32_t*)&local_firstBinding, sizeof(uint32_t));
22812 *streamPtrPtr += sizeof(uint32_t);
22813 memcpy(*streamPtrPtr, (uint32_t*)&local_bindingCount, sizeof(uint32_t));
22814 *streamPtrPtr += sizeof(uint32_t);
22815 // WARNING PTR CHECK
22816 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)local_pBuffers;
22817 memcpy((*streamPtrPtr), &cgen_var_0, 8);
22818 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
22819 *streamPtrPtr += 8;
22820 if (local_pBuffers) {
22821 if (((bindingCount))) {
22822 uint8_t* cgen_var_0_0_ptr = (uint8_t*)(*streamPtrPtr);
22823 for (uint32_t k = 0; k < ((bindingCount)); ++k) {
22824 uint64_t tmpval = get_host_u64_VkBuffer(local_pBuffers[k]);
22825 memcpy(cgen_var_0_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
22826 }
22827 *streamPtrPtr += 8 * ((bindingCount));
22828 }
22829 }
22830 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pOffsets, ((bindingCount)) * sizeof(VkDeviceSize));
22831 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
22832 // WARNING PTR CHECK
22833 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pSizes;
22834 memcpy((*streamPtrPtr), &cgen_var_1, 8);
22835 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
22836 *streamPtrPtr += 8;
22837 if (local_pSizes) {
22838 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pSizes, ((bindingCount)) * sizeof(VkDeviceSize));
22839 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
22840 }
22841 // WARNING PTR CHECK
22842 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pStrides;
22843 memcpy((*streamPtrPtr), &cgen_var_2, 8);
22844 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
22845 *streamPtrPtr += 8;
22846 if (local_pStrides) {
22847 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pStrides,
22848 ((bindingCount)) * sizeof(VkDeviceSize));
22849 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
22850 }
22851 ++encodeCount;
22852 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22853 pool->freeAll();
22854 stream->clearPool();
22855 }
22856 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22857 }
22858
vkCmdSetDepthTestEnableEXT(VkCommandBuffer commandBuffer,VkBool32 depthTestEnable,uint32_t doLock)22859 void VkEncoder::vkCmdSetDepthTestEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable,
22860 uint32_t doLock) {
22861 (void)doLock;
22862 bool queueSubmitWithCommandsEnabled =
22863 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22864 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22865 auto stream = mImpl->stream();
22866 auto pool = mImpl->pool();
22867 VkCommandBuffer local_commandBuffer;
22868 VkBool32 local_depthTestEnable;
22869 local_commandBuffer = commandBuffer;
22870 local_depthTestEnable = depthTestEnable;
22871 size_t count = 0;
22872 size_t* countPtr = &count;
22873 {
22874 uint64_t cgen_var_0;
22875 *countPtr += 1 * 8;
22876 *countPtr += sizeof(VkBool32);
22877 }
22878 uint32_t packetSize_vkCmdSetDepthTestEnableEXT = 4 + 4 + count;
22879 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthTestEnableEXT -= 8;
22880 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthTestEnableEXT);
22881 uint8_t* packetBeginPtr = streamPtr;
22882 uint8_t** streamPtrPtr = &streamPtr;
22883 uint32_t opcode_vkCmdSetDepthTestEnableEXT = OP_vkCmdSetDepthTestEnableEXT;
22884 memcpy(streamPtr, &opcode_vkCmdSetDepthTestEnableEXT, sizeof(uint32_t));
22885 streamPtr += sizeof(uint32_t);
22886 memcpy(streamPtr, &packetSize_vkCmdSetDepthTestEnableEXT, sizeof(uint32_t));
22887 streamPtr += sizeof(uint32_t);
22888 if (!queueSubmitWithCommandsEnabled) {
22889 uint64_t cgen_var_0;
22890 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22891 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22892 *streamPtrPtr += 1 * 8;
22893 }
22894 memcpy(*streamPtrPtr, (VkBool32*)&local_depthTestEnable, sizeof(VkBool32));
22895 *streamPtrPtr += sizeof(VkBool32);
22896 ++encodeCount;
22897 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22898 pool->freeAll();
22899 stream->clearPool();
22900 }
22901 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22902 }
22903
vkCmdSetDepthWriteEnableEXT(VkCommandBuffer commandBuffer,VkBool32 depthWriteEnable,uint32_t doLock)22904 void VkEncoder::vkCmdSetDepthWriteEnableEXT(VkCommandBuffer commandBuffer,
22905 VkBool32 depthWriteEnable, uint32_t doLock) {
22906 (void)doLock;
22907 bool queueSubmitWithCommandsEnabled =
22908 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22909 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22910 auto stream = mImpl->stream();
22911 auto pool = mImpl->pool();
22912 VkCommandBuffer local_commandBuffer;
22913 VkBool32 local_depthWriteEnable;
22914 local_commandBuffer = commandBuffer;
22915 local_depthWriteEnable = depthWriteEnable;
22916 size_t count = 0;
22917 size_t* countPtr = &count;
22918 {
22919 uint64_t cgen_var_0;
22920 *countPtr += 1 * 8;
22921 *countPtr += sizeof(VkBool32);
22922 }
22923 uint32_t packetSize_vkCmdSetDepthWriteEnableEXT = 4 + 4 + count;
22924 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthWriteEnableEXT -= 8;
22925 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthWriteEnableEXT);
22926 uint8_t* packetBeginPtr = streamPtr;
22927 uint8_t** streamPtrPtr = &streamPtr;
22928 uint32_t opcode_vkCmdSetDepthWriteEnableEXT = OP_vkCmdSetDepthWriteEnableEXT;
22929 memcpy(streamPtr, &opcode_vkCmdSetDepthWriteEnableEXT, sizeof(uint32_t));
22930 streamPtr += sizeof(uint32_t);
22931 memcpy(streamPtr, &packetSize_vkCmdSetDepthWriteEnableEXT, sizeof(uint32_t));
22932 streamPtr += sizeof(uint32_t);
22933 if (!queueSubmitWithCommandsEnabled) {
22934 uint64_t cgen_var_0;
22935 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22936 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22937 *streamPtrPtr += 1 * 8;
22938 }
22939 memcpy(*streamPtrPtr, (VkBool32*)&local_depthWriteEnable, sizeof(VkBool32));
22940 *streamPtrPtr += sizeof(VkBool32);
22941 ++encodeCount;
22942 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22943 pool->freeAll();
22944 stream->clearPool();
22945 }
22946 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22947 }
22948
vkCmdSetDepthCompareOpEXT(VkCommandBuffer commandBuffer,VkCompareOp depthCompareOp,uint32_t doLock)22949 void VkEncoder::vkCmdSetDepthCompareOpEXT(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp,
22950 uint32_t doLock) {
22951 (void)doLock;
22952 bool queueSubmitWithCommandsEnabled =
22953 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22954 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22955 auto stream = mImpl->stream();
22956 auto pool = mImpl->pool();
22957 VkCommandBuffer local_commandBuffer;
22958 VkCompareOp local_depthCompareOp;
22959 local_commandBuffer = commandBuffer;
22960 local_depthCompareOp = depthCompareOp;
22961 size_t count = 0;
22962 size_t* countPtr = &count;
22963 {
22964 uint64_t cgen_var_0;
22965 *countPtr += 1 * 8;
22966 *countPtr += sizeof(VkCompareOp);
22967 }
22968 uint32_t packetSize_vkCmdSetDepthCompareOpEXT = 4 + 4 + count;
22969 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthCompareOpEXT -= 8;
22970 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthCompareOpEXT);
22971 uint8_t* packetBeginPtr = streamPtr;
22972 uint8_t** streamPtrPtr = &streamPtr;
22973 uint32_t opcode_vkCmdSetDepthCompareOpEXT = OP_vkCmdSetDepthCompareOpEXT;
22974 memcpy(streamPtr, &opcode_vkCmdSetDepthCompareOpEXT, sizeof(uint32_t));
22975 streamPtr += sizeof(uint32_t);
22976 memcpy(streamPtr, &packetSize_vkCmdSetDepthCompareOpEXT, sizeof(uint32_t));
22977 streamPtr += sizeof(uint32_t);
22978 if (!queueSubmitWithCommandsEnabled) {
22979 uint64_t cgen_var_0;
22980 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22981 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22982 *streamPtrPtr += 1 * 8;
22983 }
22984 memcpy(*streamPtrPtr, (VkCompareOp*)&local_depthCompareOp, sizeof(VkCompareOp));
22985 *streamPtrPtr += sizeof(VkCompareOp);
22986 ++encodeCount;
22987 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22988 pool->freeAll();
22989 stream->clearPool();
22990 }
22991 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22992 }
22993
vkCmdSetDepthBoundsTestEnableEXT(VkCommandBuffer commandBuffer,VkBool32 depthBoundsTestEnable,uint32_t doLock)22994 void VkEncoder::vkCmdSetDepthBoundsTestEnableEXT(VkCommandBuffer commandBuffer,
22995 VkBool32 depthBoundsTestEnable, uint32_t doLock) {
22996 (void)doLock;
22997 bool queueSubmitWithCommandsEnabled =
22998 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22999 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23000 auto stream = mImpl->stream();
23001 auto pool = mImpl->pool();
23002 VkCommandBuffer local_commandBuffer;
23003 VkBool32 local_depthBoundsTestEnable;
23004 local_commandBuffer = commandBuffer;
23005 local_depthBoundsTestEnable = depthBoundsTestEnable;
23006 size_t count = 0;
23007 size_t* countPtr = &count;
23008 {
23009 uint64_t cgen_var_0;
23010 *countPtr += 1 * 8;
23011 *countPtr += sizeof(VkBool32);
23012 }
23013 uint32_t packetSize_vkCmdSetDepthBoundsTestEnableEXT = 4 + 4 + count;
23014 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthBoundsTestEnableEXT -= 8;
23015 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthBoundsTestEnableEXT);
23016 uint8_t* packetBeginPtr = streamPtr;
23017 uint8_t** streamPtrPtr = &streamPtr;
23018 uint32_t opcode_vkCmdSetDepthBoundsTestEnableEXT = OP_vkCmdSetDepthBoundsTestEnableEXT;
23019 memcpy(streamPtr, &opcode_vkCmdSetDepthBoundsTestEnableEXT, sizeof(uint32_t));
23020 streamPtr += sizeof(uint32_t);
23021 memcpy(streamPtr, &packetSize_vkCmdSetDepthBoundsTestEnableEXT, sizeof(uint32_t));
23022 streamPtr += sizeof(uint32_t);
23023 if (!queueSubmitWithCommandsEnabled) {
23024 uint64_t cgen_var_0;
23025 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23026 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23027 *streamPtrPtr += 1 * 8;
23028 }
23029 memcpy(*streamPtrPtr, (VkBool32*)&local_depthBoundsTestEnable, sizeof(VkBool32));
23030 *streamPtrPtr += sizeof(VkBool32);
23031 ++encodeCount;
23032 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23033 pool->freeAll();
23034 stream->clearPool();
23035 }
23036 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23037 }
23038
vkCmdSetStencilTestEnableEXT(VkCommandBuffer commandBuffer,VkBool32 stencilTestEnable,uint32_t doLock)23039 void VkEncoder::vkCmdSetStencilTestEnableEXT(VkCommandBuffer commandBuffer,
23040 VkBool32 stencilTestEnable, uint32_t doLock) {
23041 (void)doLock;
23042 bool queueSubmitWithCommandsEnabled =
23043 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23044 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23045 auto stream = mImpl->stream();
23046 auto pool = mImpl->pool();
23047 VkCommandBuffer local_commandBuffer;
23048 VkBool32 local_stencilTestEnable;
23049 local_commandBuffer = commandBuffer;
23050 local_stencilTestEnable = stencilTestEnable;
23051 size_t count = 0;
23052 size_t* countPtr = &count;
23053 {
23054 uint64_t cgen_var_0;
23055 *countPtr += 1 * 8;
23056 *countPtr += sizeof(VkBool32);
23057 }
23058 uint32_t packetSize_vkCmdSetStencilTestEnableEXT = 4 + 4 + count;
23059 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetStencilTestEnableEXT -= 8;
23060 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetStencilTestEnableEXT);
23061 uint8_t* packetBeginPtr = streamPtr;
23062 uint8_t** streamPtrPtr = &streamPtr;
23063 uint32_t opcode_vkCmdSetStencilTestEnableEXT = OP_vkCmdSetStencilTestEnableEXT;
23064 memcpy(streamPtr, &opcode_vkCmdSetStencilTestEnableEXT, sizeof(uint32_t));
23065 streamPtr += sizeof(uint32_t);
23066 memcpy(streamPtr, &packetSize_vkCmdSetStencilTestEnableEXT, sizeof(uint32_t));
23067 streamPtr += sizeof(uint32_t);
23068 if (!queueSubmitWithCommandsEnabled) {
23069 uint64_t cgen_var_0;
23070 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23071 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23072 *streamPtrPtr += 1 * 8;
23073 }
23074 memcpy(*streamPtrPtr, (VkBool32*)&local_stencilTestEnable, sizeof(VkBool32));
23075 *streamPtrPtr += sizeof(VkBool32);
23076 ++encodeCount;
23077 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23078 pool->freeAll();
23079 stream->clearPool();
23080 }
23081 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23082 }
23083
vkCmdSetStencilOpEXT(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,VkStencilOp failOp,VkStencilOp passOp,VkStencilOp depthFailOp,VkCompareOp compareOp,uint32_t doLock)23084 void VkEncoder::vkCmdSetStencilOpEXT(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
23085 VkStencilOp failOp, VkStencilOp passOp,
23086 VkStencilOp depthFailOp, VkCompareOp compareOp,
23087 uint32_t doLock) {
23088 (void)doLock;
23089 bool queueSubmitWithCommandsEnabled =
23090 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23091 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23092 auto stream = mImpl->stream();
23093 auto pool = mImpl->pool();
23094 VkCommandBuffer local_commandBuffer;
23095 VkStencilFaceFlags local_faceMask;
23096 VkStencilOp local_failOp;
23097 VkStencilOp local_passOp;
23098 VkStencilOp local_depthFailOp;
23099 VkCompareOp local_compareOp;
23100 local_commandBuffer = commandBuffer;
23101 local_faceMask = faceMask;
23102 local_failOp = failOp;
23103 local_passOp = passOp;
23104 local_depthFailOp = depthFailOp;
23105 local_compareOp = compareOp;
23106 size_t count = 0;
23107 size_t* countPtr = &count;
23108 {
23109 uint64_t cgen_var_0;
23110 *countPtr += 1 * 8;
23111 *countPtr += sizeof(VkStencilFaceFlags);
23112 *countPtr += sizeof(VkStencilOp);
23113 *countPtr += sizeof(VkStencilOp);
23114 *countPtr += sizeof(VkStencilOp);
23115 *countPtr += sizeof(VkCompareOp);
23116 }
23117 uint32_t packetSize_vkCmdSetStencilOpEXT = 4 + 4 + count;
23118 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetStencilOpEXT -= 8;
23119 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetStencilOpEXT);
23120 uint8_t* packetBeginPtr = streamPtr;
23121 uint8_t** streamPtrPtr = &streamPtr;
23122 uint32_t opcode_vkCmdSetStencilOpEXT = OP_vkCmdSetStencilOpEXT;
23123 memcpy(streamPtr, &opcode_vkCmdSetStencilOpEXT, sizeof(uint32_t));
23124 streamPtr += sizeof(uint32_t);
23125 memcpy(streamPtr, &packetSize_vkCmdSetStencilOpEXT, sizeof(uint32_t));
23126 streamPtr += sizeof(uint32_t);
23127 if (!queueSubmitWithCommandsEnabled) {
23128 uint64_t cgen_var_0;
23129 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23130 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23131 *streamPtrPtr += 1 * 8;
23132 }
23133 memcpy(*streamPtrPtr, (VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
23134 *streamPtrPtr += sizeof(VkStencilFaceFlags);
23135 memcpy(*streamPtrPtr, (VkStencilOp*)&local_failOp, sizeof(VkStencilOp));
23136 *streamPtrPtr += sizeof(VkStencilOp);
23137 memcpy(*streamPtrPtr, (VkStencilOp*)&local_passOp, sizeof(VkStencilOp));
23138 *streamPtrPtr += sizeof(VkStencilOp);
23139 memcpy(*streamPtrPtr, (VkStencilOp*)&local_depthFailOp, sizeof(VkStencilOp));
23140 *streamPtrPtr += sizeof(VkStencilOp);
23141 memcpy(*streamPtrPtr, (VkCompareOp*)&local_compareOp, sizeof(VkCompareOp));
23142 *streamPtrPtr += sizeof(VkCompareOp);
23143 ++encodeCount;
23144 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23145 pool->freeAll();
23146 stream->clearPool();
23147 }
23148 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23149 }
23150
23151 #endif
23152 #ifdef VK_EXT_host_image_copy
vkCopyMemoryToImageEXT(VkDevice device,const VkCopyMemoryToImageInfoEXT * pCopyMemoryToImageInfo,uint32_t doLock)23153 VkResult VkEncoder::vkCopyMemoryToImageEXT(VkDevice device,
23154 const VkCopyMemoryToImageInfoEXT* pCopyMemoryToImageInfo,
23155 uint32_t doLock) {
23156 (void)doLock;
23157 bool queueSubmitWithCommandsEnabled =
23158 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23159 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23160 auto stream = mImpl->stream();
23161 auto pool = mImpl->pool();
23162 VkDevice local_device;
23163 VkCopyMemoryToImageInfoEXT* local_pCopyMemoryToImageInfo;
23164 local_device = device;
23165 local_pCopyMemoryToImageInfo = nullptr;
23166 if (pCopyMemoryToImageInfo) {
23167 local_pCopyMemoryToImageInfo =
23168 (VkCopyMemoryToImageInfoEXT*)pool->alloc(sizeof(const VkCopyMemoryToImageInfoEXT));
23169 deepcopy_VkCopyMemoryToImageInfoEXT(
23170 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyMemoryToImageInfo,
23171 (VkCopyMemoryToImageInfoEXT*)(local_pCopyMemoryToImageInfo));
23172 }
23173 if (local_pCopyMemoryToImageInfo) {
23174 transform_tohost_VkCopyMemoryToImageInfoEXT(
23175 sResourceTracker, (VkCopyMemoryToImageInfoEXT*)(local_pCopyMemoryToImageInfo));
23176 }
23177 size_t count = 0;
23178 size_t* countPtr = &count;
23179 {
23180 uint64_t cgen_var_0;
23181 *countPtr += 1 * 8;
23182 count_VkCopyMemoryToImageInfoEXT(
23183 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23184 (VkCopyMemoryToImageInfoEXT*)(local_pCopyMemoryToImageInfo), countPtr);
23185 }
23186 uint32_t packetSize_vkCopyMemoryToImageEXT =
23187 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
23188 uint8_t* streamPtr = stream->reserve(packetSize_vkCopyMemoryToImageEXT);
23189 uint8_t* packetBeginPtr = streamPtr;
23190 uint8_t** streamPtrPtr = &streamPtr;
23191 uint32_t opcode_vkCopyMemoryToImageEXT = OP_vkCopyMemoryToImageEXT;
23192 uint32_t seqno;
23193 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
23194 memcpy(streamPtr, &opcode_vkCopyMemoryToImageEXT, sizeof(uint32_t));
23195 streamPtr += sizeof(uint32_t);
23196 memcpy(streamPtr, &packetSize_vkCopyMemoryToImageEXT, sizeof(uint32_t));
23197 streamPtr += sizeof(uint32_t);
23198 if (queueSubmitWithCommandsEnabled) {
23199 memcpy(streamPtr, &seqno, sizeof(uint32_t));
23200 streamPtr += sizeof(uint32_t);
23201 }
23202 uint64_t cgen_var_0;
23203 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
23204 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23205 *streamPtrPtr += 1 * 8;
23206 reservedmarshal_VkCopyMemoryToImageInfoEXT(
23207 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23208 (VkCopyMemoryToImageInfoEXT*)(local_pCopyMemoryToImageInfo), streamPtrPtr);
23209 VkResult vkCopyMemoryToImageEXT_VkResult_return = (VkResult)0;
23210 stream->read(&vkCopyMemoryToImageEXT_VkResult_return, sizeof(VkResult));
23211 ++encodeCount;
23212 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23213 pool->freeAll();
23214 stream->clearPool();
23215 }
23216 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23217 return vkCopyMemoryToImageEXT_VkResult_return;
23218 }
23219
vkCopyImageToMemoryEXT(VkDevice device,const VkCopyImageToMemoryInfoEXT * pCopyImageToMemoryInfo,uint32_t doLock)23220 VkResult VkEncoder::vkCopyImageToMemoryEXT(VkDevice device,
23221 const VkCopyImageToMemoryInfoEXT* pCopyImageToMemoryInfo,
23222 uint32_t doLock) {
23223 (void)doLock;
23224 bool queueSubmitWithCommandsEnabled =
23225 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23226 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23227 auto stream = mImpl->stream();
23228 auto pool = mImpl->pool();
23229 VkDevice local_device;
23230 VkCopyImageToMemoryInfoEXT* local_pCopyImageToMemoryInfo;
23231 local_device = device;
23232 local_pCopyImageToMemoryInfo = nullptr;
23233 if (pCopyImageToMemoryInfo) {
23234 local_pCopyImageToMemoryInfo =
23235 (VkCopyImageToMemoryInfoEXT*)pool->alloc(sizeof(const VkCopyImageToMemoryInfoEXT));
23236 deepcopy_VkCopyImageToMemoryInfoEXT(
23237 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageToMemoryInfo,
23238 (VkCopyImageToMemoryInfoEXT*)(local_pCopyImageToMemoryInfo));
23239 }
23240 if (local_pCopyImageToMemoryInfo) {
23241 transform_tohost_VkCopyImageToMemoryInfoEXT(
23242 sResourceTracker, (VkCopyImageToMemoryInfoEXT*)(local_pCopyImageToMemoryInfo));
23243 }
23244 size_t count = 0;
23245 size_t* countPtr = &count;
23246 {
23247 uint64_t cgen_var_0;
23248 *countPtr += 1 * 8;
23249 count_VkCopyImageToMemoryInfoEXT(
23250 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23251 (VkCopyImageToMemoryInfoEXT*)(local_pCopyImageToMemoryInfo), countPtr);
23252 }
23253 uint32_t packetSize_vkCopyImageToMemoryEXT =
23254 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
23255 uint8_t* streamPtr = stream->reserve(packetSize_vkCopyImageToMemoryEXT);
23256 uint8_t* packetBeginPtr = streamPtr;
23257 uint8_t** streamPtrPtr = &streamPtr;
23258 uint32_t opcode_vkCopyImageToMemoryEXT = OP_vkCopyImageToMemoryEXT;
23259 uint32_t seqno;
23260 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
23261 memcpy(streamPtr, &opcode_vkCopyImageToMemoryEXT, sizeof(uint32_t));
23262 streamPtr += sizeof(uint32_t);
23263 memcpy(streamPtr, &packetSize_vkCopyImageToMemoryEXT, sizeof(uint32_t));
23264 streamPtr += sizeof(uint32_t);
23265 if (queueSubmitWithCommandsEnabled) {
23266 memcpy(streamPtr, &seqno, sizeof(uint32_t));
23267 streamPtr += sizeof(uint32_t);
23268 }
23269 uint64_t cgen_var_0;
23270 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
23271 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23272 *streamPtrPtr += 1 * 8;
23273 reservedmarshal_VkCopyImageToMemoryInfoEXT(
23274 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23275 (VkCopyImageToMemoryInfoEXT*)(local_pCopyImageToMemoryInfo), streamPtrPtr);
23276 VkResult vkCopyImageToMemoryEXT_VkResult_return = (VkResult)0;
23277 stream->read(&vkCopyImageToMemoryEXT_VkResult_return, sizeof(VkResult));
23278 ++encodeCount;
23279 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23280 pool->freeAll();
23281 stream->clearPool();
23282 }
23283 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23284 return vkCopyImageToMemoryEXT_VkResult_return;
23285 }
23286
vkCopyImageToImageEXT(VkDevice device,const VkCopyImageToImageInfoEXT * pCopyImageToImageInfo,uint32_t doLock)23287 VkResult VkEncoder::vkCopyImageToImageEXT(VkDevice device,
23288 const VkCopyImageToImageInfoEXT* pCopyImageToImageInfo,
23289 uint32_t doLock) {
23290 (void)doLock;
23291 bool queueSubmitWithCommandsEnabled =
23292 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23293 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23294 auto stream = mImpl->stream();
23295 auto pool = mImpl->pool();
23296 VkDevice local_device;
23297 VkCopyImageToImageInfoEXT* local_pCopyImageToImageInfo;
23298 local_device = device;
23299 local_pCopyImageToImageInfo = nullptr;
23300 if (pCopyImageToImageInfo) {
23301 local_pCopyImageToImageInfo =
23302 (VkCopyImageToImageInfoEXT*)pool->alloc(sizeof(const VkCopyImageToImageInfoEXT));
23303 deepcopy_VkCopyImageToImageInfoEXT(
23304 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageToImageInfo,
23305 (VkCopyImageToImageInfoEXT*)(local_pCopyImageToImageInfo));
23306 }
23307 if (local_pCopyImageToImageInfo) {
23308 transform_tohost_VkCopyImageToImageInfoEXT(
23309 sResourceTracker, (VkCopyImageToImageInfoEXT*)(local_pCopyImageToImageInfo));
23310 }
23311 size_t count = 0;
23312 size_t* countPtr = &count;
23313 {
23314 uint64_t cgen_var_0;
23315 *countPtr += 1 * 8;
23316 count_VkCopyImageToImageInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23317 (VkCopyImageToImageInfoEXT*)(local_pCopyImageToImageInfo),
23318 countPtr);
23319 }
23320 uint32_t packetSize_vkCopyImageToImageEXT =
23321 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
23322 uint8_t* streamPtr = stream->reserve(packetSize_vkCopyImageToImageEXT);
23323 uint8_t* packetBeginPtr = streamPtr;
23324 uint8_t** streamPtrPtr = &streamPtr;
23325 uint32_t opcode_vkCopyImageToImageEXT = OP_vkCopyImageToImageEXT;
23326 uint32_t seqno;
23327 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
23328 memcpy(streamPtr, &opcode_vkCopyImageToImageEXT, sizeof(uint32_t));
23329 streamPtr += sizeof(uint32_t);
23330 memcpy(streamPtr, &packetSize_vkCopyImageToImageEXT, sizeof(uint32_t));
23331 streamPtr += sizeof(uint32_t);
23332 if (queueSubmitWithCommandsEnabled) {
23333 memcpy(streamPtr, &seqno, sizeof(uint32_t));
23334 streamPtr += sizeof(uint32_t);
23335 }
23336 uint64_t cgen_var_0;
23337 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
23338 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23339 *streamPtrPtr += 1 * 8;
23340 reservedmarshal_VkCopyImageToImageInfoEXT(
23341 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23342 (VkCopyImageToImageInfoEXT*)(local_pCopyImageToImageInfo), streamPtrPtr);
23343 VkResult vkCopyImageToImageEXT_VkResult_return = (VkResult)0;
23344 stream->read(&vkCopyImageToImageEXT_VkResult_return, sizeof(VkResult));
23345 ++encodeCount;
23346 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23347 pool->freeAll();
23348 stream->clearPool();
23349 }
23350 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23351 return vkCopyImageToImageEXT_VkResult_return;
23352 }
23353
vkTransitionImageLayoutEXT(VkDevice device,uint32_t transitionCount,const VkHostImageLayoutTransitionInfoEXT * pTransitions,uint32_t doLock)23354 VkResult VkEncoder::vkTransitionImageLayoutEXT(
23355 VkDevice device, uint32_t transitionCount,
23356 const VkHostImageLayoutTransitionInfoEXT* pTransitions, uint32_t doLock) {
23357 (void)doLock;
23358 bool queueSubmitWithCommandsEnabled =
23359 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23360 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23361 auto stream = mImpl->stream();
23362 auto pool = mImpl->pool();
23363 VkDevice local_device;
23364 uint32_t local_transitionCount;
23365 VkHostImageLayoutTransitionInfoEXT* local_pTransitions;
23366 local_device = device;
23367 local_transitionCount = transitionCount;
23368 local_pTransitions = nullptr;
23369 if (pTransitions) {
23370 local_pTransitions = (VkHostImageLayoutTransitionInfoEXT*)pool->alloc(
23371 ((transitionCount)) * sizeof(const VkHostImageLayoutTransitionInfoEXT));
23372 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
23373 deepcopy_VkHostImageLayoutTransitionInfoEXT(
23374 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pTransitions + i,
23375 (VkHostImageLayoutTransitionInfoEXT*)(local_pTransitions + i));
23376 }
23377 }
23378 if (local_pTransitions) {
23379 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
23380 transform_tohost_VkHostImageLayoutTransitionInfoEXT(
23381 sResourceTracker, (VkHostImageLayoutTransitionInfoEXT*)(local_pTransitions + i));
23382 }
23383 }
23384 size_t count = 0;
23385 size_t* countPtr = &count;
23386 {
23387 uint64_t cgen_var_0;
23388 *countPtr += 1 * 8;
23389 *countPtr += sizeof(uint32_t);
23390 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
23391 count_VkHostImageLayoutTransitionInfoEXT(
23392 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23393 (VkHostImageLayoutTransitionInfoEXT*)(local_pTransitions + i), countPtr);
23394 }
23395 }
23396 uint32_t packetSize_vkTransitionImageLayoutEXT =
23397 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
23398 uint8_t* streamPtr = stream->reserve(packetSize_vkTransitionImageLayoutEXT);
23399 uint8_t* packetBeginPtr = streamPtr;
23400 uint8_t** streamPtrPtr = &streamPtr;
23401 uint32_t opcode_vkTransitionImageLayoutEXT = OP_vkTransitionImageLayoutEXT;
23402 uint32_t seqno;
23403 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
23404 memcpy(streamPtr, &opcode_vkTransitionImageLayoutEXT, sizeof(uint32_t));
23405 streamPtr += sizeof(uint32_t);
23406 memcpy(streamPtr, &packetSize_vkTransitionImageLayoutEXT, sizeof(uint32_t));
23407 streamPtr += sizeof(uint32_t);
23408 if (queueSubmitWithCommandsEnabled) {
23409 memcpy(streamPtr, &seqno, sizeof(uint32_t));
23410 streamPtr += sizeof(uint32_t);
23411 }
23412 uint64_t cgen_var_0;
23413 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
23414 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23415 *streamPtrPtr += 1 * 8;
23416 memcpy(*streamPtrPtr, (uint32_t*)&local_transitionCount, sizeof(uint32_t));
23417 *streamPtrPtr += sizeof(uint32_t);
23418 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
23419 reservedmarshal_VkHostImageLayoutTransitionInfoEXT(
23420 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23421 (VkHostImageLayoutTransitionInfoEXT*)(local_pTransitions + i), streamPtrPtr);
23422 }
23423 VkResult vkTransitionImageLayoutEXT_VkResult_return = (VkResult)0;
23424 stream->read(&vkTransitionImageLayoutEXT_VkResult_return, sizeof(VkResult));
23425 ++encodeCount;
23426 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23427 pool->freeAll();
23428 stream->clearPool();
23429 }
23430 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23431 return vkTransitionImageLayoutEXT_VkResult_return;
23432 }
23433
vkGetImageSubresourceLayout2EXT(VkDevice device,VkImage image,const VkImageSubresource2KHR * pSubresource,VkSubresourceLayout2KHR * pLayout,uint32_t doLock)23434 void VkEncoder::vkGetImageSubresourceLayout2EXT(VkDevice device, VkImage image,
23435 const VkImageSubresource2KHR* pSubresource,
23436 VkSubresourceLayout2KHR* pLayout, uint32_t doLock) {
23437 (void)doLock;
23438 bool queueSubmitWithCommandsEnabled =
23439 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23440 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23441 auto stream = mImpl->stream();
23442 auto pool = mImpl->pool();
23443 VkDevice local_device;
23444 VkImage local_image;
23445 VkImageSubresource2KHR* local_pSubresource;
23446 local_device = device;
23447 local_image = image;
23448 local_pSubresource = nullptr;
23449 if (pSubresource) {
23450 local_pSubresource =
23451 (VkImageSubresource2KHR*)pool->alloc(sizeof(const VkImageSubresource2KHR));
23452 deepcopy_VkImageSubresource2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubresource,
23453 (VkImageSubresource2KHR*)(local_pSubresource));
23454 }
23455 if (local_pSubresource) {
23456 transform_tohost_VkImageSubresource2KHR(sResourceTracker,
23457 (VkImageSubresource2KHR*)(local_pSubresource));
23458 }
23459 size_t count = 0;
23460 size_t* countPtr = &count;
23461 {
23462 uint64_t cgen_var_0;
23463 *countPtr += 1 * 8;
23464 uint64_t cgen_var_1;
23465 *countPtr += 1 * 8;
23466 count_VkImageSubresource2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23467 (VkImageSubresource2KHR*)(local_pSubresource), countPtr);
23468 count_VkSubresourceLayout2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23469 (VkSubresourceLayout2KHR*)(pLayout), countPtr);
23470 }
23471 uint32_t packetSize_vkGetImageSubresourceLayout2EXT =
23472 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
23473 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageSubresourceLayout2EXT);
23474 uint8_t* packetBeginPtr = streamPtr;
23475 uint8_t** streamPtrPtr = &streamPtr;
23476 uint32_t opcode_vkGetImageSubresourceLayout2EXT = OP_vkGetImageSubresourceLayout2EXT;
23477 uint32_t seqno;
23478 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
23479 memcpy(streamPtr, &opcode_vkGetImageSubresourceLayout2EXT, sizeof(uint32_t));
23480 streamPtr += sizeof(uint32_t);
23481 memcpy(streamPtr, &packetSize_vkGetImageSubresourceLayout2EXT, sizeof(uint32_t));
23482 streamPtr += sizeof(uint32_t);
23483 if (queueSubmitWithCommandsEnabled) {
23484 memcpy(streamPtr, &seqno, sizeof(uint32_t));
23485 streamPtr += sizeof(uint32_t);
23486 }
23487 uint64_t cgen_var_0;
23488 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
23489 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23490 *streamPtrPtr += 1 * 8;
23491 uint64_t cgen_var_1;
23492 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
23493 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
23494 *streamPtrPtr += 1 * 8;
23495 reservedmarshal_VkImageSubresource2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23496 (VkImageSubresource2KHR*)(local_pSubresource),
23497 streamPtrPtr);
23498 reservedmarshal_VkSubresourceLayout2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23499 (VkSubresourceLayout2KHR*)(pLayout), streamPtrPtr);
23500 unmarshal_VkSubresourceLayout2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23501 (VkSubresourceLayout2KHR*)(pLayout));
23502 if (pLayout) {
23503 transform_fromhost_VkSubresourceLayout2KHR(sResourceTracker,
23504 (VkSubresourceLayout2KHR*)(pLayout));
23505 }
23506 ++encodeCount;
23507 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23508 pool->freeAll();
23509 stream->clearPool();
23510 }
23511 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23512 }
23513
23514 #endif
23515 #ifdef VK_EXT_private_data
vkCreatePrivateDataSlotEXT(VkDevice device,const VkPrivateDataSlotCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPrivateDataSlot * pPrivateDataSlot,uint32_t doLock)23516 VkResult VkEncoder::vkCreatePrivateDataSlotEXT(VkDevice device,
23517 const VkPrivateDataSlotCreateInfo* pCreateInfo,
23518 const VkAllocationCallbacks* pAllocator,
23519 VkPrivateDataSlot* pPrivateDataSlot,
23520 uint32_t doLock) {
23521 (void)doLock;
23522 bool queueSubmitWithCommandsEnabled =
23523 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23524 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23525 auto stream = mImpl->stream();
23526 auto pool = mImpl->pool();
23527 VkDevice local_device;
23528 VkPrivateDataSlotCreateInfo* local_pCreateInfo;
23529 VkAllocationCallbacks* local_pAllocator;
23530 local_device = device;
23531 local_pCreateInfo = nullptr;
23532 if (pCreateInfo) {
23533 local_pCreateInfo =
23534 (VkPrivateDataSlotCreateInfo*)pool->alloc(sizeof(const VkPrivateDataSlotCreateInfo));
23535 deepcopy_VkPrivateDataSlotCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
23536 (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo));
23537 }
23538 local_pAllocator = nullptr;
23539 if (pAllocator) {
23540 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
23541 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
23542 (VkAllocationCallbacks*)(local_pAllocator));
23543 }
23544 local_pAllocator = nullptr;
23545 if (local_pCreateInfo) {
23546 transform_tohost_VkPrivateDataSlotCreateInfo(
23547 sResourceTracker, (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo));
23548 }
23549 if (local_pAllocator) {
23550 transform_tohost_VkAllocationCallbacks(sResourceTracker,
23551 (VkAllocationCallbacks*)(local_pAllocator));
23552 }
23553 size_t count = 0;
23554 size_t* countPtr = &count;
23555 {
23556 uint64_t cgen_var_0;
23557 *countPtr += 1 * 8;
23558 count_VkPrivateDataSlotCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23559 (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo),
23560 countPtr);
23561 // WARNING PTR CHECK
23562 *countPtr += 8;
23563 if (local_pAllocator) {
23564 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23565 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
23566 }
23567 uint64_t cgen_var_1;
23568 *countPtr += 8;
23569 }
23570 uint32_t packetSize_vkCreatePrivateDataSlotEXT =
23571 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
23572 uint8_t* streamPtr = stream->reserve(packetSize_vkCreatePrivateDataSlotEXT);
23573 uint8_t* packetBeginPtr = streamPtr;
23574 uint8_t** streamPtrPtr = &streamPtr;
23575 uint32_t opcode_vkCreatePrivateDataSlotEXT = OP_vkCreatePrivateDataSlotEXT;
23576 uint32_t seqno;
23577 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
23578 memcpy(streamPtr, &opcode_vkCreatePrivateDataSlotEXT, sizeof(uint32_t));
23579 streamPtr += sizeof(uint32_t);
23580 memcpy(streamPtr, &packetSize_vkCreatePrivateDataSlotEXT, sizeof(uint32_t));
23581 streamPtr += sizeof(uint32_t);
23582 if (queueSubmitWithCommandsEnabled) {
23583 memcpy(streamPtr, &seqno, sizeof(uint32_t));
23584 streamPtr += sizeof(uint32_t);
23585 }
23586 uint64_t cgen_var_0;
23587 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
23588 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23589 *streamPtrPtr += 1 * 8;
23590 reservedmarshal_VkPrivateDataSlotCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23591 (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo),
23592 streamPtrPtr);
23593 // WARNING PTR CHECK
23594 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
23595 memcpy((*streamPtrPtr), &cgen_var_1, 8);
23596 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
23597 *streamPtrPtr += 8;
23598 if (local_pAllocator) {
23599 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23600 (VkAllocationCallbacks*)(local_pAllocator),
23601 streamPtrPtr);
23602 }
23603 /* is handle, possibly out */;
23604 uint64_t cgen_var_2;
23605 *&cgen_var_2 = (uint64_t)((*pPrivateDataSlot));
23606 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
23607 *streamPtrPtr += 8;
23608 /* is handle, possibly out */;
23609 uint64_t cgen_var_3;
23610 stream->read((uint64_t*)&cgen_var_3, 8);
23611 stream->handleMapping()->mapHandles_u64_VkPrivateDataSlot(
23612 &cgen_var_3, (VkPrivateDataSlot*)pPrivateDataSlot, 1);
23613 VkResult vkCreatePrivateDataSlotEXT_VkResult_return = (VkResult)0;
23614 stream->read(&vkCreatePrivateDataSlotEXT_VkResult_return, sizeof(VkResult));
23615 ++encodeCount;
23616 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23617 pool->freeAll();
23618 stream->clearPool();
23619 }
23620 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23621 return vkCreatePrivateDataSlotEXT_VkResult_return;
23622 }
23623
vkDestroyPrivateDataSlotEXT(VkDevice device,VkPrivateDataSlot privateDataSlot,const VkAllocationCallbacks * pAllocator,uint32_t doLock)23624 void VkEncoder::vkDestroyPrivateDataSlotEXT(VkDevice device, VkPrivateDataSlot privateDataSlot,
23625 const VkAllocationCallbacks* pAllocator,
23626 uint32_t doLock) {
23627 (void)doLock;
23628 bool queueSubmitWithCommandsEnabled =
23629 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23630 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23631 auto stream = mImpl->stream();
23632 auto pool = mImpl->pool();
23633 VkDevice local_device;
23634 VkPrivateDataSlot local_privateDataSlot;
23635 VkAllocationCallbacks* local_pAllocator;
23636 local_device = device;
23637 local_privateDataSlot = privateDataSlot;
23638 local_pAllocator = nullptr;
23639 if (pAllocator) {
23640 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
23641 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
23642 (VkAllocationCallbacks*)(local_pAllocator));
23643 }
23644 local_pAllocator = nullptr;
23645 if (local_pAllocator) {
23646 transform_tohost_VkAllocationCallbacks(sResourceTracker,
23647 (VkAllocationCallbacks*)(local_pAllocator));
23648 }
23649 size_t count = 0;
23650 size_t* countPtr = &count;
23651 {
23652 uint64_t cgen_var_0;
23653 *countPtr += 1 * 8;
23654 uint64_t cgen_var_1;
23655 *countPtr += 1 * 8;
23656 // WARNING PTR CHECK
23657 *countPtr += 8;
23658 if (local_pAllocator) {
23659 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23660 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
23661 }
23662 }
23663 uint32_t packetSize_vkDestroyPrivateDataSlotEXT =
23664 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
23665 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyPrivateDataSlotEXT);
23666 uint8_t* packetBeginPtr = streamPtr;
23667 uint8_t** streamPtrPtr = &streamPtr;
23668 uint32_t opcode_vkDestroyPrivateDataSlotEXT = OP_vkDestroyPrivateDataSlotEXT;
23669 uint32_t seqno;
23670 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
23671 memcpy(streamPtr, &opcode_vkDestroyPrivateDataSlotEXT, sizeof(uint32_t));
23672 streamPtr += sizeof(uint32_t);
23673 memcpy(streamPtr, &packetSize_vkDestroyPrivateDataSlotEXT, sizeof(uint32_t));
23674 streamPtr += sizeof(uint32_t);
23675 if (queueSubmitWithCommandsEnabled) {
23676 memcpy(streamPtr, &seqno, sizeof(uint32_t));
23677 streamPtr += sizeof(uint32_t);
23678 }
23679 uint64_t cgen_var_0;
23680 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
23681 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23682 *streamPtrPtr += 1 * 8;
23683 uint64_t cgen_var_1;
23684 *&cgen_var_1 = get_host_u64_VkPrivateDataSlot((*&local_privateDataSlot));
23685 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
23686 *streamPtrPtr += 1 * 8;
23687 // WARNING PTR CHECK
23688 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
23689 memcpy((*streamPtrPtr), &cgen_var_2, 8);
23690 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
23691 *streamPtrPtr += 8;
23692 if (local_pAllocator) {
23693 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23694 (VkAllocationCallbacks*)(local_pAllocator),
23695 streamPtrPtr);
23696 }
23697 stream->flush();
23698 ++encodeCount;
23699 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23700 pool->freeAll();
23701 stream->clearPool();
23702 }
23703 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23704 }
23705
vkSetPrivateDataEXT(VkDevice device,VkObjectType objectType,uint64_t objectHandle,VkPrivateDataSlot privateDataSlot,uint64_t data,uint32_t doLock)23706 VkResult VkEncoder::vkSetPrivateDataEXT(VkDevice device, VkObjectType objectType,
23707 uint64_t objectHandle, VkPrivateDataSlot privateDataSlot,
23708 uint64_t data, uint32_t doLock) {
23709 (void)doLock;
23710 bool queueSubmitWithCommandsEnabled =
23711 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23712 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23713 auto stream = mImpl->stream();
23714 auto pool = mImpl->pool();
23715 VkDevice local_device;
23716 VkObjectType local_objectType;
23717 uint64_t local_objectHandle;
23718 VkPrivateDataSlot local_privateDataSlot;
23719 uint64_t local_data;
23720 local_device = device;
23721 local_objectType = objectType;
23722 local_objectHandle = objectHandle;
23723 local_privateDataSlot = privateDataSlot;
23724 local_data = data;
23725 size_t count = 0;
23726 size_t* countPtr = &count;
23727 {
23728 uint64_t cgen_var_0;
23729 *countPtr += 1 * 8;
23730 *countPtr += sizeof(VkObjectType);
23731 *countPtr += sizeof(uint64_t);
23732 uint64_t cgen_var_1;
23733 *countPtr += 1 * 8;
23734 *countPtr += sizeof(uint64_t);
23735 }
23736 uint32_t packetSize_vkSetPrivateDataEXT =
23737 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
23738 uint8_t* streamPtr = stream->reserve(packetSize_vkSetPrivateDataEXT);
23739 uint8_t* packetBeginPtr = streamPtr;
23740 uint8_t** streamPtrPtr = &streamPtr;
23741 uint32_t opcode_vkSetPrivateDataEXT = OP_vkSetPrivateDataEXT;
23742 uint32_t seqno;
23743 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
23744 memcpy(streamPtr, &opcode_vkSetPrivateDataEXT, sizeof(uint32_t));
23745 streamPtr += sizeof(uint32_t);
23746 memcpy(streamPtr, &packetSize_vkSetPrivateDataEXT, sizeof(uint32_t));
23747 streamPtr += sizeof(uint32_t);
23748 if (queueSubmitWithCommandsEnabled) {
23749 memcpy(streamPtr, &seqno, sizeof(uint32_t));
23750 streamPtr += sizeof(uint32_t);
23751 }
23752 uint64_t cgen_var_0;
23753 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
23754 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23755 *streamPtrPtr += 1 * 8;
23756 memcpy(*streamPtrPtr, (VkObjectType*)&local_objectType, sizeof(VkObjectType));
23757 *streamPtrPtr += sizeof(VkObjectType);
23758 memcpy(*streamPtrPtr, (uint64_t*)&local_objectHandle, sizeof(uint64_t));
23759 *streamPtrPtr += sizeof(uint64_t);
23760 uint64_t cgen_var_1;
23761 *&cgen_var_1 = get_host_u64_VkPrivateDataSlot((*&local_privateDataSlot));
23762 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
23763 *streamPtrPtr += 1 * 8;
23764 memcpy(*streamPtrPtr, (uint64_t*)&local_data, sizeof(uint64_t));
23765 *streamPtrPtr += sizeof(uint64_t);
23766 VkResult vkSetPrivateDataEXT_VkResult_return = (VkResult)0;
23767 stream->read(&vkSetPrivateDataEXT_VkResult_return, sizeof(VkResult));
23768 ++encodeCount;
23769 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23770 pool->freeAll();
23771 stream->clearPool();
23772 }
23773 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23774 return vkSetPrivateDataEXT_VkResult_return;
23775 }
23776
vkGetPrivateDataEXT(VkDevice device,VkObjectType objectType,uint64_t objectHandle,VkPrivateDataSlot privateDataSlot,uint64_t * pData,uint32_t doLock)23777 void VkEncoder::vkGetPrivateDataEXT(VkDevice device, VkObjectType objectType, uint64_t objectHandle,
23778 VkPrivateDataSlot privateDataSlot, uint64_t* pData,
23779 uint32_t doLock) {
23780 (void)doLock;
23781 bool queueSubmitWithCommandsEnabled =
23782 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23783 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23784 auto stream = mImpl->stream();
23785 auto pool = mImpl->pool();
23786 VkDevice local_device;
23787 VkObjectType local_objectType;
23788 uint64_t local_objectHandle;
23789 VkPrivateDataSlot local_privateDataSlot;
23790 local_device = device;
23791 local_objectType = objectType;
23792 local_objectHandle = objectHandle;
23793 local_privateDataSlot = privateDataSlot;
23794 size_t count = 0;
23795 size_t* countPtr = &count;
23796 {
23797 uint64_t cgen_var_0;
23798 *countPtr += 1 * 8;
23799 *countPtr += sizeof(VkObjectType);
23800 *countPtr += sizeof(uint64_t);
23801 uint64_t cgen_var_1;
23802 *countPtr += 1 * 8;
23803 *countPtr += sizeof(uint64_t);
23804 }
23805 uint32_t packetSize_vkGetPrivateDataEXT =
23806 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
23807 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPrivateDataEXT);
23808 uint8_t* packetBeginPtr = streamPtr;
23809 uint8_t** streamPtrPtr = &streamPtr;
23810 uint32_t opcode_vkGetPrivateDataEXT = OP_vkGetPrivateDataEXT;
23811 uint32_t seqno;
23812 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
23813 memcpy(streamPtr, &opcode_vkGetPrivateDataEXT, sizeof(uint32_t));
23814 streamPtr += sizeof(uint32_t);
23815 memcpy(streamPtr, &packetSize_vkGetPrivateDataEXT, sizeof(uint32_t));
23816 streamPtr += sizeof(uint32_t);
23817 if (queueSubmitWithCommandsEnabled) {
23818 memcpy(streamPtr, &seqno, sizeof(uint32_t));
23819 streamPtr += sizeof(uint32_t);
23820 }
23821 uint64_t cgen_var_0;
23822 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
23823 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23824 *streamPtrPtr += 1 * 8;
23825 memcpy(*streamPtrPtr, (VkObjectType*)&local_objectType, sizeof(VkObjectType));
23826 *streamPtrPtr += sizeof(VkObjectType);
23827 memcpy(*streamPtrPtr, (uint64_t*)&local_objectHandle, sizeof(uint64_t));
23828 *streamPtrPtr += sizeof(uint64_t);
23829 uint64_t cgen_var_1;
23830 *&cgen_var_1 = get_host_u64_VkPrivateDataSlot((*&local_privateDataSlot));
23831 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
23832 *streamPtrPtr += 1 * 8;
23833 memcpy(*streamPtrPtr, (uint64_t*)pData, sizeof(uint64_t));
23834 *streamPtrPtr += sizeof(uint64_t);
23835 stream->read((uint64_t*)pData, sizeof(uint64_t));
23836 ++encodeCount;
23837 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23838 pool->freeAll();
23839 stream->clearPool();
23840 }
23841 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23842 }
23843
23844 #endif
23845 #ifdef VK_EXT_extended_dynamic_state2
vkCmdSetPatchControlPointsEXT(VkCommandBuffer commandBuffer,uint32_t patchControlPoints,uint32_t doLock)23846 void VkEncoder::vkCmdSetPatchControlPointsEXT(VkCommandBuffer commandBuffer,
23847 uint32_t patchControlPoints, uint32_t doLock) {
23848 (void)doLock;
23849 bool queueSubmitWithCommandsEnabled =
23850 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23851 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23852 auto stream = mImpl->stream();
23853 auto pool = mImpl->pool();
23854 VkCommandBuffer local_commandBuffer;
23855 uint32_t local_patchControlPoints;
23856 local_commandBuffer = commandBuffer;
23857 local_patchControlPoints = patchControlPoints;
23858 size_t count = 0;
23859 size_t* countPtr = &count;
23860 {
23861 uint64_t cgen_var_0;
23862 *countPtr += 1 * 8;
23863 *countPtr += sizeof(uint32_t);
23864 }
23865 uint32_t packetSize_vkCmdSetPatchControlPointsEXT = 4 + 4 + count;
23866 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetPatchControlPointsEXT -= 8;
23867 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetPatchControlPointsEXT);
23868 uint8_t* packetBeginPtr = streamPtr;
23869 uint8_t** streamPtrPtr = &streamPtr;
23870 uint32_t opcode_vkCmdSetPatchControlPointsEXT = OP_vkCmdSetPatchControlPointsEXT;
23871 memcpy(streamPtr, &opcode_vkCmdSetPatchControlPointsEXT, sizeof(uint32_t));
23872 streamPtr += sizeof(uint32_t);
23873 memcpy(streamPtr, &packetSize_vkCmdSetPatchControlPointsEXT, sizeof(uint32_t));
23874 streamPtr += sizeof(uint32_t);
23875 if (!queueSubmitWithCommandsEnabled) {
23876 uint64_t cgen_var_0;
23877 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23878 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23879 *streamPtrPtr += 1 * 8;
23880 }
23881 memcpy(*streamPtrPtr, (uint32_t*)&local_patchControlPoints, sizeof(uint32_t));
23882 *streamPtrPtr += sizeof(uint32_t);
23883 ++encodeCount;
23884 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23885 pool->freeAll();
23886 stream->clearPool();
23887 }
23888 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23889 }
23890
vkCmdSetRasterizerDiscardEnableEXT(VkCommandBuffer commandBuffer,VkBool32 rasterizerDiscardEnable,uint32_t doLock)23891 void VkEncoder::vkCmdSetRasterizerDiscardEnableEXT(VkCommandBuffer commandBuffer,
23892 VkBool32 rasterizerDiscardEnable,
23893 uint32_t doLock) {
23894 (void)doLock;
23895 bool queueSubmitWithCommandsEnabled =
23896 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23897 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23898 auto stream = mImpl->stream();
23899 auto pool = mImpl->pool();
23900 VkCommandBuffer local_commandBuffer;
23901 VkBool32 local_rasterizerDiscardEnable;
23902 local_commandBuffer = commandBuffer;
23903 local_rasterizerDiscardEnable = rasterizerDiscardEnable;
23904 size_t count = 0;
23905 size_t* countPtr = &count;
23906 {
23907 uint64_t cgen_var_0;
23908 *countPtr += 1 * 8;
23909 *countPtr += sizeof(VkBool32);
23910 }
23911 uint32_t packetSize_vkCmdSetRasterizerDiscardEnableEXT = 4 + 4 + count;
23912 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetRasterizerDiscardEnableEXT -= 8;
23913 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetRasterizerDiscardEnableEXT);
23914 uint8_t* packetBeginPtr = streamPtr;
23915 uint8_t** streamPtrPtr = &streamPtr;
23916 uint32_t opcode_vkCmdSetRasterizerDiscardEnableEXT = OP_vkCmdSetRasterizerDiscardEnableEXT;
23917 memcpy(streamPtr, &opcode_vkCmdSetRasterizerDiscardEnableEXT, sizeof(uint32_t));
23918 streamPtr += sizeof(uint32_t);
23919 memcpy(streamPtr, &packetSize_vkCmdSetRasterizerDiscardEnableEXT, sizeof(uint32_t));
23920 streamPtr += sizeof(uint32_t);
23921 if (!queueSubmitWithCommandsEnabled) {
23922 uint64_t cgen_var_0;
23923 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23924 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23925 *streamPtrPtr += 1 * 8;
23926 }
23927 memcpy(*streamPtrPtr, (VkBool32*)&local_rasterizerDiscardEnable, sizeof(VkBool32));
23928 *streamPtrPtr += sizeof(VkBool32);
23929 ++encodeCount;
23930 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23931 pool->freeAll();
23932 stream->clearPool();
23933 }
23934 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23935 }
23936
vkCmdSetDepthBiasEnableEXT(VkCommandBuffer commandBuffer,VkBool32 depthBiasEnable,uint32_t doLock)23937 void VkEncoder::vkCmdSetDepthBiasEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable,
23938 uint32_t doLock) {
23939 (void)doLock;
23940 bool queueSubmitWithCommandsEnabled =
23941 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23942 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23943 auto stream = mImpl->stream();
23944 auto pool = mImpl->pool();
23945 VkCommandBuffer local_commandBuffer;
23946 VkBool32 local_depthBiasEnable;
23947 local_commandBuffer = commandBuffer;
23948 local_depthBiasEnable = depthBiasEnable;
23949 size_t count = 0;
23950 size_t* countPtr = &count;
23951 {
23952 uint64_t cgen_var_0;
23953 *countPtr += 1 * 8;
23954 *countPtr += sizeof(VkBool32);
23955 }
23956 uint32_t packetSize_vkCmdSetDepthBiasEnableEXT = 4 + 4 + count;
23957 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthBiasEnableEXT -= 8;
23958 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthBiasEnableEXT);
23959 uint8_t* packetBeginPtr = streamPtr;
23960 uint8_t** streamPtrPtr = &streamPtr;
23961 uint32_t opcode_vkCmdSetDepthBiasEnableEXT = OP_vkCmdSetDepthBiasEnableEXT;
23962 memcpy(streamPtr, &opcode_vkCmdSetDepthBiasEnableEXT, sizeof(uint32_t));
23963 streamPtr += sizeof(uint32_t);
23964 memcpy(streamPtr, &packetSize_vkCmdSetDepthBiasEnableEXT, sizeof(uint32_t));
23965 streamPtr += sizeof(uint32_t);
23966 if (!queueSubmitWithCommandsEnabled) {
23967 uint64_t cgen_var_0;
23968 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23969 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23970 *streamPtrPtr += 1 * 8;
23971 }
23972 memcpy(*streamPtrPtr, (VkBool32*)&local_depthBiasEnable, sizeof(VkBool32));
23973 *streamPtrPtr += sizeof(VkBool32);
23974 ++encodeCount;
23975 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23976 pool->freeAll();
23977 stream->clearPool();
23978 }
23979 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23980 }
23981
vkCmdSetLogicOpEXT(VkCommandBuffer commandBuffer,VkLogicOp logicOp,uint32_t doLock)23982 void VkEncoder::vkCmdSetLogicOpEXT(VkCommandBuffer commandBuffer, VkLogicOp logicOp,
23983 uint32_t doLock) {
23984 (void)doLock;
23985 bool queueSubmitWithCommandsEnabled =
23986 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23987 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23988 auto stream = mImpl->stream();
23989 auto pool = mImpl->pool();
23990 VkCommandBuffer local_commandBuffer;
23991 VkLogicOp local_logicOp;
23992 local_commandBuffer = commandBuffer;
23993 local_logicOp = logicOp;
23994 size_t count = 0;
23995 size_t* countPtr = &count;
23996 {
23997 uint64_t cgen_var_0;
23998 *countPtr += 1 * 8;
23999 *countPtr += sizeof(VkLogicOp);
24000 }
24001 uint32_t packetSize_vkCmdSetLogicOpEXT = 4 + 4 + count;
24002 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetLogicOpEXT -= 8;
24003 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetLogicOpEXT);
24004 uint8_t* packetBeginPtr = streamPtr;
24005 uint8_t** streamPtrPtr = &streamPtr;
24006 uint32_t opcode_vkCmdSetLogicOpEXT = OP_vkCmdSetLogicOpEXT;
24007 memcpy(streamPtr, &opcode_vkCmdSetLogicOpEXT, sizeof(uint32_t));
24008 streamPtr += sizeof(uint32_t);
24009 memcpy(streamPtr, &packetSize_vkCmdSetLogicOpEXT, sizeof(uint32_t));
24010 streamPtr += sizeof(uint32_t);
24011 if (!queueSubmitWithCommandsEnabled) {
24012 uint64_t cgen_var_0;
24013 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24014 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24015 *streamPtrPtr += 1 * 8;
24016 }
24017 memcpy(*streamPtrPtr, (VkLogicOp*)&local_logicOp, sizeof(VkLogicOp));
24018 *streamPtrPtr += sizeof(VkLogicOp);
24019 ++encodeCount;
24020 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24021 pool->freeAll();
24022 stream->clearPool();
24023 }
24024 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24025 }
24026
vkCmdSetPrimitiveRestartEnableEXT(VkCommandBuffer commandBuffer,VkBool32 primitiveRestartEnable,uint32_t doLock)24027 void VkEncoder::vkCmdSetPrimitiveRestartEnableEXT(VkCommandBuffer commandBuffer,
24028 VkBool32 primitiveRestartEnable,
24029 uint32_t doLock) {
24030 (void)doLock;
24031 bool queueSubmitWithCommandsEnabled =
24032 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24033 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24034 auto stream = mImpl->stream();
24035 auto pool = mImpl->pool();
24036 VkCommandBuffer local_commandBuffer;
24037 VkBool32 local_primitiveRestartEnable;
24038 local_commandBuffer = commandBuffer;
24039 local_primitiveRestartEnable = primitiveRestartEnable;
24040 size_t count = 0;
24041 size_t* countPtr = &count;
24042 {
24043 uint64_t cgen_var_0;
24044 *countPtr += 1 * 8;
24045 *countPtr += sizeof(VkBool32);
24046 }
24047 uint32_t packetSize_vkCmdSetPrimitiveRestartEnableEXT = 4 + 4 + count;
24048 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetPrimitiveRestartEnableEXT -= 8;
24049 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetPrimitiveRestartEnableEXT);
24050 uint8_t* packetBeginPtr = streamPtr;
24051 uint8_t** streamPtrPtr = &streamPtr;
24052 uint32_t opcode_vkCmdSetPrimitiveRestartEnableEXT = OP_vkCmdSetPrimitiveRestartEnableEXT;
24053 memcpy(streamPtr, &opcode_vkCmdSetPrimitiveRestartEnableEXT, sizeof(uint32_t));
24054 streamPtr += sizeof(uint32_t);
24055 memcpy(streamPtr, &packetSize_vkCmdSetPrimitiveRestartEnableEXT, sizeof(uint32_t));
24056 streamPtr += sizeof(uint32_t);
24057 if (!queueSubmitWithCommandsEnabled) {
24058 uint64_t cgen_var_0;
24059 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24060 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24061 *streamPtrPtr += 1 * 8;
24062 }
24063 memcpy(*streamPtrPtr, (VkBool32*)&local_primitiveRestartEnable, sizeof(VkBool32));
24064 *streamPtrPtr += sizeof(VkBool32);
24065 ++encodeCount;
24066 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24067 pool->freeAll();
24068 stream->clearPool();
24069 }
24070 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24071 }
24072
24073 #endif
24074 #ifdef VK_EXT_color_write_enable
vkCmdSetColorWriteEnableEXT(VkCommandBuffer commandBuffer,uint32_t attachmentCount,const VkBool32 * pColorWriteEnables,uint32_t doLock)24075 void VkEncoder::vkCmdSetColorWriteEnableEXT(VkCommandBuffer commandBuffer, uint32_t attachmentCount,
24076 const VkBool32* pColorWriteEnables, uint32_t doLock) {
24077 (void)doLock;
24078 bool queueSubmitWithCommandsEnabled =
24079 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24080 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24081 auto stream = mImpl->stream();
24082 auto pool = mImpl->pool();
24083 VkCommandBuffer local_commandBuffer;
24084 uint32_t local_attachmentCount;
24085 VkBool32* local_pColorWriteEnables;
24086 local_commandBuffer = commandBuffer;
24087 local_attachmentCount = attachmentCount;
24088 // Avoiding deepcopy for pColorWriteEnables
24089 local_pColorWriteEnables = (VkBool32*)pColorWriteEnables;
24090 size_t count = 0;
24091 size_t* countPtr = &count;
24092 {
24093 uint64_t cgen_var_0;
24094 *countPtr += 1 * 8;
24095 *countPtr += sizeof(uint32_t);
24096 *countPtr += ((attachmentCount)) * sizeof(VkBool32);
24097 }
24098 uint32_t packetSize_vkCmdSetColorWriteEnableEXT = 4 + 4 + count;
24099 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetColorWriteEnableEXT -= 8;
24100 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetColorWriteEnableEXT);
24101 uint8_t* packetBeginPtr = streamPtr;
24102 uint8_t** streamPtrPtr = &streamPtr;
24103 uint32_t opcode_vkCmdSetColorWriteEnableEXT = OP_vkCmdSetColorWriteEnableEXT;
24104 memcpy(streamPtr, &opcode_vkCmdSetColorWriteEnableEXT, sizeof(uint32_t));
24105 streamPtr += sizeof(uint32_t);
24106 memcpy(streamPtr, &packetSize_vkCmdSetColorWriteEnableEXT, sizeof(uint32_t));
24107 streamPtr += sizeof(uint32_t);
24108 if (!queueSubmitWithCommandsEnabled) {
24109 uint64_t cgen_var_0;
24110 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24111 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24112 *streamPtrPtr += 1 * 8;
24113 }
24114 memcpy(*streamPtrPtr, (uint32_t*)&local_attachmentCount, sizeof(uint32_t));
24115 *streamPtrPtr += sizeof(uint32_t);
24116 memcpy(*streamPtrPtr, (VkBool32*)local_pColorWriteEnables,
24117 ((attachmentCount)) * sizeof(VkBool32));
24118 *streamPtrPtr += ((attachmentCount)) * sizeof(VkBool32);
24119 ++encodeCount;
24120 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24121 pool->freeAll();
24122 stream->clearPool();
24123 }
24124 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24125 }
24126
24127 #endif
24128 #ifdef VK_GOOGLE_gfxstream
vkMapMemoryIntoAddressSpaceGOOGLE(VkDevice device,VkDeviceMemory memory,uint64_t * pAddress,uint32_t doLock)24129 VkResult VkEncoder::vkMapMemoryIntoAddressSpaceGOOGLE(VkDevice device, VkDeviceMemory memory,
24130 uint64_t* pAddress, uint32_t doLock) {
24131 (void)doLock;
24132 bool queueSubmitWithCommandsEnabled =
24133 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24134 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24135 sResourceTracker->on_vkMapMemoryIntoAddressSpaceGOOGLE_pre(this, VK_SUCCESS, device, memory,
24136 pAddress);
24137 auto stream = mImpl->stream();
24138 auto pool = mImpl->pool();
24139 VkDevice local_device;
24140 VkDeviceMemory local_memory;
24141 local_device = device;
24142 local_memory = memory;
24143 sResourceTracker->deviceMemoryTransform_tohost(
24144 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0,
24145 (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
24146 size_t count = 0;
24147 size_t* countPtr = &count;
24148 {
24149 uint64_t cgen_var_0;
24150 *countPtr += 1 * 8;
24151 uint64_t cgen_var_1;
24152 *countPtr += 1 * 8;
24153 // WARNING PTR CHECK
24154 *countPtr += 8;
24155 if (pAddress) {
24156 *countPtr += sizeof(uint64_t);
24157 }
24158 }
24159 uint32_t packetSize_vkMapMemoryIntoAddressSpaceGOOGLE =
24160 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24161 uint8_t* streamPtr = stream->reserve(packetSize_vkMapMemoryIntoAddressSpaceGOOGLE);
24162 uint8_t* packetBeginPtr = streamPtr;
24163 uint8_t** streamPtrPtr = &streamPtr;
24164 uint32_t opcode_vkMapMemoryIntoAddressSpaceGOOGLE = OP_vkMapMemoryIntoAddressSpaceGOOGLE;
24165 uint32_t seqno;
24166 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24167 memcpy(streamPtr, &opcode_vkMapMemoryIntoAddressSpaceGOOGLE, sizeof(uint32_t));
24168 streamPtr += sizeof(uint32_t);
24169 memcpy(streamPtr, &packetSize_vkMapMemoryIntoAddressSpaceGOOGLE, sizeof(uint32_t));
24170 streamPtr += sizeof(uint32_t);
24171 if (queueSubmitWithCommandsEnabled) {
24172 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24173 streamPtr += sizeof(uint32_t);
24174 }
24175 uint64_t cgen_var_0;
24176 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24177 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24178 *streamPtrPtr += 1 * 8;
24179 uint64_t cgen_var_1;
24180 *&cgen_var_1 = get_host_u64_VkDeviceMemory((*&local_memory));
24181 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
24182 *streamPtrPtr += 1 * 8;
24183 // WARNING PTR CHECK
24184 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pAddress;
24185 memcpy((*streamPtrPtr), &cgen_var_2, 8);
24186 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24187 *streamPtrPtr += 8;
24188 if (pAddress) {
24189 memcpy(*streamPtrPtr, (uint64_t*)pAddress, sizeof(uint64_t));
24190 *streamPtrPtr += sizeof(uint64_t);
24191 }
24192 // WARNING PTR CHECK
24193 uint64_t* check_pAddress;
24194 check_pAddress = (uint64_t*)(uintptr_t)stream->getBe64();
24195 if (pAddress) {
24196 if (!(check_pAddress)) {
24197 fprintf(stderr, "fatal: pAddress inconsistent between guest and host\n");
24198 }
24199 stream->read((uint64_t*)pAddress, sizeof(uint64_t));
24200 }
24201 VkResult vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return = (VkResult)0;
24202 stream->read(&vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return, sizeof(VkResult));
24203 sResourceTracker->on_vkMapMemoryIntoAddressSpaceGOOGLE(
24204 this, vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return, device, memory, pAddress);
24205 ++encodeCount;
24206 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24207 pool->freeAll();
24208 stream->clearPool();
24209 }
24210 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24211 return vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return;
24212 }
24213
vkUpdateDescriptorSetWithTemplateSizedGOOGLE(VkDevice device,VkDescriptorSet descriptorSet,VkDescriptorUpdateTemplate descriptorUpdateTemplate,uint32_t imageInfoCount,uint32_t bufferInfoCount,uint32_t bufferViewCount,const uint32_t * pImageInfoEntryIndices,const uint32_t * pBufferInfoEntryIndices,const uint32_t * pBufferViewEntryIndices,const VkDescriptorImageInfo * pImageInfos,const VkDescriptorBufferInfo * pBufferInfos,const VkBufferView * pBufferViews,uint32_t doLock)24214 void VkEncoder::vkUpdateDescriptorSetWithTemplateSizedGOOGLE(
24215 VkDevice device, VkDescriptorSet descriptorSet,
24216 VkDescriptorUpdateTemplate descriptorUpdateTemplate, uint32_t imageInfoCount,
24217 uint32_t bufferInfoCount, uint32_t bufferViewCount, const uint32_t* pImageInfoEntryIndices,
24218 const uint32_t* pBufferInfoEntryIndices, const uint32_t* pBufferViewEntryIndices,
24219 const VkDescriptorImageInfo* pImageInfos, const VkDescriptorBufferInfo* pBufferInfos,
24220 const VkBufferView* pBufferViews, uint32_t doLock) {
24221 (void)doLock;
24222 bool queueSubmitWithCommandsEnabled =
24223 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24224 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24225 auto stream = mImpl->stream();
24226 auto pool = mImpl->pool();
24227 VkDevice local_device;
24228 VkDescriptorSet local_descriptorSet;
24229 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
24230 uint32_t local_imageInfoCount;
24231 uint32_t local_bufferInfoCount;
24232 uint32_t local_bufferViewCount;
24233 uint32_t* local_pImageInfoEntryIndices;
24234 uint32_t* local_pBufferInfoEntryIndices;
24235 uint32_t* local_pBufferViewEntryIndices;
24236 VkDescriptorImageInfo* local_pImageInfos;
24237 VkDescriptorBufferInfo* local_pBufferInfos;
24238 VkBufferView* local_pBufferViews;
24239 local_device = device;
24240 local_descriptorSet = descriptorSet;
24241 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
24242 local_imageInfoCount = imageInfoCount;
24243 local_bufferInfoCount = bufferInfoCount;
24244 local_bufferViewCount = bufferViewCount;
24245 // Avoiding deepcopy for pImageInfoEntryIndices
24246 local_pImageInfoEntryIndices = (uint32_t*)pImageInfoEntryIndices;
24247 // Avoiding deepcopy for pBufferInfoEntryIndices
24248 local_pBufferInfoEntryIndices = (uint32_t*)pBufferInfoEntryIndices;
24249 // Avoiding deepcopy for pBufferViewEntryIndices
24250 local_pBufferViewEntryIndices = (uint32_t*)pBufferViewEntryIndices;
24251 local_pImageInfos = nullptr;
24252 if (pImageInfos) {
24253 local_pImageInfos = (VkDescriptorImageInfo*)pool->alloc(
24254 ((imageInfoCount)) * sizeof(const VkDescriptorImageInfo));
24255 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
24256 deepcopy_VkDescriptorImageInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageInfos + i,
24257 (VkDescriptorImageInfo*)(local_pImageInfos + i));
24258 }
24259 }
24260 local_pBufferInfos = nullptr;
24261 if (pBufferInfos) {
24262 local_pBufferInfos = (VkDescriptorBufferInfo*)pool->alloc(
24263 ((bufferInfoCount)) * sizeof(const VkDescriptorBufferInfo));
24264 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
24265 deepcopy_VkDescriptorBufferInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBufferInfos + i,
24266 (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
24267 }
24268 }
24269 // Avoiding deepcopy for pBufferViews
24270 local_pBufferViews = (VkBufferView*)pBufferViews;
24271 if (local_pImageInfos) {
24272 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
24273 transform_tohost_VkDescriptorImageInfo(sResourceTracker,
24274 (VkDescriptorImageInfo*)(local_pImageInfos + i));
24275 }
24276 }
24277 if (local_pBufferInfos) {
24278 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
24279 transform_tohost_VkDescriptorBufferInfo(
24280 sResourceTracker, (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
24281 }
24282 }
24283 size_t count = 0;
24284 size_t* countPtr = &count;
24285 {
24286 uint64_t cgen_var_0;
24287 *countPtr += 1 * 8;
24288 uint64_t cgen_var_1;
24289 *countPtr += 1 * 8;
24290 uint64_t cgen_var_2;
24291 *countPtr += 1 * 8;
24292 *countPtr += sizeof(uint32_t);
24293 *countPtr += sizeof(uint32_t);
24294 *countPtr += sizeof(uint32_t);
24295 // WARNING PTR CHECK
24296 *countPtr += 8;
24297 if (local_pImageInfoEntryIndices) {
24298 *countPtr += ((imageInfoCount)) * sizeof(uint32_t);
24299 }
24300 // WARNING PTR CHECK
24301 *countPtr += 8;
24302 if (local_pBufferInfoEntryIndices) {
24303 *countPtr += ((bufferInfoCount)) * sizeof(uint32_t);
24304 }
24305 // WARNING PTR CHECK
24306 *countPtr += 8;
24307 if (local_pBufferViewEntryIndices) {
24308 *countPtr += ((bufferViewCount)) * sizeof(uint32_t);
24309 }
24310 // WARNING PTR CHECK
24311 *countPtr += 8;
24312 if (local_pImageInfos) {
24313 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
24314 count_VkDescriptorImageInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24315 (VkDescriptorImageInfo*)(local_pImageInfos + i),
24316 countPtr);
24317 }
24318 }
24319 // WARNING PTR CHECK
24320 *countPtr += 8;
24321 if (local_pBufferInfos) {
24322 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
24323 count_VkDescriptorBufferInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24324 (VkDescriptorBufferInfo*)(local_pBufferInfos + i),
24325 countPtr);
24326 }
24327 }
24328 // WARNING PTR CHECK
24329 *countPtr += 8;
24330 if (local_pBufferViews) {
24331 if (((bufferViewCount))) {
24332 *countPtr += ((bufferViewCount)) * 8;
24333 }
24334 }
24335 }
24336 uint32_t packetSize_vkUpdateDescriptorSetWithTemplateSizedGOOGLE =
24337 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24338 uint8_t* streamPtr = stream->reserve(packetSize_vkUpdateDescriptorSetWithTemplateSizedGOOGLE);
24339 uint8_t* packetBeginPtr = streamPtr;
24340 uint8_t** streamPtrPtr = &streamPtr;
24341 uint32_t opcode_vkUpdateDescriptorSetWithTemplateSizedGOOGLE =
24342 OP_vkUpdateDescriptorSetWithTemplateSizedGOOGLE;
24343 uint32_t seqno;
24344 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24345 memcpy(streamPtr, &opcode_vkUpdateDescriptorSetWithTemplateSizedGOOGLE, sizeof(uint32_t));
24346 streamPtr += sizeof(uint32_t);
24347 memcpy(streamPtr, &packetSize_vkUpdateDescriptorSetWithTemplateSizedGOOGLE, sizeof(uint32_t));
24348 streamPtr += sizeof(uint32_t);
24349 if (queueSubmitWithCommandsEnabled) {
24350 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24351 streamPtr += sizeof(uint32_t);
24352 }
24353 uint64_t cgen_var_0;
24354 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24355 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24356 *streamPtrPtr += 1 * 8;
24357 uint64_t cgen_var_1;
24358 *&cgen_var_1 = get_host_u64_VkDescriptorSet((*&local_descriptorSet));
24359 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
24360 *streamPtrPtr += 1 * 8;
24361 uint64_t cgen_var_2;
24362 *&cgen_var_2 = get_host_u64_VkDescriptorUpdateTemplate((*&local_descriptorUpdateTemplate));
24363 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
24364 *streamPtrPtr += 1 * 8;
24365 memcpy(*streamPtrPtr, (uint32_t*)&local_imageInfoCount, sizeof(uint32_t));
24366 *streamPtrPtr += sizeof(uint32_t);
24367 memcpy(*streamPtrPtr, (uint32_t*)&local_bufferInfoCount, sizeof(uint32_t));
24368 *streamPtrPtr += sizeof(uint32_t);
24369 memcpy(*streamPtrPtr, (uint32_t*)&local_bufferViewCount, sizeof(uint32_t));
24370 *streamPtrPtr += sizeof(uint32_t);
24371 // WARNING PTR CHECK
24372 uint64_t cgen_var_3 = (uint64_t)(uintptr_t)local_pImageInfoEntryIndices;
24373 memcpy((*streamPtrPtr), &cgen_var_3, 8);
24374 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24375 *streamPtrPtr += 8;
24376 if (local_pImageInfoEntryIndices) {
24377 memcpy(*streamPtrPtr, (uint32_t*)local_pImageInfoEntryIndices,
24378 ((imageInfoCount)) * sizeof(uint32_t));
24379 *streamPtrPtr += ((imageInfoCount)) * sizeof(uint32_t);
24380 }
24381 // WARNING PTR CHECK
24382 uint64_t cgen_var_4 = (uint64_t)(uintptr_t)local_pBufferInfoEntryIndices;
24383 memcpy((*streamPtrPtr), &cgen_var_4, 8);
24384 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24385 *streamPtrPtr += 8;
24386 if (local_pBufferInfoEntryIndices) {
24387 memcpy(*streamPtrPtr, (uint32_t*)local_pBufferInfoEntryIndices,
24388 ((bufferInfoCount)) * sizeof(uint32_t));
24389 *streamPtrPtr += ((bufferInfoCount)) * sizeof(uint32_t);
24390 }
24391 // WARNING PTR CHECK
24392 uint64_t cgen_var_5 = (uint64_t)(uintptr_t)local_pBufferViewEntryIndices;
24393 memcpy((*streamPtrPtr), &cgen_var_5, 8);
24394 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24395 *streamPtrPtr += 8;
24396 if (local_pBufferViewEntryIndices) {
24397 memcpy(*streamPtrPtr, (uint32_t*)local_pBufferViewEntryIndices,
24398 ((bufferViewCount)) * sizeof(uint32_t));
24399 *streamPtrPtr += ((bufferViewCount)) * sizeof(uint32_t);
24400 }
24401 // WARNING PTR CHECK
24402 uint64_t cgen_var_6 = (uint64_t)(uintptr_t)local_pImageInfos;
24403 memcpy((*streamPtrPtr), &cgen_var_6, 8);
24404 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24405 *streamPtrPtr += 8;
24406 if (local_pImageInfos) {
24407 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
24408 reservedmarshal_VkDescriptorImageInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24409 (VkDescriptorImageInfo*)(local_pImageInfos + i),
24410 streamPtrPtr);
24411 }
24412 }
24413 // WARNING PTR CHECK
24414 uint64_t cgen_var_7 = (uint64_t)(uintptr_t)local_pBufferInfos;
24415 memcpy((*streamPtrPtr), &cgen_var_7, 8);
24416 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24417 *streamPtrPtr += 8;
24418 if (local_pBufferInfos) {
24419 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
24420 reservedmarshal_VkDescriptorBufferInfo(
24421 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24422 (VkDescriptorBufferInfo*)(local_pBufferInfos + i), streamPtrPtr);
24423 }
24424 }
24425 // WARNING PTR CHECK
24426 uint64_t cgen_var_8 = (uint64_t)(uintptr_t)local_pBufferViews;
24427 memcpy((*streamPtrPtr), &cgen_var_8, 8);
24428 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24429 *streamPtrPtr += 8;
24430 if (local_pBufferViews) {
24431 if (((bufferViewCount))) {
24432 uint8_t* cgen_var_8_0_ptr = (uint8_t*)(*streamPtrPtr);
24433 for (uint32_t k = 0; k < ((bufferViewCount)); ++k) {
24434 uint64_t tmpval = get_host_u64_VkBufferView(local_pBufferViews[k]);
24435 memcpy(cgen_var_8_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
24436 }
24437 *streamPtrPtr += 8 * ((bufferViewCount));
24438 }
24439 }
24440 stream->flush();
24441 ++encodeCount;
24442 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24443 pool->freeAll();
24444 stream->clearPool();
24445 }
24446 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24447 }
24448
vkBeginCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,const VkCommandBufferBeginInfo * pBeginInfo,uint32_t doLock)24449 void VkEncoder::vkBeginCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,
24450 const VkCommandBufferBeginInfo* pBeginInfo,
24451 uint32_t doLock) {
24452 (void)doLock;
24453 bool queueSubmitWithCommandsEnabled =
24454 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24455 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24456 auto stream = mImpl->stream();
24457 auto pool = mImpl->pool();
24458 VkCommandBuffer local_commandBuffer;
24459 VkCommandBufferBeginInfo* local_pBeginInfo;
24460 local_commandBuffer = commandBuffer;
24461 local_pBeginInfo = nullptr;
24462 if (pBeginInfo) {
24463 local_pBeginInfo =
24464 (VkCommandBufferBeginInfo*)pool->alloc(sizeof(const VkCommandBufferBeginInfo));
24465 deepcopy_VkCommandBufferBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBeginInfo,
24466 (VkCommandBufferBeginInfo*)(local_pBeginInfo));
24467 }
24468 if (local_pBeginInfo) {
24469 transform_tohost_VkCommandBufferBeginInfo(sResourceTracker,
24470 (VkCommandBufferBeginInfo*)(local_pBeginInfo));
24471 }
24472 size_t count = 0;
24473 size_t* countPtr = &count;
24474 {
24475 uint64_t cgen_var_0;
24476 *countPtr += 1 * 8;
24477 count_VkCommandBufferBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24478 (VkCommandBufferBeginInfo*)(local_pBeginInfo), countPtr);
24479 }
24480 uint32_t packetSize_vkBeginCommandBufferAsyncGOOGLE = 4 + 4 + count;
24481 if (queueSubmitWithCommandsEnabled) packetSize_vkBeginCommandBufferAsyncGOOGLE -= 8;
24482 uint8_t* streamPtr = stream->reserve(packetSize_vkBeginCommandBufferAsyncGOOGLE);
24483 uint8_t* packetBeginPtr = streamPtr;
24484 uint8_t** streamPtrPtr = &streamPtr;
24485 uint32_t opcode_vkBeginCommandBufferAsyncGOOGLE = OP_vkBeginCommandBufferAsyncGOOGLE;
24486 memcpy(streamPtr, &opcode_vkBeginCommandBufferAsyncGOOGLE, sizeof(uint32_t));
24487 streamPtr += sizeof(uint32_t);
24488 memcpy(streamPtr, &packetSize_vkBeginCommandBufferAsyncGOOGLE, sizeof(uint32_t));
24489 streamPtr += sizeof(uint32_t);
24490 if (!queueSubmitWithCommandsEnabled) {
24491 uint64_t cgen_var_0;
24492 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24493 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24494 *streamPtrPtr += 1 * 8;
24495 }
24496 reservedmarshal_VkCommandBufferBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24497 (VkCommandBufferBeginInfo*)(local_pBeginInfo),
24498 streamPtrPtr);
24499 ++encodeCount;
24500 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24501 pool->freeAll();
24502 stream->clearPool();
24503 }
24504 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24505 }
24506
vkEndCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,uint32_t doLock)24507 void VkEncoder::vkEndCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer, uint32_t doLock) {
24508 (void)doLock;
24509 bool queueSubmitWithCommandsEnabled =
24510 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24511 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24512 auto stream = mImpl->stream();
24513 auto pool = mImpl->pool();
24514 VkCommandBuffer local_commandBuffer;
24515 local_commandBuffer = commandBuffer;
24516 size_t count = 0;
24517 size_t* countPtr = &count;
24518 {
24519 uint64_t cgen_var_0;
24520 *countPtr += 1 * 8;
24521 }
24522 uint32_t packetSize_vkEndCommandBufferAsyncGOOGLE = 4 + 4 + count;
24523 if (queueSubmitWithCommandsEnabled) packetSize_vkEndCommandBufferAsyncGOOGLE -= 8;
24524 uint8_t* streamPtr = stream->reserve(packetSize_vkEndCommandBufferAsyncGOOGLE);
24525 uint8_t* packetBeginPtr = streamPtr;
24526 uint8_t** streamPtrPtr = &streamPtr;
24527 uint32_t opcode_vkEndCommandBufferAsyncGOOGLE = OP_vkEndCommandBufferAsyncGOOGLE;
24528 memcpy(streamPtr, &opcode_vkEndCommandBufferAsyncGOOGLE, sizeof(uint32_t));
24529 streamPtr += sizeof(uint32_t);
24530 memcpy(streamPtr, &packetSize_vkEndCommandBufferAsyncGOOGLE, sizeof(uint32_t));
24531 streamPtr += sizeof(uint32_t);
24532 if (!queueSubmitWithCommandsEnabled) {
24533 uint64_t cgen_var_0;
24534 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24535 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24536 *streamPtrPtr += 1 * 8;
24537 }
24538 stream->flush();
24539 ++encodeCount;
24540 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24541 pool->freeAll();
24542 stream->clearPool();
24543 }
24544 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24545 }
24546
vkResetCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,VkCommandBufferResetFlags flags,uint32_t doLock)24547 void VkEncoder::vkResetCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,
24548 VkCommandBufferResetFlags flags, uint32_t doLock) {
24549 (void)doLock;
24550 bool queueSubmitWithCommandsEnabled =
24551 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24552 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24553 auto stream = mImpl->stream();
24554 auto pool = mImpl->pool();
24555 VkCommandBuffer local_commandBuffer;
24556 VkCommandBufferResetFlags local_flags;
24557 local_commandBuffer = commandBuffer;
24558 local_flags = flags;
24559 size_t count = 0;
24560 size_t* countPtr = &count;
24561 {
24562 uint64_t cgen_var_0;
24563 *countPtr += 1 * 8;
24564 *countPtr += sizeof(VkCommandBufferResetFlags);
24565 }
24566 uint32_t packetSize_vkResetCommandBufferAsyncGOOGLE = 4 + 4 + count;
24567 if (queueSubmitWithCommandsEnabled) packetSize_vkResetCommandBufferAsyncGOOGLE -= 8;
24568 uint8_t* streamPtr = stream->reserve(packetSize_vkResetCommandBufferAsyncGOOGLE);
24569 uint8_t* packetBeginPtr = streamPtr;
24570 uint8_t** streamPtrPtr = &streamPtr;
24571 uint32_t opcode_vkResetCommandBufferAsyncGOOGLE = OP_vkResetCommandBufferAsyncGOOGLE;
24572 memcpy(streamPtr, &opcode_vkResetCommandBufferAsyncGOOGLE, sizeof(uint32_t));
24573 streamPtr += sizeof(uint32_t);
24574 memcpy(streamPtr, &packetSize_vkResetCommandBufferAsyncGOOGLE, sizeof(uint32_t));
24575 streamPtr += sizeof(uint32_t);
24576 if (!queueSubmitWithCommandsEnabled) {
24577 uint64_t cgen_var_0;
24578 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24579 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24580 *streamPtrPtr += 1 * 8;
24581 }
24582 memcpy(*streamPtrPtr, (VkCommandBufferResetFlags*)&local_flags,
24583 sizeof(VkCommandBufferResetFlags));
24584 *streamPtrPtr += sizeof(VkCommandBufferResetFlags);
24585 ++encodeCount;
24586 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24587 pool->freeAll();
24588 stream->clearPool();
24589 }
24590 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24591 }
24592
vkCommandBufferHostSyncGOOGLE(VkCommandBuffer commandBuffer,uint32_t needHostSync,uint32_t sequenceNumber,uint32_t doLock)24593 void VkEncoder::vkCommandBufferHostSyncGOOGLE(VkCommandBuffer commandBuffer, uint32_t needHostSync,
24594 uint32_t sequenceNumber, uint32_t doLock) {
24595 (void)doLock;
24596 bool queueSubmitWithCommandsEnabled =
24597 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24598 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24599 auto stream = mImpl->stream();
24600 auto pool = mImpl->pool();
24601 VkCommandBuffer local_commandBuffer;
24602 uint32_t local_needHostSync;
24603 uint32_t local_sequenceNumber;
24604 local_commandBuffer = commandBuffer;
24605 local_needHostSync = needHostSync;
24606 local_sequenceNumber = sequenceNumber;
24607 size_t count = 0;
24608 size_t* countPtr = &count;
24609 {
24610 uint64_t cgen_var_0;
24611 *countPtr += 1 * 8;
24612 *countPtr += sizeof(uint32_t);
24613 *countPtr += sizeof(uint32_t);
24614 }
24615 uint32_t packetSize_vkCommandBufferHostSyncGOOGLE = 4 + 4 + count;
24616 if (queueSubmitWithCommandsEnabled) packetSize_vkCommandBufferHostSyncGOOGLE -= 8;
24617 uint8_t* streamPtr = stream->reserve(packetSize_vkCommandBufferHostSyncGOOGLE);
24618 uint8_t* packetBeginPtr = streamPtr;
24619 uint8_t** streamPtrPtr = &streamPtr;
24620 uint32_t opcode_vkCommandBufferHostSyncGOOGLE = OP_vkCommandBufferHostSyncGOOGLE;
24621 memcpy(streamPtr, &opcode_vkCommandBufferHostSyncGOOGLE, sizeof(uint32_t));
24622 streamPtr += sizeof(uint32_t);
24623 memcpy(streamPtr, &packetSize_vkCommandBufferHostSyncGOOGLE, sizeof(uint32_t));
24624 streamPtr += sizeof(uint32_t);
24625 if (!queueSubmitWithCommandsEnabled) {
24626 uint64_t cgen_var_0;
24627 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24628 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24629 *streamPtrPtr += 1 * 8;
24630 }
24631 memcpy(*streamPtrPtr, (uint32_t*)&local_needHostSync, sizeof(uint32_t));
24632 *streamPtrPtr += sizeof(uint32_t);
24633 memcpy(*streamPtrPtr, (uint32_t*)&local_sequenceNumber, sizeof(uint32_t));
24634 *streamPtrPtr += sizeof(uint32_t);
24635 ++encodeCount;
24636 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24637 pool->freeAll();
24638 stream->clearPool();
24639 }
24640 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24641 }
24642
vkCreateImageWithRequirementsGOOGLE(VkDevice device,const VkImageCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImage * pImage,VkMemoryRequirements * pMemoryRequirements,uint32_t doLock)24643 VkResult VkEncoder::vkCreateImageWithRequirementsGOOGLE(
24644 VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator,
24645 VkImage* pImage, VkMemoryRequirements* pMemoryRequirements, uint32_t doLock) {
24646 (void)doLock;
24647 bool queueSubmitWithCommandsEnabled =
24648 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24649 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24650 auto stream = mImpl->stream();
24651 auto pool = mImpl->pool();
24652 VkDevice local_device;
24653 VkImageCreateInfo* local_pCreateInfo;
24654 VkAllocationCallbacks* local_pAllocator;
24655 local_device = device;
24656 local_pCreateInfo = nullptr;
24657 if (pCreateInfo) {
24658 local_pCreateInfo = (VkImageCreateInfo*)pool->alloc(sizeof(const VkImageCreateInfo));
24659 deepcopy_VkImageCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
24660 (VkImageCreateInfo*)(local_pCreateInfo));
24661 }
24662 local_pAllocator = nullptr;
24663 if (pAllocator) {
24664 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
24665 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
24666 (VkAllocationCallbacks*)(local_pAllocator));
24667 }
24668 sResourceTracker->unwrap_vkCreateImage_pCreateInfo(pCreateInfo, local_pCreateInfo);
24669 local_pAllocator = nullptr;
24670 if (local_pCreateInfo) {
24671 sResourceTracker->transformImpl_VkImageCreateInfo_tohost(local_pCreateInfo, 1);
24672 transform_tohost_VkImageCreateInfo(sResourceTracker,
24673 (VkImageCreateInfo*)(local_pCreateInfo));
24674 }
24675 if (local_pAllocator) {
24676 transform_tohost_VkAllocationCallbacks(sResourceTracker,
24677 (VkAllocationCallbacks*)(local_pAllocator));
24678 }
24679 size_t count = 0;
24680 size_t* countPtr = &count;
24681 {
24682 uint64_t cgen_var_0;
24683 *countPtr += 1 * 8;
24684 count_VkImageCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24685 (VkImageCreateInfo*)(local_pCreateInfo), countPtr);
24686 // WARNING PTR CHECK
24687 *countPtr += 8;
24688 if (local_pAllocator) {
24689 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24690 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
24691 }
24692 uint64_t cgen_var_1;
24693 *countPtr += 8;
24694 count_VkMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24695 (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
24696 }
24697 uint32_t packetSize_vkCreateImageWithRequirementsGOOGLE =
24698 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24699 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateImageWithRequirementsGOOGLE);
24700 uint8_t* packetBeginPtr = streamPtr;
24701 uint8_t** streamPtrPtr = &streamPtr;
24702 uint32_t opcode_vkCreateImageWithRequirementsGOOGLE = OP_vkCreateImageWithRequirementsGOOGLE;
24703 uint32_t seqno;
24704 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24705 memcpy(streamPtr, &opcode_vkCreateImageWithRequirementsGOOGLE, sizeof(uint32_t));
24706 streamPtr += sizeof(uint32_t);
24707 memcpy(streamPtr, &packetSize_vkCreateImageWithRequirementsGOOGLE, sizeof(uint32_t));
24708 streamPtr += sizeof(uint32_t);
24709 if (queueSubmitWithCommandsEnabled) {
24710 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24711 streamPtr += sizeof(uint32_t);
24712 }
24713 uint64_t cgen_var_0;
24714 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24715 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24716 *streamPtrPtr += 1 * 8;
24717 reservedmarshal_VkImageCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24718 (VkImageCreateInfo*)(local_pCreateInfo), streamPtrPtr);
24719 // WARNING PTR CHECK
24720 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
24721 memcpy((*streamPtrPtr), &cgen_var_1, 8);
24722 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24723 *streamPtrPtr += 8;
24724 if (local_pAllocator) {
24725 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24726 (VkAllocationCallbacks*)(local_pAllocator),
24727 streamPtrPtr);
24728 }
24729 /* is handle, possibly out */;
24730 uint64_t cgen_var_2;
24731 *&cgen_var_2 = (uint64_t)((*pImage));
24732 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
24733 *streamPtrPtr += 8;
24734 /* is handle, possibly out */;
24735 reservedmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24736 (VkMemoryRequirements*)(pMemoryRequirements),
24737 streamPtrPtr);
24738 stream->setHandleMapping(sResourceTracker->createMapping());
24739 uint64_t cgen_var_3;
24740 stream->read((uint64_t*)&cgen_var_3, 8);
24741 stream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_3, (VkImage*)pImage, 1);
24742 stream->unsetHandleMapping();
24743 unmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24744 (VkMemoryRequirements*)(pMemoryRequirements));
24745 if (pMemoryRequirements) {
24746 transform_fromhost_VkMemoryRequirements(sResourceTracker,
24747 (VkMemoryRequirements*)(pMemoryRequirements));
24748 }
24749 VkResult vkCreateImageWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
24750 stream->read(&vkCreateImageWithRequirementsGOOGLE_VkResult_return, sizeof(VkResult));
24751 ++encodeCount;
24752 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24753 pool->freeAll();
24754 stream->clearPool();
24755 }
24756 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24757 return vkCreateImageWithRequirementsGOOGLE_VkResult_return;
24758 }
24759
vkCreateBufferWithRequirementsGOOGLE(VkDevice device,const VkBufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBuffer * pBuffer,VkMemoryRequirements * pMemoryRequirements,uint32_t doLock)24760 VkResult VkEncoder::vkCreateBufferWithRequirementsGOOGLE(
24761 VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator,
24762 VkBuffer* pBuffer, VkMemoryRequirements* pMemoryRequirements, uint32_t doLock) {
24763 (void)doLock;
24764 bool queueSubmitWithCommandsEnabled =
24765 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24766 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24767 auto stream = mImpl->stream();
24768 auto pool = mImpl->pool();
24769 VkDevice local_device;
24770 VkBufferCreateInfo* local_pCreateInfo;
24771 VkAllocationCallbacks* local_pAllocator;
24772 local_device = device;
24773 local_pCreateInfo = nullptr;
24774 if (pCreateInfo) {
24775 local_pCreateInfo = (VkBufferCreateInfo*)pool->alloc(sizeof(const VkBufferCreateInfo));
24776 deepcopy_VkBufferCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
24777 (VkBufferCreateInfo*)(local_pCreateInfo));
24778 }
24779 local_pAllocator = nullptr;
24780 if (pAllocator) {
24781 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
24782 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
24783 (VkAllocationCallbacks*)(local_pAllocator));
24784 }
24785 local_pAllocator = nullptr;
24786 if (local_pCreateInfo) {
24787 transform_tohost_VkBufferCreateInfo(sResourceTracker,
24788 (VkBufferCreateInfo*)(local_pCreateInfo));
24789 }
24790 if (local_pAllocator) {
24791 transform_tohost_VkAllocationCallbacks(sResourceTracker,
24792 (VkAllocationCallbacks*)(local_pAllocator));
24793 }
24794 size_t count = 0;
24795 size_t* countPtr = &count;
24796 {
24797 uint64_t cgen_var_0;
24798 *countPtr += 1 * 8;
24799 count_VkBufferCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24800 (VkBufferCreateInfo*)(local_pCreateInfo), countPtr);
24801 // WARNING PTR CHECK
24802 *countPtr += 8;
24803 if (local_pAllocator) {
24804 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24805 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
24806 }
24807 uint64_t cgen_var_1;
24808 *countPtr += 8;
24809 count_VkMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24810 (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
24811 }
24812 uint32_t packetSize_vkCreateBufferWithRequirementsGOOGLE =
24813 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24814 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateBufferWithRequirementsGOOGLE);
24815 uint8_t* packetBeginPtr = streamPtr;
24816 uint8_t** streamPtrPtr = &streamPtr;
24817 uint32_t opcode_vkCreateBufferWithRequirementsGOOGLE = OP_vkCreateBufferWithRequirementsGOOGLE;
24818 uint32_t seqno;
24819 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24820 memcpy(streamPtr, &opcode_vkCreateBufferWithRequirementsGOOGLE, sizeof(uint32_t));
24821 streamPtr += sizeof(uint32_t);
24822 memcpy(streamPtr, &packetSize_vkCreateBufferWithRequirementsGOOGLE, sizeof(uint32_t));
24823 streamPtr += sizeof(uint32_t);
24824 if (queueSubmitWithCommandsEnabled) {
24825 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24826 streamPtr += sizeof(uint32_t);
24827 }
24828 uint64_t cgen_var_0;
24829 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24830 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24831 *streamPtrPtr += 1 * 8;
24832 reservedmarshal_VkBufferCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24833 (VkBufferCreateInfo*)(local_pCreateInfo), streamPtrPtr);
24834 // WARNING PTR CHECK
24835 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
24836 memcpy((*streamPtrPtr), &cgen_var_1, 8);
24837 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24838 *streamPtrPtr += 8;
24839 if (local_pAllocator) {
24840 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24841 (VkAllocationCallbacks*)(local_pAllocator),
24842 streamPtrPtr);
24843 }
24844 /* is handle, possibly out */;
24845 uint64_t cgen_var_2;
24846 *&cgen_var_2 = (uint64_t)((*pBuffer));
24847 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
24848 *streamPtrPtr += 8;
24849 /* is handle, possibly out */;
24850 reservedmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24851 (VkMemoryRequirements*)(pMemoryRequirements),
24852 streamPtrPtr);
24853 stream->setHandleMapping(sResourceTracker->createMapping());
24854 uint64_t cgen_var_3;
24855 stream->read((uint64_t*)&cgen_var_3, 8);
24856 stream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_3, (VkBuffer*)pBuffer, 1);
24857 stream->unsetHandleMapping();
24858 unmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24859 (VkMemoryRequirements*)(pMemoryRequirements));
24860 if (pMemoryRequirements) {
24861 transform_fromhost_VkMemoryRequirements(sResourceTracker,
24862 (VkMemoryRequirements*)(pMemoryRequirements));
24863 }
24864 VkResult vkCreateBufferWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
24865 stream->read(&vkCreateBufferWithRequirementsGOOGLE_VkResult_return, sizeof(VkResult));
24866 ++encodeCount;
24867 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24868 pool->freeAll();
24869 stream->clearPool();
24870 }
24871 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24872 return vkCreateBufferWithRequirementsGOOGLE_VkResult_return;
24873 }
24874
vkGetMemoryHostAddressInfoGOOGLE(VkDevice device,VkDeviceMemory memory,uint64_t * pAddress,uint64_t * pSize,uint64_t * pHostmemId,uint32_t doLock)24875 VkResult VkEncoder::vkGetMemoryHostAddressInfoGOOGLE(VkDevice device, VkDeviceMemory memory,
24876 uint64_t* pAddress, uint64_t* pSize,
24877 uint64_t* pHostmemId, uint32_t doLock) {
24878 (void)doLock;
24879 bool queueSubmitWithCommandsEnabled =
24880 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24881 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24882 auto stream = mImpl->stream();
24883 auto pool = mImpl->pool();
24884 VkDevice local_device;
24885 VkDeviceMemory local_memory;
24886 local_device = device;
24887 local_memory = memory;
24888 sResourceTracker->deviceMemoryTransform_tohost(
24889 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0,
24890 (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
24891 size_t count = 0;
24892 size_t* countPtr = &count;
24893 {
24894 uint64_t cgen_var_0;
24895 *countPtr += 1 * 8;
24896 uint64_t cgen_var_1;
24897 *countPtr += 1 * 8;
24898 // WARNING PTR CHECK
24899 *countPtr += 8;
24900 if (pAddress) {
24901 *countPtr += sizeof(uint64_t);
24902 }
24903 // WARNING PTR CHECK
24904 *countPtr += 8;
24905 if (pSize) {
24906 *countPtr += sizeof(uint64_t);
24907 }
24908 // WARNING PTR CHECK
24909 *countPtr += 8;
24910 if (pHostmemId) {
24911 *countPtr += sizeof(uint64_t);
24912 }
24913 }
24914 uint32_t packetSize_vkGetMemoryHostAddressInfoGOOGLE =
24915 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24916 uint8_t* streamPtr = stream->reserve(packetSize_vkGetMemoryHostAddressInfoGOOGLE);
24917 uint8_t* packetBeginPtr = streamPtr;
24918 uint8_t** streamPtrPtr = &streamPtr;
24919 uint32_t opcode_vkGetMemoryHostAddressInfoGOOGLE = OP_vkGetMemoryHostAddressInfoGOOGLE;
24920 uint32_t seqno;
24921 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24922 memcpy(streamPtr, &opcode_vkGetMemoryHostAddressInfoGOOGLE, sizeof(uint32_t));
24923 streamPtr += sizeof(uint32_t);
24924 memcpy(streamPtr, &packetSize_vkGetMemoryHostAddressInfoGOOGLE, sizeof(uint32_t));
24925 streamPtr += sizeof(uint32_t);
24926 if (queueSubmitWithCommandsEnabled) {
24927 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24928 streamPtr += sizeof(uint32_t);
24929 }
24930 uint64_t cgen_var_0;
24931 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24932 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24933 *streamPtrPtr += 1 * 8;
24934 uint64_t cgen_var_1;
24935 *&cgen_var_1 = get_host_u64_VkDeviceMemory((*&local_memory));
24936 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
24937 *streamPtrPtr += 1 * 8;
24938 // WARNING PTR CHECK
24939 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pAddress;
24940 memcpy((*streamPtrPtr), &cgen_var_2, 8);
24941 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24942 *streamPtrPtr += 8;
24943 if (pAddress) {
24944 memcpy(*streamPtrPtr, (uint64_t*)pAddress, sizeof(uint64_t));
24945 *streamPtrPtr += sizeof(uint64_t);
24946 }
24947 // WARNING PTR CHECK
24948 uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pSize;
24949 memcpy((*streamPtrPtr), &cgen_var_3, 8);
24950 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24951 *streamPtrPtr += 8;
24952 if (pSize) {
24953 memcpy(*streamPtrPtr, (uint64_t*)pSize, sizeof(uint64_t));
24954 *streamPtrPtr += sizeof(uint64_t);
24955 }
24956 // WARNING PTR CHECK
24957 uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pHostmemId;
24958 memcpy((*streamPtrPtr), &cgen_var_4, 8);
24959 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24960 *streamPtrPtr += 8;
24961 if (pHostmemId) {
24962 memcpy(*streamPtrPtr, (uint64_t*)pHostmemId, sizeof(uint64_t));
24963 *streamPtrPtr += sizeof(uint64_t);
24964 }
24965 // WARNING PTR CHECK
24966 uint64_t* check_pAddress;
24967 check_pAddress = (uint64_t*)(uintptr_t)stream->getBe64();
24968 if (pAddress) {
24969 if (!(check_pAddress)) {
24970 fprintf(stderr, "fatal: pAddress inconsistent between guest and host\n");
24971 }
24972 stream->read((uint64_t*)pAddress, sizeof(uint64_t));
24973 }
24974 // WARNING PTR CHECK
24975 uint64_t* check_pSize;
24976 check_pSize = (uint64_t*)(uintptr_t)stream->getBe64();
24977 if (pSize) {
24978 if (!(check_pSize)) {
24979 fprintf(stderr, "fatal: pSize inconsistent between guest and host\n");
24980 }
24981 stream->read((uint64_t*)pSize, sizeof(uint64_t));
24982 }
24983 // WARNING PTR CHECK
24984 uint64_t* check_pHostmemId;
24985 check_pHostmemId = (uint64_t*)(uintptr_t)stream->getBe64();
24986 if (pHostmemId) {
24987 if (!(check_pHostmemId)) {
24988 fprintf(stderr, "fatal: pHostmemId inconsistent between guest and host\n");
24989 }
24990 stream->read((uint64_t*)pHostmemId, sizeof(uint64_t));
24991 }
24992 VkResult vkGetMemoryHostAddressInfoGOOGLE_VkResult_return = (VkResult)0;
24993 stream->read(&vkGetMemoryHostAddressInfoGOOGLE_VkResult_return, sizeof(VkResult));
24994 ++encodeCount;
24995 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24996 pool->freeAll();
24997 stream->clearPool();
24998 }
24999 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25000 return vkGetMemoryHostAddressInfoGOOGLE_VkResult_return;
25001 }
25002
vkFreeMemorySyncGOOGLE(VkDevice device,VkDeviceMemory memory,const VkAllocationCallbacks * pAllocator,uint32_t doLock)25003 VkResult VkEncoder::vkFreeMemorySyncGOOGLE(VkDevice device, VkDeviceMemory memory,
25004 const VkAllocationCallbacks* pAllocator,
25005 uint32_t doLock) {
25006 (void)doLock;
25007 bool queueSubmitWithCommandsEnabled =
25008 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25009 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25010 auto stream = mImpl->stream();
25011 auto pool = mImpl->pool();
25012 VkDevice local_device;
25013 VkDeviceMemory local_memory;
25014 VkAllocationCallbacks* local_pAllocator;
25015 local_device = device;
25016 local_memory = memory;
25017 local_pAllocator = nullptr;
25018 if (pAllocator) {
25019 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
25020 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
25021 (VkAllocationCallbacks*)(local_pAllocator));
25022 }
25023 local_pAllocator = nullptr;
25024 sResourceTracker->deviceMemoryTransform_tohost(
25025 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0,
25026 (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
25027 size_t count = 0;
25028 size_t* countPtr = &count;
25029 {
25030 uint64_t cgen_var_0;
25031 *countPtr += 1 * 8;
25032 uint64_t cgen_var_1;
25033 *countPtr += 1 * 8;
25034 // WARNING PTR CHECK
25035 *countPtr += 8;
25036 if (local_pAllocator) {
25037 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25038 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
25039 }
25040 }
25041 uint32_t packetSize_vkFreeMemorySyncGOOGLE =
25042 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25043 uint8_t* streamPtr = stream->reserve(packetSize_vkFreeMemorySyncGOOGLE);
25044 uint8_t* packetBeginPtr = streamPtr;
25045 uint8_t** streamPtrPtr = &streamPtr;
25046 uint32_t opcode_vkFreeMemorySyncGOOGLE = OP_vkFreeMemorySyncGOOGLE;
25047 uint32_t seqno;
25048 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25049 memcpy(streamPtr, &opcode_vkFreeMemorySyncGOOGLE, sizeof(uint32_t));
25050 streamPtr += sizeof(uint32_t);
25051 memcpy(streamPtr, &packetSize_vkFreeMemorySyncGOOGLE, sizeof(uint32_t));
25052 streamPtr += sizeof(uint32_t);
25053 if (queueSubmitWithCommandsEnabled) {
25054 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25055 streamPtr += sizeof(uint32_t);
25056 }
25057 uint64_t cgen_var_0;
25058 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
25059 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25060 *streamPtrPtr += 1 * 8;
25061 uint64_t cgen_var_1;
25062 *&cgen_var_1 = get_host_u64_VkDeviceMemory((*&local_memory));
25063 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
25064 *streamPtrPtr += 1 * 8;
25065 // WARNING PTR CHECK
25066 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
25067 memcpy((*streamPtrPtr), &cgen_var_2, 8);
25068 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25069 *streamPtrPtr += 8;
25070 if (local_pAllocator) {
25071 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25072 (VkAllocationCallbacks*)(local_pAllocator),
25073 streamPtrPtr);
25074 }
25075 VkResult vkFreeMemorySyncGOOGLE_VkResult_return = (VkResult)0;
25076 stream->read(&vkFreeMemorySyncGOOGLE_VkResult_return, sizeof(VkResult));
25077 sResourceTracker->destroyMapping()->mapHandles_VkDeviceMemory((VkDeviceMemory*)&memory);
25078 ++encodeCount;
25079 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25080 pool->freeAll();
25081 stream->clearPool();
25082 }
25083 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25084 return vkFreeMemorySyncGOOGLE_VkResult_return;
25085 }
25086
vkQueueHostSyncGOOGLE(VkQueue queue,uint32_t needHostSync,uint32_t sequenceNumber,uint32_t doLock)25087 void VkEncoder::vkQueueHostSyncGOOGLE(VkQueue queue, uint32_t needHostSync, uint32_t sequenceNumber,
25088 uint32_t doLock) {
25089 (void)doLock;
25090 bool queueSubmitWithCommandsEnabled =
25091 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25092 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25093 auto stream = mImpl->stream();
25094 auto pool = mImpl->pool();
25095 VkQueue local_queue;
25096 uint32_t local_needHostSync;
25097 uint32_t local_sequenceNumber;
25098 local_queue = queue;
25099 local_needHostSync = needHostSync;
25100 local_sequenceNumber = sequenceNumber;
25101 size_t count = 0;
25102 size_t* countPtr = &count;
25103 {
25104 uint64_t cgen_var_0;
25105 *countPtr += 1 * 8;
25106 *countPtr += sizeof(uint32_t);
25107 *countPtr += sizeof(uint32_t);
25108 }
25109 uint32_t packetSize_vkQueueHostSyncGOOGLE =
25110 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25111 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueHostSyncGOOGLE);
25112 uint8_t* packetBeginPtr = streamPtr;
25113 uint8_t** streamPtrPtr = &streamPtr;
25114 uint32_t opcode_vkQueueHostSyncGOOGLE = OP_vkQueueHostSyncGOOGLE;
25115 uint32_t seqno;
25116 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25117 memcpy(streamPtr, &opcode_vkQueueHostSyncGOOGLE, sizeof(uint32_t));
25118 streamPtr += sizeof(uint32_t);
25119 memcpy(streamPtr, &packetSize_vkQueueHostSyncGOOGLE, sizeof(uint32_t));
25120 streamPtr += sizeof(uint32_t);
25121 if (queueSubmitWithCommandsEnabled) {
25122 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25123 streamPtr += sizeof(uint32_t);
25124 }
25125 uint64_t cgen_var_0;
25126 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
25127 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25128 *streamPtrPtr += 1 * 8;
25129 memcpy(*streamPtrPtr, (uint32_t*)&local_needHostSync, sizeof(uint32_t));
25130 *streamPtrPtr += sizeof(uint32_t);
25131 memcpy(*streamPtrPtr, (uint32_t*)&local_sequenceNumber, sizeof(uint32_t));
25132 *streamPtrPtr += sizeof(uint32_t);
25133 stream->flush();
25134 ++encodeCount;
25135 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25136 pool->freeAll();
25137 stream->clearPool();
25138 }
25139 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25140 }
25141
vkQueueSubmitAsyncGOOGLE(VkQueue queue,uint32_t submitCount,const VkSubmitInfo * pSubmits,VkFence fence,uint32_t doLock)25142 void VkEncoder::vkQueueSubmitAsyncGOOGLE(VkQueue queue, uint32_t submitCount,
25143 const VkSubmitInfo* pSubmits, VkFence fence,
25144 uint32_t doLock) {
25145 (void)doLock;
25146 bool queueSubmitWithCommandsEnabled =
25147 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25148 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25149 auto stream = mImpl->stream();
25150 auto pool = mImpl->pool();
25151 VkQueue local_queue;
25152 uint32_t local_submitCount;
25153 VkSubmitInfo* local_pSubmits;
25154 VkFence local_fence;
25155 local_queue = queue;
25156 local_submitCount = submitCount;
25157 local_pSubmits = nullptr;
25158 if (pSubmits) {
25159 local_pSubmits = (VkSubmitInfo*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo));
25160 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
25161 deepcopy_VkSubmitInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubmits + i,
25162 (VkSubmitInfo*)(local_pSubmits + i));
25163 }
25164 }
25165 local_fence = fence;
25166 if (local_pSubmits) {
25167 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
25168 transform_tohost_VkSubmitInfo(sResourceTracker, (VkSubmitInfo*)(local_pSubmits + i));
25169 }
25170 }
25171 size_t count = 0;
25172 size_t* countPtr = &count;
25173 {
25174 uint64_t cgen_var_0;
25175 *countPtr += 1 * 8;
25176 *countPtr += sizeof(uint32_t);
25177 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
25178 count_VkSubmitInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25179 (VkSubmitInfo*)(local_pSubmits + i), countPtr);
25180 }
25181 uint64_t cgen_var_1;
25182 *countPtr += 1 * 8;
25183 }
25184 uint32_t packetSize_vkQueueSubmitAsyncGOOGLE =
25185 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25186 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSubmitAsyncGOOGLE);
25187 uint8_t* packetBeginPtr = streamPtr;
25188 uint8_t** streamPtrPtr = &streamPtr;
25189 uint32_t opcode_vkQueueSubmitAsyncGOOGLE = OP_vkQueueSubmitAsyncGOOGLE;
25190 uint32_t seqno;
25191 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25192 memcpy(streamPtr, &opcode_vkQueueSubmitAsyncGOOGLE, sizeof(uint32_t));
25193 streamPtr += sizeof(uint32_t);
25194 memcpy(streamPtr, &packetSize_vkQueueSubmitAsyncGOOGLE, sizeof(uint32_t));
25195 streamPtr += sizeof(uint32_t);
25196 if (queueSubmitWithCommandsEnabled) {
25197 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25198 streamPtr += sizeof(uint32_t);
25199 }
25200 uint64_t cgen_var_0;
25201 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
25202 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25203 *streamPtrPtr += 1 * 8;
25204 memcpy(*streamPtrPtr, (uint32_t*)&local_submitCount, sizeof(uint32_t));
25205 *streamPtrPtr += sizeof(uint32_t);
25206 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
25207 reservedmarshal_VkSubmitInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25208 (VkSubmitInfo*)(local_pSubmits + i), streamPtrPtr);
25209 }
25210 uint64_t cgen_var_1;
25211 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
25212 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
25213 *streamPtrPtr += 1 * 8;
25214 stream->flush();
25215 ++encodeCount;
25216 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25217 pool->freeAll();
25218 stream->clearPool();
25219 }
25220 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25221 }
25222
vkQueueWaitIdleAsyncGOOGLE(VkQueue queue,uint32_t doLock)25223 void VkEncoder::vkQueueWaitIdleAsyncGOOGLE(VkQueue queue, uint32_t doLock) {
25224 (void)doLock;
25225 bool queueSubmitWithCommandsEnabled =
25226 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25227 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25228 auto stream = mImpl->stream();
25229 auto pool = mImpl->pool();
25230 VkQueue local_queue;
25231 local_queue = queue;
25232 size_t count = 0;
25233 size_t* countPtr = &count;
25234 {
25235 uint64_t cgen_var_0;
25236 *countPtr += 1 * 8;
25237 }
25238 uint32_t packetSize_vkQueueWaitIdleAsyncGOOGLE =
25239 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25240 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueWaitIdleAsyncGOOGLE);
25241 uint8_t* packetBeginPtr = streamPtr;
25242 uint8_t** streamPtrPtr = &streamPtr;
25243 uint32_t opcode_vkQueueWaitIdleAsyncGOOGLE = OP_vkQueueWaitIdleAsyncGOOGLE;
25244 uint32_t seqno;
25245 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25246 memcpy(streamPtr, &opcode_vkQueueWaitIdleAsyncGOOGLE, sizeof(uint32_t));
25247 streamPtr += sizeof(uint32_t);
25248 memcpy(streamPtr, &packetSize_vkQueueWaitIdleAsyncGOOGLE, sizeof(uint32_t));
25249 streamPtr += sizeof(uint32_t);
25250 if (queueSubmitWithCommandsEnabled) {
25251 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25252 streamPtr += sizeof(uint32_t);
25253 }
25254 uint64_t cgen_var_0;
25255 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
25256 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25257 *streamPtrPtr += 1 * 8;
25258 stream->flush();
25259 ++encodeCount;
25260 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25261 pool->freeAll();
25262 stream->clearPool();
25263 }
25264 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25265 }
25266
vkQueueBindSparseAsyncGOOGLE(VkQueue queue,uint32_t bindInfoCount,const VkBindSparseInfo * pBindInfo,VkFence fence,uint32_t doLock)25267 void VkEncoder::vkQueueBindSparseAsyncGOOGLE(VkQueue queue, uint32_t bindInfoCount,
25268 const VkBindSparseInfo* pBindInfo, VkFence fence,
25269 uint32_t doLock) {
25270 (void)doLock;
25271 bool queueSubmitWithCommandsEnabled =
25272 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25273 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25274 auto stream = mImpl->stream();
25275 auto pool = mImpl->pool();
25276 VkQueue local_queue;
25277 uint32_t local_bindInfoCount;
25278 VkBindSparseInfo* local_pBindInfo;
25279 VkFence local_fence;
25280 local_queue = queue;
25281 local_bindInfoCount = bindInfoCount;
25282 local_pBindInfo = nullptr;
25283 if (pBindInfo) {
25284 local_pBindInfo =
25285 (VkBindSparseInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindSparseInfo));
25286 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
25287 deepcopy_VkBindSparseInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfo + i,
25288 (VkBindSparseInfo*)(local_pBindInfo + i));
25289 }
25290 }
25291 local_fence = fence;
25292 if (local_pBindInfo) {
25293 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
25294 transform_tohost_VkBindSparseInfo(sResourceTracker,
25295 (VkBindSparseInfo*)(local_pBindInfo + i));
25296 }
25297 }
25298 size_t count = 0;
25299 size_t* countPtr = &count;
25300 {
25301 uint64_t cgen_var_0;
25302 *countPtr += 1 * 8;
25303 *countPtr += sizeof(uint32_t);
25304 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
25305 count_VkBindSparseInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25306 (VkBindSparseInfo*)(local_pBindInfo + i), countPtr);
25307 }
25308 uint64_t cgen_var_1;
25309 *countPtr += 1 * 8;
25310 }
25311 uint32_t packetSize_vkQueueBindSparseAsyncGOOGLE =
25312 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25313 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueBindSparseAsyncGOOGLE);
25314 uint8_t* packetBeginPtr = streamPtr;
25315 uint8_t** streamPtrPtr = &streamPtr;
25316 uint32_t opcode_vkQueueBindSparseAsyncGOOGLE = OP_vkQueueBindSparseAsyncGOOGLE;
25317 uint32_t seqno;
25318 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25319 memcpy(streamPtr, &opcode_vkQueueBindSparseAsyncGOOGLE, sizeof(uint32_t));
25320 streamPtr += sizeof(uint32_t);
25321 memcpy(streamPtr, &packetSize_vkQueueBindSparseAsyncGOOGLE, sizeof(uint32_t));
25322 streamPtr += sizeof(uint32_t);
25323 if (queueSubmitWithCommandsEnabled) {
25324 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25325 streamPtr += sizeof(uint32_t);
25326 }
25327 uint64_t cgen_var_0;
25328 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
25329 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25330 *streamPtrPtr += 1 * 8;
25331 memcpy(*streamPtrPtr, (uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
25332 *streamPtrPtr += sizeof(uint32_t);
25333 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
25334 reservedmarshal_VkBindSparseInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25335 (VkBindSparseInfo*)(local_pBindInfo + i), streamPtrPtr);
25336 }
25337 uint64_t cgen_var_1;
25338 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
25339 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
25340 *streamPtrPtr += 1 * 8;
25341 stream->flush();
25342 ++encodeCount;
25343 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25344 pool->freeAll();
25345 stream->clearPool();
25346 }
25347 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25348 }
25349
vkGetLinearImageLayoutGOOGLE(VkDevice device,VkFormat format,VkDeviceSize * pOffset,VkDeviceSize * pRowPitchAlignment,uint32_t doLock)25350 void VkEncoder::vkGetLinearImageLayoutGOOGLE(VkDevice device, VkFormat format,
25351 VkDeviceSize* pOffset,
25352 VkDeviceSize* pRowPitchAlignment, uint32_t doLock) {
25353 (void)doLock;
25354 bool queueSubmitWithCommandsEnabled =
25355 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25356 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25357 auto stream = mImpl->stream();
25358 auto pool = mImpl->pool();
25359 VkDevice local_device;
25360 VkFormat local_format;
25361 local_device = device;
25362 local_format = format;
25363 size_t count = 0;
25364 size_t* countPtr = &count;
25365 {
25366 uint64_t cgen_var_0;
25367 *countPtr += 1 * 8;
25368 *countPtr += sizeof(VkFormat);
25369 *countPtr += sizeof(VkDeviceSize);
25370 *countPtr += sizeof(VkDeviceSize);
25371 }
25372 uint32_t packetSize_vkGetLinearImageLayoutGOOGLE =
25373 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25374 uint8_t* streamPtr = stream->reserve(packetSize_vkGetLinearImageLayoutGOOGLE);
25375 uint8_t* packetBeginPtr = streamPtr;
25376 uint8_t** streamPtrPtr = &streamPtr;
25377 uint32_t opcode_vkGetLinearImageLayoutGOOGLE = OP_vkGetLinearImageLayoutGOOGLE;
25378 uint32_t seqno;
25379 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25380 memcpy(streamPtr, &opcode_vkGetLinearImageLayoutGOOGLE, sizeof(uint32_t));
25381 streamPtr += sizeof(uint32_t);
25382 memcpy(streamPtr, &packetSize_vkGetLinearImageLayoutGOOGLE, sizeof(uint32_t));
25383 streamPtr += sizeof(uint32_t);
25384 if (queueSubmitWithCommandsEnabled) {
25385 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25386 streamPtr += sizeof(uint32_t);
25387 }
25388 uint64_t cgen_var_0;
25389 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
25390 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25391 *streamPtrPtr += 1 * 8;
25392 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
25393 *streamPtrPtr += sizeof(VkFormat);
25394 memcpy(*streamPtrPtr, (VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
25395 *streamPtrPtr += sizeof(VkDeviceSize);
25396 memcpy(*streamPtrPtr, (VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
25397 *streamPtrPtr += sizeof(VkDeviceSize);
25398 stream->read((VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
25399 stream->read((VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
25400 ++encodeCount;
25401 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25402 pool->freeAll();
25403 stream->clearPool();
25404 }
25405 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25406 }
25407
vkGetLinearImageLayout2GOOGLE(VkDevice device,const VkImageCreateInfo * pCreateInfo,VkDeviceSize * pOffset,VkDeviceSize * pRowPitchAlignment,uint32_t doLock)25408 void VkEncoder::vkGetLinearImageLayout2GOOGLE(VkDevice device, const VkImageCreateInfo* pCreateInfo,
25409 VkDeviceSize* pOffset,
25410 VkDeviceSize* pRowPitchAlignment, uint32_t doLock) {
25411 (void)doLock;
25412 bool queueSubmitWithCommandsEnabled =
25413 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25414 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25415 auto stream = mImpl->stream();
25416 auto pool = mImpl->pool();
25417 VkDevice local_device;
25418 VkImageCreateInfo* local_pCreateInfo;
25419 local_device = device;
25420 local_pCreateInfo = nullptr;
25421 if (pCreateInfo) {
25422 local_pCreateInfo = (VkImageCreateInfo*)pool->alloc(sizeof(const VkImageCreateInfo));
25423 deepcopy_VkImageCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
25424 (VkImageCreateInfo*)(local_pCreateInfo));
25425 }
25426 if (local_pCreateInfo) {
25427 sResourceTracker->transformImpl_VkImageCreateInfo_tohost(local_pCreateInfo, 1);
25428 transform_tohost_VkImageCreateInfo(sResourceTracker,
25429 (VkImageCreateInfo*)(local_pCreateInfo));
25430 }
25431 size_t count = 0;
25432 size_t* countPtr = &count;
25433 {
25434 uint64_t cgen_var_0;
25435 *countPtr += 1 * 8;
25436 count_VkImageCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25437 (VkImageCreateInfo*)(local_pCreateInfo), countPtr);
25438 *countPtr += sizeof(VkDeviceSize);
25439 *countPtr += sizeof(VkDeviceSize);
25440 }
25441 uint32_t packetSize_vkGetLinearImageLayout2GOOGLE =
25442 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25443 uint8_t* streamPtr = stream->reserve(packetSize_vkGetLinearImageLayout2GOOGLE);
25444 uint8_t* packetBeginPtr = streamPtr;
25445 uint8_t** streamPtrPtr = &streamPtr;
25446 uint32_t opcode_vkGetLinearImageLayout2GOOGLE = OP_vkGetLinearImageLayout2GOOGLE;
25447 uint32_t seqno;
25448 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25449 memcpy(streamPtr, &opcode_vkGetLinearImageLayout2GOOGLE, sizeof(uint32_t));
25450 streamPtr += sizeof(uint32_t);
25451 memcpy(streamPtr, &packetSize_vkGetLinearImageLayout2GOOGLE, sizeof(uint32_t));
25452 streamPtr += sizeof(uint32_t);
25453 if (queueSubmitWithCommandsEnabled) {
25454 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25455 streamPtr += sizeof(uint32_t);
25456 }
25457 uint64_t cgen_var_0;
25458 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
25459 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25460 *streamPtrPtr += 1 * 8;
25461 reservedmarshal_VkImageCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25462 (VkImageCreateInfo*)(local_pCreateInfo), streamPtrPtr);
25463 memcpy(*streamPtrPtr, (VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
25464 *streamPtrPtr += sizeof(VkDeviceSize);
25465 memcpy(*streamPtrPtr, (VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
25466 *streamPtrPtr += sizeof(VkDeviceSize);
25467 stream->read((VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
25468 stream->read((VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
25469 ++encodeCount;
25470 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25471 pool->freeAll();
25472 stream->clearPool();
25473 }
25474 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25475 }
25476
vkQueueFlushCommandsGOOGLE(VkQueue queue,VkCommandBuffer commandBuffer,VkDeviceSize dataSize,const void * pData,uint32_t doLock)25477 void VkEncoder::vkQueueFlushCommandsGOOGLE(VkQueue queue, VkCommandBuffer commandBuffer,
25478 VkDeviceSize dataSize, const void* pData,
25479 uint32_t doLock) {
25480 #include "vkQueueFlushCommandsGOOGLE_encode_impl.cpp.inl"
25481 }
25482
vkQueueCommitDescriptorSetUpdatesGOOGLE(VkQueue queue,uint32_t descriptorPoolCount,const VkDescriptorPool * pDescriptorPools,uint32_t descriptorSetCount,const VkDescriptorSetLayout * pSetLayouts,const uint64_t * pDescriptorSetPoolIds,const uint32_t * pDescriptorSetWhichPool,const uint32_t * pDescriptorSetPendingAllocation,const uint32_t * pDescriptorWriteStartingIndices,uint32_t pendingDescriptorWriteCount,const VkWriteDescriptorSet * pPendingDescriptorWrites,uint32_t doLock)25483 void VkEncoder::vkQueueCommitDescriptorSetUpdatesGOOGLE(
25484 VkQueue queue, uint32_t descriptorPoolCount, const VkDescriptorPool* pDescriptorPools,
25485 uint32_t descriptorSetCount, const VkDescriptorSetLayout* pSetLayouts,
25486 const uint64_t* pDescriptorSetPoolIds, const uint32_t* pDescriptorSetWhichPool,
25487 const uint32_t* pDescriptorSetPendingAllocation,
25488 const uint32_t* pDescriptorWriteStartingIndices, uint32_t pendingDescriptorWriteCount,
25489 const VkWriteDescriptorSet* pPendingDescriptorWrites, uint32_t doLock) {
25490 (void)doLock;
25491 bool queueSubmitWithCommandsEnabled =
25492 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25493 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25494 auto stream = mImpl->stream();
25495 auto pool = mImpl->pool();
25496 VkQueue local_queue;
25497 uint32_t local_descriptorPoolCount;
25498 VkDescriptorPool* local_pDescriptorPools;
25499 uint32_t local_descriptorSetCount;
25500 VkDescriptorSetLayout* local_pSetLayouts;
25501 uint64_t* local_pDescriptorSetPoolIds;
25502 uint32_t* local_pDescriptorSetWhichPool;
25503 uint32_t* local_pDescriptorSetPendingAllocation;
25504 uint32_t* local_pDescriptorWriteStartingIndices;
25505 uint32_t local_pendingDescriptorWriteCount;
25506 VkWriteDescriptorSet* local_pPendingDescriptorWrites;
25507 local_queue = queue;
25508 local_descriptorPoolCount = descriptorPoolCount;
25509 // Avoiding deepcopy for pDescriptorPools
25510 local_pDescriptorPools = (VkDescriptorPool*)pDescriptorPools;
25511 local_descriptorSetCount = descriptorSetCount;
25512 // Avoiding deepcopy for pSetLayouts
25513 local_pSetLayouts = (VkDescriptorSetLayout*)pSetLayouts;
25514 // Avoiding deepcopy for pDescriptorSetPoolIds
25515 local_pDescriptorSetPoolIds = (uint64_t*)pDescriptorSetPoolIds;
25516 // Avoiding deepcopy for pDescriptorSetWhichPool
25517 local_pDescriptorSetWhichPool = (uint32_t*)pDescriptorSetWhichPool;
25518 // Avoiding deepcopy for pDescriptorSetPendingAllocation
25519 local_pDescriptorSetPendingAllocation = (uint32_t*)pDescriptorSetPendingAllocation;
25520 // Avoiding deepcopy for pDescriptorWriteStartingIndices
25521 local_pDescriptorWriteStartingIndices = (uint32_t*)pDescriptorWriteStartingIndices;
25522 local_pendingDescriptorWriteCount = pendingDescriptorWriteCount;
25523 local_pPendingDescriptorWrites = nullptr;
25524 if (pPendingDescriptorWrites) {
25525 local_pPendingDescriptorWrites = (VkWriteDescriptorSet*)pool->alloc(
25526 ((pendingDescriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
25527 for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i) {
25528 deepcopy_VkWriteDescriptorSet(
25529 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pPendingDescriptorWrites + i,
25530 (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i));
25531 }
25532 }
25533 if (local_pPendingDescriptorWrites) {
25534 for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i) {
25535 transform_tohost_VkWriteDescriptorSet(
25536 sResourceTracker, (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i));
25537 }
25538 }
25539 size_t count = 0;
25540 size_t* countPtr = &count;
25541 {
25542 uint64_t cgen_var_0;
25543 *countPtr += 1 * 8;
25544 *countPtr += sizeof(uint32_t);
25545 if (((descriptorPoolCount))) {
25546 *countPtr += ((descriptorPoolCount)) * 8;
25547 }
25548 *countPtr += sizeof(uint32_t);
25549 if (((descriptorSetCount))) {
25550 *countPtr += ((descriptorSetCount)) * 8;
25551 }
25552 *countPtr += ((descriptorSetCount)) * sizeof(uint64_t);
25553 *countPtr += ((descriptorSetCount)) * sizeof(uint32_t);
25554 *countPtr += ((descriptorSetCount)) * sizeof(uint32_t);
25555 *countPtr += ((descriptorSetCount)) * sizeof(uint32_t);
25556 *countPtr += sizeof(uint32_t);
25557 for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i) {
25558 count_VkWriteDescriptorSet(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25559 (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i),
25560 countPtr);
25561 }
25562 }
25563 uint32_t packetSize_vkQueueCommitDescriptorSetUpdatesGOOGLE =
25564 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25565 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueCommitDescriptorSetUpdatesGOOGLE);
25566 uint8_t* packetBeginPtr = streamPtr;
25567 uint8_t** streamPtrPtr = &streamPtr;
25568 uint32_t opcode_vkQueueCommitDescriptorSetUpdatesGOOGLE =
25569 OP_vkQueueCommitDescriptorSetUpdatesGOOGLE;
25570 uint32_t seqno;
25571 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25572 memcpy(streamPtr, &opcode_vkQueueCommitDescriptorSetUpdatesGOOGLE, sizeof(uint32_t));
25573 streamPtr += sizeof(uint32_t);
25574 memcpy(streamPtr, &packetSize_vkQueueCommitDescriptorSetUpdatesGOOGLE, sizeof(uint32_t));
25575 streamPtr += sizeof(uint32_t);
25576 if (queueSubmitWithCommandsEnabled) {
25577 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25578 streamPtr += sizeof(uint32_t);
25579 }
25580 uint64_t cgen_var_0;
25581 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
25582 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25583 *streamPtrPtr += 1 * 8;
25584 memcpy(*streamPtrPtr, (uint32_t*)&local_descriptorPoolCount, sizeof(uint32_t));
25585 *streamPtrPtr += sizeof(uint32_t);
25586 if (((descriptorPoolCount))) {
25587 uint8_t* cgen_var_1_ptr = (uint8_t*)(*streamPtrPtr);
25588 for (uint32_t k = 0; k < ((descriptorPoolCount)); ++k) {
25589 uint64_t tmpval = get_host_u64_VkDescriptorPool(local_pDescriptorPools[k]);
25590 memcpy(cgen_var_1_ptr + k * 8, &tmpval, sizeof(uint64_t));
25591 }
25592 *streamPtrPtr += 8 * ((descriptorPoolCount));
25593 }
25594 memcpy(*streamPtrPtr, (uint32_t*)&local_descriptorSetCount, sizeof(uint32_t));
25595 *streamPtrPtr += sizeof(uint32_t);
25596 if (((descriptorSetCount))) {
25597 uint8_t* cgen_var_2_ptr = (uint8_t*)(*streamPtrPtr);
25598 for (uint32_t k = 0; k < ((descriptorSetCount)); ++k) {
25599 uint64_t tmpval = get_host_u64_VkDescriptorSetLayout(local_pSetLayouts[k]);
25600 memcpy(cgen_var_2_ptr + k * 8, &tmpval, sizeof(uint64_t));
25601 }
25602 *streamPtrPtr += 8 * ((descriptorSetCount));
25603 }
25604 memcpy(*streamPtrPtr, (uint64_t*)local_pDescriptorSetPoolIds,
25605 ((descriptorSetCount)) * sizeof(uint64_t));
25606 *streamPtrPtr += ((descriptorSetCount)) * sizeof(uint64_t);
25607 memcpy(*streamPtrPtr, (uint32_t*)local_pDescriptorSetWhichPool,
25608 ((descriptorSetCount)) * sizeof(uint32_t));
25609 *streamPtrPtr += ((descriptorSetCount)) * sizeof(uint32_t);
25610 memcpy(*streamPtrPtr, (uint32_t*)local_pDescriptorSetPendingAllocation,
25611 ((descriptorSetCount)) * sizeof(uint32_t));
25612 *streamPtrPtr += ((descriptorSetCount)) * sizeof(uint32_t);
25613 memcpy(*streamPtrPtr, (uint32_t*)local_pDescriptorWriteStartingIndices,
25614 ((descriptorSetCount)) * sizeof(uint32_t));
25615 *streamPtrPtr += ((descriptorSetCount)) * sizeof(uint32_t);
25616 memcpy(*streamPtrPtr, (uint32_t*)&local_pendingDescriptorWriteCount, sizeof(uint32_t));
25617 *streamPtrPtr += sizeof(uint32_t);
25618 for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i) {
25619 reservedmarshal_VkWriteDescriptorSet(
25620 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25621 (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i), streamPtrPtr);
25622 }
25623 stream->flush();
25624 ++encodeCount;
25625 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25626 pool->freeAll();
25627 stream->clearPool();
25628 }
25629 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25630 }
25631
vkCollectDescriptorPoolIdsGOOGLE(VkDevice device,VkDescriptorPool descriptorPool,uint32_t * pPoolIdCount,uint64_t * pPoolIds,uint32_t doLock)25632 void VkEncoder::vkCollectDescriptorPoolIdsGOOGLE(VkDevice device, VkDescriptorPool descriptorPool,
25633 uint32_t* pPoolIdCount, uint64_t* pPoolIds,
25634 uint32_t doLock) {
25635 (void)doLock;
25636 bool queueSubmitWithCommandsEnabled =
25637 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25638 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25639 auto stream = mImpl->stream();
25640 auto pool = mImpl->pool();
25641 VkDevice local_device;
25642 VkDescriptorPool local_descriptorPool;
25643 local_device = device;
25644 local_descriptorPool = descriptorPool;
25645 size_t count = 0;
25646 size_t* countPtr = &count;
25647 {
25648 uint64_t cgen_var_0;
25649 *countPtr += 1 * 8;
25650 uint64_t cgen_var_1;
25651 *countPtr += 1 * 8;
25652 *countPtr += sizeof(uint32_t);
25653 // WARNING PTR CHECK
25654 *countPtr += 8;
25655 if (pPoolIds) {
25656 if (pPoolIdCount) {
25657 *countPtr += (*(pPoolIdCount)) * sizeof(uint64_t);
25658 }
25659 }
25660 }
25661 uint32_t packetSize_vkCollectDescriptorPoolIdsGOOGLE =
25662 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25663 uint8_t* streamPtr = stream->reserve(packetSize_vkCollectDescriptorPoolIdsGOOGLE);
25664 uint8_t* packetBeginPtr = streamPtr;
25665 uint8_t** streamPtrPtr = &streamPtr;
25666 uint32_t opcode_vkCollectDescriptorPoolIdsGOOGLE = OP_vkCollectDescriptorPoolIdsGOOGLE;
25667 uint32_t seqno;
25668 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25669 memcpy(streamPtr, &opcode_vkCollectDescriptorPoolIdsGOOGLE, sizeof(uint32_t));
25670 streamPtr += sizeof(uint32_t);
25671 memcpy(streamPtr, &packetSize_vkCollectDescriptorPoolIdsGOOGLE, sizeof(uint32_t));
25672 streamPtr += sizeof(uint32_t);
25673 if (queueSubmitWithCommandsEnabled) {
25674 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25675 streamPtr += sizeof(uint32_t);
25676 }
25677 uint64_t cgen_var_0;
25678 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
25679 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25680 *streamPtrPtr += 1 * 8;
25681 uint64_t cgen_var_1;
25682 *&cgen_var_1 = get_host_u64_VkDescriptorPool((*&local_descriptorPool));
25683 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
25684 *streamPtrPtr += 1 * 8;
25685 memcpy(*streamPtrPtr, (uint32_t*)pPoolIdCount, sizeof(uint32_t));
25686 *streamPtrPtr += sizeof(uint32_t);
25687 // WARNING PTR CHECK
25688 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pPoolIds;
25689 memcpy((*streamPtrPtr), &cgen_var_2, 8);
25690 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25691 *streamPtrPtr += 8;
25692 if (pPoolIds) {
25693 memcpy(*streamPtrPtr, (uint64_t*)pPoolIds, (*(pPoolIdCount)) * sizeof(uint64_t));
25694 *streamPtrPtr += (*(pPoolIdCount)) * sizeof(uint64_t);
25695 }
25696 stream->read((uint32_t*)pPoolIdCount, sizeof(uint32_t));
25697 // WARNING PTR CHECK
25698 uint64_t* check_pPoolIds;
25699 check_pPoolIds = (uint64_t*)(uintptr_t)stream->getBe64();
25700 if (pPoolIds) {
25701 if (!(check_pPoolIds)) {
25702 fprintf(stderr, "fatal: pPoolIds inconsistent between guest and host\n");
25703 }
25704 stream->read((uint64_t*)pPoolIds, (*(pPoolIdCount)) * sizeof(uint64_t));
25705 }
25706 ++encodeCount;
25707 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25708 pool->freeAll();
25709 stream->clearPool();
25710 }
25711 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25712 }
25713
vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(VkQueue queue,uint32_t waitSemaphoreCount,const VkSemaphore * pWaitSemaphores,VkImage image,uint32_t doLock)25714 void VkEncoder::vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(VkQueue queue,
25715 uint32_t waitSemaphoreCount,
25716 const VkSemaphore* pWaitSemaphores,
25717 VkImage image, uint32_t doLock) {
25718 (void)doLock;
25719 bool queueSubmitWithCommandsEnabled =
25720 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25721 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25722 auto stream = mImpl->stream();
25723 auto pool = mImpl->pool();
25724 VkQueue local_queue;
25725 uint32_t local_waitSemaphoreCount;
25726 VkSemaphore* local_pWaitSemaphores;
25727 VkImage local_image;
25728 local_queue = queue;
25729 local_waitSemaphoreCount = waitSemaphoreCount;
25730 // Avoiding deepcopy for pWaitSemaphores
25731 local_pWaitSemaphores = (VkSemaphore*)pWaitSemaphores;
25732 local_image = image;
25733 size_t count = 0;
25734 size_t* countPtr = &count;
25735 {
25736 uint64_t cgen_var_0;
25737 *countPtr += 1 * 8;
25738 *countPtr += sizeof(uint32_t);
25739 // WARNING PTR CHECK
25740 *countPtr += 8;
25741 if (local_pWaitSemaphores) {
25742 if (((waitSemaphoreCount))) {
25743 *countPtr += ((waitSemaphoreCount)) * 8;
25744 }
25745 }
25746 uint64_t cgen_var_1;
25747 *countPtr += 1 * 8;
25748 }
25749 uint32_t packetSize_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE =
25750 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25751 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE);
25752 uint8_t* packetBeginPtr = streamPtr;
25753 uint8_t** streamPtrPtr = &streamPtr;
25754 uint32_t opcode_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE =
25755 OP_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE;
25756 uint32_t seqno;
25757 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25758 memcpy(streamPtr, &opcode_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE, sizeof(uint32_t));
25759 streamPtr += sizeof(uint32_t);
25760 memcpy(streamPtr, &packetSize_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE, sizeof(uint32_t));
25761 streamPtr += sizeof(uint32_t);
25762 if (queueSubmitWithCommandsEnabled) {
25763 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25764 streamPtr += sizeof(uint32_t);
25765 }
25766 uint64_t cgen_var_0;
25767 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
25768 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25769 *streamPtrPtr += 1 * 8;
25770 memcpy(*streamPtrPtr, (uint32_t*)&local_waitSemaphoreCount, sizeof(uint32_t));
25771 *streamPtrPtr += sizeof(uint32_t);
25772 // WARNING PTR CHECK
25773 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pWaitSemaphores;
25774 memcpy((*streamPtrPtr), &cgen_var_1, 8);
25775 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25776 *streamPtrPtr += 8;
25777 if (local_pWaitSemaphores) {
25778 if (((waitSemaphoreCount))) {
25779 uint8_t* cgen_var_1_0_ptr = (uint8_t*)(*streamPtrPtr);
25780 for (uint32_t k = 0; k < ((waitSemaphoreCount)); ++k) {
25781 uint64_t tmpval = get_host_u64_VkSemaphore(local_pWaitSemaphores[k]);
25782 memcpy(cgen_var_1_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
25783 }
25784 *streamPtrPtr += 8 * ((waitSemaphoreCount));
25785 }
25786 }
25787 uint64_t cgen_var_2;
25788 *&cgen_var_2 = get_host_u64_VkImage((*&local_image));
25789 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
25790 *streamPtrPtr += 1 * 8;
25791 stream->flush();
25792 ++encodeCount;
25793 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25794 pool->freeAll();
25795 stream->clearPool();
25796 }
25797 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25798 }
25799
vkQueueFlushCommandsFromAuxMemoryGOOGLE(VkQueue queue,VkCommandBuffer commandBuffer,VkDeviceMemory deviceMemory,VkDeviceSize dataOffset,VkDeviceSize dataSize,uint32_t doLock)25800 void VkEncoder::vkQueueFlushCommandsFromAuxMemoryGOOGLE(VkQueue queue,
25801 VkCommandBuffer commandBuffer,
25802 VkDeviceMemory deviceMemory,
25803 VkDeviceSize dataOffset,
25804 VkDeviceSize dataSize, uint32_t doLock) {
25805 (void)doLock;
25806 bool queueSubmitWithCommandsEnabled =
25807 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25808 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25809 auto stream = mImpl->stream();
25810 auto pool = mImpl->pool();
25811 VkQueue local_queue;
25812 VkCommandBuffer local_commandBuffer;
25813 VkDeviceMemory local_deviceMemory;
25814 VkDeviceSize local_dataOffset;
25815 VkDeviceSize local_dataSize;
25816 local_queue = queue;
25817 local_commandBuffer = commandBuffer;
25818 local_deviceMemory = deviceMemory;
25819 local_dataOffset = dataOffset;
25820 local_dataSize = dataSize;
25821 size_t count = 0;
25822 size_t* countPtr = &count;
25823 {
25824 uint64_t cgen_var_0;
25825 *countPtr += 1 * 8;
25826 uint64_t cgen_var_1;
25827 *countPtr += 1 * 8;
25828 uint64_t cgen_var_2;
25829 *countPtr += 1 * 8;
25830 *countPtr += sizeof(VkDeviceSize);
25831 *countPtr += sizeof(VkDeviceSize);
25832 }
25833 uint32_t packetSize_vkQueueFlushCommandsFromAuxMemoryGOOGLE =
25834 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25835 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueFlushCommandsFromAuxMemoryGOOGLE);
25836 uint8_t* packetBeginPtr = streamPtr;
25837 uint8_t** streamPtrPtr = &streamPtr;
25838 uint32_t opcode_vkQueueFlushCommandsFromAuxMemoryGOOGLE =
25839 OP_vkQueueFlushCommandsFromAuxMemoryGOOGLE;
25840 uint32_t seqno;
25841 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25842 memcpy(streamPtr, &opcode_vkQueueFlushCommandsFromAuxMemoryGOOGLE, sizeof(uint32_t));
25843 streamPtr += sizeof(uint32_t);
25844 memcpy(streamPtr, &packetSize_vkQueueFlushCommandsFromAuxMemoryGOOGLE, sizeof(uint32_t));
25845 streamPtr += sizeof(uint32_t);
25846 if (queueSubmitWithCommandsEnabled) {
25847 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25848 streamPtr += sizeof(uint32_t);
25849 }
25850 uint64_t cgen_var_0;
25851 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
25852 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25853 *streamPtrPtr += 1 * 8;
25854 uint64_t cgen_var_1;
25855 *&cgen_var_1 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
25856 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
25857 *streamPtrPtr += 1 * 8;
25858 uint64_t cgen_var_2;
25859 *&cgen_var_2 = get_host_u64_VkDeviceMemory((*&local_deviceMemory));
25860 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
25861 *streamPtrPtr += 1 * 8;
25862 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_dataOffset, sizeof(VkDeviceSize));
25863 *streamPtrPtr += sizeof(VkDeviceSize);
25864 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_dataSize, sizeof(VkDeviceSize));
25865 *streamPtrPtr += sizeof(VkDeviceSize);
25866 stream->flush();
25867 ++encodeCount;
25868 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25869 pool->freeAll();
25870 stream->clearPool();
25871 }
25872 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25873 }
25874
vkGetBlobGOOGLE(VkDevice device,VkDeviceMemory memory,uint32_t doLock)25875 VkResult VkEncoder::vkGetBlobGOOGLE(VkDevice device, VkDeviceMemory memory, uint32_t doLock) {
25876 (void)doLock;
25877 bool queueSubmitWithCommandsEnabled =
25878 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25879 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25880 auto stream = mImpl->stream();
25881 auto pool = mImpl->pool();
25882 VkDevice local_device;
25883 VkDeviceMemory local_memory;
25884 local_device = device;
25885 local_memory = memory;
25886 sResourceTracker->deviceMemoryTransform_tohost(
25887 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0,
25888 (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
25889 size_t count = 0;
25890 size_t* countPtr = &count;
25891 {
25892 uint64_t cgen_var_0;
25893 *countPtr += 1 * 8;
25894 uint64_t cgen_var_1;
25895 *countPtr += 1 * 8;
25896 }
25897 uint32_t packetSize_vkGetBlobGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25898 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBlobGOOGLE);
25899 uint8_t* packetBeginPtr = streamPtr;
25900 uint8_t** streamPtrPtr = &streamPtr;
25901 uint32_t opcode_vkGetBlobGOOGLE = OP_vkGetBlobGOOGLE;
25902 uint32_t seqno;
25903 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25904 memcpy(streamPtr, &opcode_vkGetBlobGOOGLE, sizeof(uint32_t));
25905 streamPtr += sizeof(uint32_t);
25906 memcpy(streamPtr, &packetSize_vkGetBlobGOOGLE, sizeof(uint32_t));
25907 streamPtr += sizeof(uint32_t);
25908 if (queueSubmitWithCommandsEnabled) {
25909 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25910 streamPtr += sizeof(uint32_t);
25911 }
25912 uint64_t cgen_var_0;
25913 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
25914 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25915 *streamPtrPtr += 1 * 8;
25916 uint64_t cgen_var_1;
25917 *&cgen_var_1 = get_host_u64_VkDeviceMemory((*&local_memory));
25918 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
25919 *streamPtrPtr += 1 * 8;
25920 VkResult vkGetBlobGOOGLE_VkResult_return = (VkResult)0;
25921 stream->read(&vkGetBlobGOOGLE_VkResult_return, sizeof(VkResult));
25922 ++encodeCount;
25923 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25924 pool->freeAll();
25925 stream->clearPool();
25926 }
25927 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25928 return vkGetBlobGOOGLE_VkResult_return;
25929 }
25930
vkUpdateDescriptorSetWithTemplateSized2GOOGLE(VkDevice device,VkDescriptorSet descriptorSet,VkDescriptorUpdateTemplate descriptorUpdateTemplate,uint32_t imageInfoCount,uint32_t bufferInfoCount,uint32_t bufferViewCount,uint32_t inlineUniformBlockCount,const uint32_t * pImageInfoEntryIndices,const uint32_t * pBufferInfoEntryIndices,const uint32_t * pBufferViewEntryIndices,const VkDescriptorImageInfo * pImageInfos,const VkDescriptorBufferInfo * pBufferInfos,const VkBufferView * pBufferViews,const uint8_t * pInlineUniformBlockData,uint32_t doLock)25931 void VkEncoder::vkUpdateDescriptorSetWithTemplateSized2GOOGLE(
25932 VkDevice device, VkDescriptorSet descriptorSet,
25933 VkDescriptorUpdateTemplate descriptorUpdateTemplate, uint32_t imageInfoCount,
25934 uint32_t bufferInfoCount, uint32_t bufferViewCount, uint32_t inlineUniformBlockCount,
25935 const uint32_t* pImageInfoEntryIndices, const uint32_t* pBufferInfoEntryIndices,
25936 const uint32_t* pBufferViewEntryIndices, const VkDescriptorImageInfo* pImageInfos,
25937 const VkDescriptorBufferInfo* pBufferInfos, const VkBufferView* pBufferViews,
25938 const uint8_t* pInlineUniformBlockData, uint32_t doLock) {
25939 (void)doLock;
25940 bool queueSubmitWithCommandsEnabled =
25941 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25942 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25943 auto stream = mImpl->stream();
25944 auto pool = mImpl->pool();
25945 VkDevice local_device;
25946 VkDescriptorSet local_descriptorSet;
25947 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
25948 uint32_t local_imageInfoCount;
25949 uint32_t local_bufferInfoCount;
25950 uint32_t local_bufferViewCount;
25951 uint32_t local_inlineUniformBlockCount;
25952 uint32_t* local_pImageInfoEntryIndices;
25953 uint32_t* local_pBufferInfoEntryIndices;
25954 uint32_t* local_pBufferViewEntryIndices;
25955 VkDescriptorImageInfo* local_pImageInfos;
25956 VkDescriptorBufferInfo* local_pBufferInfos;
25957 VkBufferView* local_pBufferViews;
25958 uint8_t* local_pInlineUniformBlockData;
25959 local_device = device;
25960 local_descriptorSet = descriptorSet;
25961 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
25962 local_imageInfoCount = imageInfoCount;
25963 local_bufferInfoCount = bufferInfoCount;
25964 local_bufferViewCount = bufferViewCount;
25965 local_inlineUniformBlockCount = inlineUniformBlockCount;
25966 // Avoiding deepcopy for pImageInfoEntryIndices
25967 local_pImageInfoEntryIndices = (uint32_t*)pImageInfoEntryIndices;
25968 // Avoiding deepcopy for pBufferInfoEntryIndices
25969 local_pBufferInfoEntryIndices = (uint32_t*)pBufferInfoEntryIndices;
25970 // Avoiding deepcopy for pBufferViewEntryIndices
25971 local_pBufferViewEntryIndices = (uint32_t*)pBufferViewEntryIndices;
25972 local_pImageInfos = nullptr;
25973 if (pImageInfos) {
25974 local_pImageInfos = (VkDescriptorImageInfo*)pool->alloc(
25975 ((imageInfoCount)) * sizeof(const VkDescriptorImageInfo));
25976 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
25977 deepcopy_VkDescriptorImageInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageInfos + i,
25978 (VkDescriptorImageInfo*)(local_pImageInfos + i));
25979 }
25980 }
25981 local_pBufferInfos = nullptr;
25982 if (pBufferInfos) {
25983 local_pBufferInfos = (VkDescriptorBufferInfo*)pool->alloc(
25984 ((bufferInfoCount)) * sizeof(const VkDescriptorBufferInfo));
25985 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
25986 deepcopy_VkDescriptorBufferInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBufferInfos + i,
25987 (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
25988 }
25989 }
25990 // Avoiding deepcopy for pBufferViews
25991 local_pBufferViews = (VkBufferView*)pBufferViews;
25992 // Avoiding deepcopy for pInlineUniformBlockData
25993 local_pInlineUniformBlockData = (uint8_t*)pInlineUniformBlockData;
25994 if (local_pImageInfos) {
25995 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
25996 transform_tohost_VkDescriptorImageInfo(sResourceTracker,
25997 (VkDescriptorImageInfo*)(local_pImageInfos + i));
25998 }
25999 }
26000 if (local_pBufferInfos) {
26001 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
26002 transform_tohost_VkDescriptorBufferInfo(
26003 sResourceTracker, (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
26004 }
26005 }
26006 size_t count = 0;
26007 size_t* countPtr = &count;
26008 {
26009 uint64_t cgen_var_0;
26010 *countPtr += 1 * 8;
26011 uint64_t cgen_var_1;
26012 *countPtr += 1 * 8;
26013 uint64_t cgen_var_2;
26014 *countPtr += 1 * 8;
26015 *countPtr += sizeof(uint32_t);
26016 *countPtr += sizeof(uint32_t);
26017 *countPtr += sizeof(uint32_t);
26018 *countPtr += sizeof(uint32_t);
26019 // WARNING PTR CHECK
26020 *countPtr += 8;
26021 if (local_pImageInfoEntryIndices) {
26022 *countPtr += ((imageInfoCount)) * sizeof(uint32_t);
26023 }
26024 // WARNING PTR CHECK
26025 *countPtr += 8;
26026 if (local_pBufferInfoEntryIndices) {
26027 *countPtr += ((bufferInfoCount)) * sizeof(uint32_t);
26028 }
26029 // WARNING PTR CHECK
26030 *countPtr += 8;
26031 if (local_pBufferViewEntryIndices) {
26032 *countPtr += ((bufferViewCount)) * sizeof(uint32_t);
26033 }
26034 // WARNING PTR CHECK
26035 *countPtr += 8;
26036 if (local_pImageInfos) {
26037 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
26038 count_VkDescriptorImageInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
26039 (VkDescriptorImageInfo*)(local_pImageInfos + i),
26040 countPtr);
26041 }
26042 }
26043 // WARNING PTR CHECK
26044 *countPtr += 8;
26045 if (local_pBufferInfos) {
26046 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
26047 count_VkDescriptorBufferInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
26048 (VkDescriptorBufferInfo*)(local_pBufferInfos + i),
26049 countPtr);
26050 }
26051 }
26052 // WARNING PTR CHECK
26053 *countPtr += 8;
26054 if (local_pBufferViews) {
26055 if (((bufferViewCount))) {
26056 *countPtr += ((bufferViewCount)) * 8;
26057 }
26058 }
26059 // WARNING PTR CHECK
26060 *countPtr += 8;
26061 if (local_pInlineUniformBlockData) {
26062 *countPtr += ((inlineUniformBlockCount)) * sizeof(uint8_t);
26063 }
26064 }
26065 uint32_t packetSize_vkUpdateDescriptorSetWithTemplateSized2GOOGLE =
26066 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26067 uint8_t* streamPtr = stream->reserve(packetSize_vkUpdateDescriptorSetWithTemplateSized2GOOGLE);
26068 uint8_t* packetBeginPtr = streamPtr;
26069 uint8_t** streamPtrPtr = &streamPtr;
26070 uint32_t opcode_vkUpdateDescriptorSetWithTemplateSized2GOOGLE =
26071 OP_vkUpdateDescriptorSetWithTemplateSized2GOOGLE;
26072 uint32_t seqno;
26073 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26074 memcpy(streamPtr, &opcode_vkUpdateDescriptorSetWithTemplateSized2GOOGLE, sizeof(uint32_t));
26075 streamPtr += sizeof(uint32_t);
26076 memcpy(streamPtr, &packetSize_vkUpdateDescriptorSetWithTemplateSized2GOOGLE, sizeof(uint32_t));
26077 streamPtr += sizeof(uint32_t);
26078 if (queueSubmitWithCommandsEnabled) {
26079 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26080 streamPtr += sizeof(uint32_t);
26081 }
26082 uint64_t cgen_var_0;
26083 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
26084 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26085 *streamPtrPtr += 1 * 8;
26086 uint64_t cgen_var_1;
26087 *&cgen_var_1 = get_host_u64_VkDescriptorSet((*&local_descriptorSet));
26088 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
26089 *streamPtrPtr += 1 * 8;
26090 uint64_t cgen_var_2;
26091 *&cgen_var_2 = get_host_u64_VkDescriptorUpdateTemplate((*&local_descriptorUpdateTemplate));
26092 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
26093 *streamPtrPtr += 1 * 8;
26094 memcpy(*streamPtrPtr, (uint32_t*)&local_imageInfoCount, sizeof(uint32_t));
26095 *streamPtrPtr += sizeof(uint32_t);
26096 memcpy(*streamPtrPtr, (uint32_t*)&local_bufferInfoCount, sizeof(uint32_t));
26097 *streamPtrPtr += sizeof(uint32_t);
26098 memcpy(*streamPtrPtr, (uint32_t*)&local_bufferViewCount, sizeof(uint32_t));
26099 *streamPtrPtr += sizeof(uint32_t);
26100 memcpy(*streamPtrPtr, (uint32_t*)&local_inlineUniformBlockCount, sizeof(uint32_t));
26101 *streamPtrPtr += sizeof(uint32_t);
26102 // WARNING PTR CHECK
26103 uint64_t cgen_var_3 = (uint64_t)(uintptr_t)local_pImageInfoEntryIndices;
26104 memcpy((*streamPtrPtr), &cgen_var_3, 8);
26105 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26106 *streamPtrPtr += 8;
26107 if (local_pImageInfoEntryIndices) {
26108 memcpy(*streamPtrPtr, (uint32_t*)local_pImageInfoEntryIndices,
26109 ((imageInfoCount)) * sizeof(uint32_t));
26110 *streamPtrPtr += ((imageInfoCount)) * sizeof(uint32_t);
26111 }
26112 // WARNING PTR CHECK
26113 uint64_t cgen_var_4 = (uint64_t)(uintptr_t)local_pBufferInfoEntryIndices;
26114 memcpy((*streamPtrPtr), &cgen_var_4, 8);
26115 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26116 *streamPtrPtr += 8;
26117 if (local_pBufferInfoEntryIndices) {
26118 memcpy(*streamPtrPtr, (uint32_t*)local_pBufferInfoEntryIndices,
26119 ((bufferInfoCount)) * sizeof(uint32_t));
26120 *streamPtrPtr += ((bufferInfoCount)) * sizeof(uint32_t);
26121 }
26122 // WARNING PTR CHECK
26123 uint64_t cgen_var_5 = (uint64_t)(uintptr_t)local_pBufferViewEntryIndices;
26124 memcpy((*streamPtrPtr), &cgen_var_5, 8);
26125 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26126 *streamPtrPtr += 8;
26127 if (local_pBufferViewEntryIndices) {
26128 memcpy(*streamPtrPtr, (uint32_t*)local_pBufferViewEntryIndices,
26129 ((bufferViewCount)) * sizeof(uint32_t));
26130 *streamPtrPtr += ((bufferViewCount)) * sizeof(uint32_t);
26131 }
26132 // WARNING PTR CHECK
26133 uint64_t cgen_var_6 = (uint64_t)(uintptr_t)local_pImageInfos;
26134 memcpy((*streamPtrPtr), &cgen_var_6, 8);
26135 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26136 *streamPtrPtr += 8;
26137 if (local_pImageInfos) {
26138 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
26139 reservedmarshal_VkDescriptorImageInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
26140 (VkDescriptorImageInfo*)(local_pImageInfos + i),
26141 streamPtrPtr);
26142 }
26143 }
26144 // WARNING PTR CHECK
26145 uint64_t cgen_var_7 = (uint64_t)(uintptr_t)local_pBufferInfos;
26146 memcpy((*streamPtrPtr), &cgen_var_7, 8);
26147 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26148 *streamPtrPtr += 8;
26149 if (local_pBufferInfos) {
26150 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
26151 reservedmarshal_VkDescriptorBufferInfo(
26152 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
26153 (VkDescriptorBufferInfo*)(local_pBufferInfos + i), streamPtrPtr);
26154 }
26155 }
26156 // WARNING PTR CHECK
26157 uint64_t cgen_var_8 = (uint64_t)(uintptr_t)local_pBufferViews;
26158 memcpy((*streamPtrPtr), &cgen_var_8, 8);
26159 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26160 *streamPtrPtr += 8;
26161 if (local_pBufferViews) {
26162 if (((bufferViewCount))) {
26163 uint8_t* cgen_var_8_0_ptr = (uint8_t*)(*streamPtrPtr);
26164 for (uint32_t k = 0; k < ((bufferViewCount)); ++k) {
26165 uint64_t tmpval = get_host_u64_VkBufferView(local_pBufferViews[k]);
26166 memcpy(cgen_var_8_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
26167 }
26168 *streamPtrPtr += 8 * ((bufferViewCount));
26169 }
26170 }
26171 // WARNING PTR CHECK
26172 uint64_t cgen_var_9 = (uint64_t)(uintptr_t)local_pInlineUniformBlockData;
26173 memcpy((*streamPtrPtr), &cgen_var_9, 8);
26174 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26175 *streamPtrPtr += 8;
26176 if (local_pInlineUniformBlockData) {
26177 memcpy(*streamPtrPtr, (uint8_t*)local_pInlineUniformBlockData,
26178 ((inlineUniformBlockCount)) * sizeof(uint8_t));
26179 *streamPtrPtr += ((inlineUniformBlockCount)) * sizeof(uint8_t);
26180 }
26181 stream->flush();
26182 ++encodeCount;
26183 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26184 pool->freeAll();
26185 stream->clearPool();
26186 }
26187 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26188 }
26189
vkQueueSubmitAsync2GOOGLE(VkQueue queue,uint32_t submitCount,const VkSubmitInfo2 * pSubmits,VkFence fence,uint32_t doLock)26190 void VkEncoder::vkQueueSubmitAsync2GOOGLE(VkQueue queue, uint32_t submitCount,
26191 const VkSubmitInfo2* pSubmits, VkFence fence,
26192 uint32_t doLock) {
26193 (void)doLock;
26194 bool queueSubmitWithCommandsEnabled =
26195 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26196 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26197 auto stream = mImpl->stream();
26198 auto pool = mImpl->pool();
26199 VkQueue local_queue;
26200 uint32_t local_submitCount;
26201 VkSubmitInfo2* local_pSubmits;
26202 VkFence local_fence;
26203 local_queue = queue;
26204 local_submitCount = submitCount;
26205 local_pSubmits = nullptr;
26206 if (pSubmits) {
26207 local_pSubmits = (VkSubmitInfo2*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo2));
26208 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
26209 deepcopy_VkSubmitInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubmits + i,
26210 (VkSubmitInfo2*)(local_pSubmits + i));
26211 }
26212 }
26213 local_fence = fence;
26214 if (local_pSubmits) {
26215 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
26216 transform_tohost_VkSubmitInfo2(sResourceTracker, (VkSubmitInfo2*)(local_pSubmits + i));
26217 }
26218 }
26219 size_t count = 0;
26220 size_t* countPtr = &count;
26221 {
26222 uint64_t cgen_var_0;
26223 *countPtr += 1 * 8;
26224 *countPtr += sizeof(uint32_t);
26225 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
26226 count_VkSubmitInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
26227 (VkSubmitInfo2*)(local_pSubmits + i), countPtr);
26228 }
26229 uint64_t cgen_var_1;
26230 *countPtr += 1 * 8;
26231 }
26232 uint32_t packetSize_vkQueueSubmitAsync2GOOGLE =
26233 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26234 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSubmitAsync2GOOGLE);
26235 uint8_t* packetBeginPtr = streamPtr;
26236 uint8_t** streamPtrPtr = &streamPtr;
26237 uint32_t opcode_vkQueueSubmitAsync2GOOGLE = OP_vkQueueSubmitAsync2GOOGLE;
26238 uint32_t seqno;
26239 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26240 memcpy(streamPtr, &opcode_vkQueueSubmitAsync2GOOGLE, sizeof(uint32_t));
26241 streamPtr += sizeof(uint32_t);
26242 memcpy(streamPtr, &packetSize_vkQueueSubmitAsync2GOOGLE, sizeof(uint32_t));
26243 streamPtr += sizeof(uint32_t);
26244 if (queueSubmitWithCommandsEnabled) {
26245 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26246 streamPtr += sizeof(uint32_t);
26247 }
26248 uint64_t cgen_var_0;
26249 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
26250 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26251 *streamPtrPtr += 1 * 8;
26252 memcpy(*streamPtrPtr, (uint32_t*)&local_submitCount, sizeof(uint32_t));
26253 *streamPtrPtr += sizeof(uint32_t);
26254 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
26255 reservedmarshal_VkSubmitInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
26256 (VkSubmitInfo2*)(local_pSubmits + i), streamPtrPtr);
26257 }
26258 uint64_t cgen_var_1;
26259 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
26260 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
26261 *streamPtrPtr += 1 * 8;
26262 stream->flush();
26263 ++encodeCount;
26264 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26265 pool->freeAll();
26266 stream->clearPool();
26267 }
26268 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26269 }
26270
vkGetSemaphoreGOOGLE(VkDevice device,VkSemaphore semaphore,uint64_t syncId,uint32_t doLock)26271 VkResult VkEncoder::vkGetSemaphoreGOOGLE(VkDevice device, VkSemaphore semaphore, uint64_t syncId,
26272 uint32_t doLock) {
26273 (void)doLock;
26274 bool queueSubmitWithCommandsEnabled =
26275 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26276 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26277 auto stream = mImpl->stream();
26278 auto pool = mImpl->pool();
26279 VkDevice local_device;
26280 VkSemaphore local_semaphore;
26281 uint64_t local_syncId;
26282 local_device = device;
26283 local_semaphore = semaphore;
26284 local_syncId = syncId;
26285 size_t count = 0;
26286 size_t* countPtr = &count;
26287 {
26288 uint64_t cgen_var_0;
26289 *countPtr += 1 * 8;
26290 uint64_t cgen_var_1;
26291 *countPtr += 1 * 8;
26292 *countPtr += sizeof(uint64_t);
26293 }
26294 uint32_t packetSize_vkGetSemaphoreGOOGLE =
26295 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26296 uint8_t* streamPtr = stream->reserve(packetSize_vkGetSemaphoreGOOGLE);
26297 uint8_t* packetBeginPtr = streamPtr;
26298 uint8_t** streamPtrPtr = &streamPtr;
26299 uint32_t opcode_vkGetSemaphoreGOOGLE = OP_vkGetSemaphoreGOOGLE;
26300 uint32_t seqno;
26301 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26302 memcpy(streamPtr, &opcode_vkGetSemaphoreGOOGLE, sizeof(uint32_t));
26303 streamPtr += sizeof(uint32_t);
26304 memcpy(streamPtr, &packetSize_vkGetSemaphoreGOOGLE, sizeof(uint32_t));
26305 streamPtr += sizeof(uint32_t);
26306 if (queueSubmitWithCommandsEnabled) {
26307 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26308 streamPtr += sizeof(uint32_t);
26309 }
26310 uint64_t cgen_var_0;
26311 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
26312 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26313 *streamPtrPtr += 1 * 8;
26314 uint64_t cgen_var_1;
26315 *&cgen_var_1 = get_host_u64_VkSemaphore((*&local_semaphore));
26316 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
26317 *streamPtrPtr += 1 * 8;
26318 memcpy(*streamPtrPtr, (uint64_t*)&local_syncId, sizeof(uint64_t));
26319 *streamPtrPtr += sizeof(uint64_t);
26320 VkResult vkGetSemaphoreGOOGLE_VkResult_return = (VkResult)0;
26321 stream->read(&vkGetSemaphoreGOOGLE_VkResult_return, sizeof(VkResult));
26322 ++encodeCount;
26323 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26324 pool->freeAll();
26325 stream->clearPool();
26326 }
26327 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26328 return vkGetSemaphoreGOOGLE_VkResult_return;
26329 }
26330
26331 #endif
26332 } // namespace vk
26333 } // namespace gfxstream
26334