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_VERSION_1_4
vkCmdSetLineStipple(VkCommandBuffer commandBuffer,uint32_t lineStippleFactor,uint16_t lineStipplePattern,uint32_t doLock)16716 void VkEncoder::vkCmdSetLineStipple(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor,
16717 uint16_t lineStipplePattern, 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 uint32_t local_lineStippleFactor;
16726 uint16_t local_lineStipplePattern;
16727 local_commandBuffer = commandBuffer;
16728 local_lineStippleFactor = lineStippleFactor;
16729 local_lineStipplePattern = lineStipplePattern;
16730 size_t count = 0;
16731 size_t* countPtr = &count;
16732 {
16733 uint64_t cgen_var_0;
16734 *countPtr += 1 * 8;
16735 *countPtr += sizeof(uint32_t);
16736 *countPtr += sizeof(uint16_t);
16737 }
16738 uint32_t packetSize_vkCmdSetLineStipple = 4 + 4 + count;
16739 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetLineStipple -= 8;
16740 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetLineStipple);
16741 uint8_t* packetBeginPtr = streamPtr;
16742 uint8_t** streamPtrPtr = &streamPtr;
16743 uint32_t opcode_vkCmdSetLineStipple = OP_vkCmdSetLineStipple;
16744 memcpy(streamPtr, &opcode_vkCmdSetLineStipple, sizeof(uint32_t));
16745 streamPtr += sizeof(uint32_t);
16746 memcpy(streamPtr, &packetSize_vkCmdSetLineStipple, sizeof(uint32_t));
16747 streamPtr += sizeof(uint32_t);
16748 if (!queueSubmitWithCommandsEnabled) {
16749 uint64_t cgen_var_0;
16750 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16751 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16752 *streamPtrPtr += 1 * 8;
16753 }
16754 memcpy(*streamPtrPtr, (uint32_t*)&local_lineStippleFactor, sizeof(uint32_t));
16755 *streamPtrPtr += sizeof(uint32_t);
16756 memcpy(*streamPtrPtr, (uint16_t*)&local_lineStipplePattern, sizeof(uint16_t));
16757 *streamPtrPtr += sizeof(uint16_t);
16758 ++encodeCount;
16759 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16760 pool->freeAll();
16761 stream->clearPool();
16762 }
16763 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16764 }
16765
vkMapMemory2(VkDevice device,const VkMemoryMapInfo * pMemoryMapInfo,void ** ppData,uint32_t doLock)16766 VkResult VkEncoder::vkMapMemory2(VkDevice device, const VkMemoryMapInfo* pMemoryMapInfo,
16767 void** ppData, uint32_t doLock) {
16768 (void)doLock;
16769 bool queueSubmitWithCommandsEnabled =
16770 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16771 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16772 auto stream = mImpl->stream();
16773 auto pool = mImpl->pool();
16774 VkDevice local_device;
16775 VkMemoryMapInfo* local_pMemoryMapInfo;
16776 local_device = device;
16777 local_pMemoryMapInfo = nullptr;
16778 if (pMemoryMapInfo) {
16779 local_pMemoryMapInfo = (VkMemoryMapInfo*)pool->alloc(sizeof(const VkMemoryMapInfo));
16780 deepcopy_VkMemoryMapInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMemoryMapInfo,
16781 (VkMemoryMapInfo*)(local_pMemoryMapInfo));
16782 }
16783 if (local_pMemoryMapInfo) {
16784 transform_tohost_VkMemoryMapInfo(sResourceTracker,
16785 (VkMemoryMapInfo*)(local_pMemoryMapInfo));
16786 }
16787 size_t count = 0;
16788 size_t* countPtr = &count;
16789 {
16790 uint64_t cgen_var_0;
16791 *countPtr += 1 * 8;
16792 count_VkMemoryMapInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16793 (VkMemoryMapInfo*)(local_pMemoryMapInfo), countPtr);
16794 // WARNING PTR CHECK
16795 *countPtr += 8;
16796 if (ppData) {
16797 *countPtr += sizeof(void*);
16798 }
16799 }
16800 uint32_t packetSize_vkMapMemory2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
16801 uint8_t* streamPtr = stream->reserve(packetSize_vkMapMemory2);
16802 uint8_t* packetBeginPtr = streamPtr;
16803 uint8_t** streamPtrPtr = &streamPtr;
16804 uint32_t opcode_vkMapMemory2 = OP_vkMapMemory2;
16805 uint32_t seqno;
16806 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
16807 memcpy(streamPtr, &opcode_vkMapMemory2, sizeof(uint32_t));
16808 streamPtr += sizeof(uint32_t);
16809 memcpy(streamPtr, &packetSize_vkMapMemory2, sizeof(uint32_t));
16810 streamPtr += sizeof(uint32_t);
16811 if (queueSubmitWithCommandsEnabled) {
16812 memcpy(streamPtr, &seqno, sizeof(uint32_t));
16813 streamPtr += sizeof(uint32_t);
16814 }
16815 uint64_t cgen_var_0;
16816 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
16817 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16818 *streamPtrPtr += 1 * 8;
16819 reservedmarshal_VkMemoryMapInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16820 (VkMemoryMapInfo*)(local_pMemoryMapInfo), streamPtrPtr);
16821 // WARNING PTR CHECK
16822 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)ppData;
16823 memcpy((*streamPtrPtr), &cgen_var_1, 8);
16824 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
16825 *streamPtrPtr += 8;
16826 if (ppData) {
16827 memcpy(*streamPtrPtr, (void**)ppData, sizeof(void*));
16828 *streamPtrPtr += sizeof(void*);
16829 }
16830 // WARNING PTR CHECK
16831 void** check_ppData;
16832 check_ppData = (void**)(uintptr_t)stream->getBe64();
16833 if (ppData) {
16834 if (!(check_ppData)) {
16835 fprintf(stderr, "fatal: ppData inconsistent between guest and host\n");
16836 }
16837 stream->read((void**)ppData, sizeof(void*));
16838 }
16839 VkResult vkMapMemory2_VkResult_return = (VkResult)0;
16840 stream->read(&vkMapMemory2_VkResult_return, sizeof(VkResult));
16841 ++encodeCount;
16842 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16843 pool->freeAll();
16844 stream->clearPool();
16845 }
16846 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16847 return vkMapMemory2_VkResult_return;
16848 }
16849
vkUnmapMemory2(VkDevice device,const VkMemoryUnmapInfo * pMemoryUnmapInfo,uint32_t doLock)16850 VkResult VkEncoder::vkUnmapMemory2(VkDevice device, const VkMemoryUnmapInfo* pMemoryUnmapInfo,
16851 uint32_t doLock) {
16852 (void)doLock;
16853 bool queueSubmitWithCommandsEnabled =
16854 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16855 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16856 auto stream = mImpl->stream();
16857 auto pool = mImpl->pool();
16858 VkDevice local_device;
16859 VkMemoryUnmapInfo* local_pMemoryUnmapInfo;
16860 local_device = device;
16861 local_pMemoryUnmapInfo = nullptr;
16862 if (pMemoryUnmapInfo) {
16863 local_pMemoryUnmapInfo = (VkMemoryUnmapInfo*)pool->alloc(sizeof(const VkMemoryUnmapInfo));
16864 deepcopy_VkMemoryUnmapInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMemoryUnmapInfo,
16865 (VkMemoryUnmapInfo*)(local_pMemoryUnmapInfo));
16866 }
16867 if (local_pMemoryUnmapInfo) {
16868 transform_tohost_VkMemoryUnmapInfo(sResourceTracker,
16869 (VkMemoryUnmapInfo*)(local_pMemoryUnmapInfo));
16870 }
16871 size_t count = 0;
16872 size_t* countPtr = &count;
16873 {
16874 uint64_t cgen_var_0;
16875 *countPtr += 1 * 8;
16876 count_VkMemoryUnmapInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
16877 (VkMemoryUnmapInfo*)(local_pMemoryUnmapInfo), countPtr);
16878 }
16879 uint32_t packetSize_vkUnmapMemory2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
16880 uint8_t* streamPtr = stream->reserve(packetSize_vkUnmapMemory2);
16881 uint8_t* packetBeginPtr = streamPtr;
16882 uint8_t** streamPtrPtr = &streamPtr;
16883 uint32_t opcode_vkUnmapMemory2 = OP_vkUnmapMemory2;
16884 uint32_t seqno;
16885 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
16886 memcpy(streamPtr, &opcode_vkUnmapMemory2, sizeof(uint32_t));
16887 streamPtr += sizeof(uint32_t);
16888 memcpy(streamPtr, &packetSize_vkUnmapMemory2, sizeof(uint32_t));
16889 streamPtr += sizeof(uint32_t);
16890 if (queueSubmitWithCommandsEnabled) {
16891 memcpy(streamPtr, &seqno, sizeof(uint32_t));
16892 streamPtr += sizeof(uint32_t);
16893 }
16894 uint64_t cgen_var_0;
16895 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
16896 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16897 *streamPtrPtr += 1 * 8;
16898 reservedmarshal_VkMemoryUnmapInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
16899 (VkMemoryUnmapInfo*)(local_pMemoryUnmapInfo), streamPtrPtr);
16900 VkResult vkUnmapMemory2_VkResult_return = (VkResult)0;
16901 stream->read(&vkUnmapMemory2_VkResult_return, sizeof(VkResult));
16902 ++encodeCount;
16903 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16904 pool->freeAll();
16905 stream->clearPool();
16906 }
16907 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16908 return vkUnmapMemory2_VkResult_return;
16909 }
16910
vkCmdBindIndexBuffer2(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkDeviceSize size,VkIndexType indexType,uint32_t doLock)16911 void VkEncoder::vkCmdBindIndexBuffer2(VkCommandBuffer commandBuffer, VkBuffer buffer,
16912 VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType,
16913 uint32_t doLock) {
16914 (void)doLock;
16915 bool queueSubmitWithCommandsEnabled =
16916 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16917 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16918 auto stream = mImpl->stream();
16919 auto pool = mImpl->pool();
16920 VkCommandBuffer local_commandBuffer;
16921 VkBuffer local_buffer;
16922 VkDeviceSize local_offset;
16923 VkDeviceSize local_size;
16924 VkIndexType local_indexType;
16925 local_commandBuffer = commandBuffer;
16926 local_buffer = buffer;
16927 local_offset = offset;
16928 local_size = size;
16929 local_indexType = indexType;
16930 size_t count = 0;
16931 size_t* countPtr = &count;
16932 {
16933 uint64_t cgen_var_0;
16934 *countPtr += 1 * 8;
16935 uint64_t cgen_var_1;
16936 *countPtr += 1 * 8;
16937 *countPtr += sizeof(VkDeviceSize);
16938 *countPtr += sizeof(VkDeviceSize);
16939 *countPtr += sizeof(VkIndexType);
16940 }
16941 uint32_t packetSize_vkCmdBindIndexBuffer2 = 4 + 4 + count;
16942 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindIndexBuffer2 -= 8;
16943 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindIndexBuffer2);
16944 uint8_t* packetBeginPtr = streamPtr;
16945 uint8_t** streamPtrPtr = &streamPtr;
16946 uint32_t opcode_vkCmdBindIndexBuffer2 = OP_vkCmdBindIndexBuffer2;
16947 memcpy(streamPtr, &opcode_vkCmdBindIndexBuffer2, sizeof(uint32_t));
16948 streamPtr += sizeof(uint32_t);
16949 memcpy(streamPtr, &packetSize_vkCmdBindIndexBuffer2, sizeof(uint32_t));
16950 streamPtr += sizeof(uint32_t);
16951 if (!queueSubmitWithCommandsEnabled) {
16952 uint64_t cgen_var_0;
16953 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
16954 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16955 *streamPtrPtr += 1 * 8;
16956 }
16957 uint64_t cgen_var_0;
16958 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_buffer));
16959 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
16960 *streamPtrPtr += 1 * 8;
16961 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
16962 *streamPtrPtr += sizeof(VkDeviceSize);
16963 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_size, sizeof(VkDeviceSize));
16964 *streamPtrPtr += sizeof(VkDeviceSize);
16965 memcpy(*streamPtrPtr, (VkIndexType*)&local_indexType, sizeof(VkIndexType));
16966 *streamPtrPtr += sizeof(VkIndexType);
16967 ++encodeCount;
16968 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
16969 pool->freeAll();
16970 stream->clearPool();
16971 }
16972 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
16973 }
16974
vkGetRenderingAreaGranularity(VkDevice device,const VkRenderingAreaInfo * pRenderingAreaInfo,VkExtent2D * pGranularity,uint32_t doLock)16975 void VkEncoder::vkGetRenderingAreaGranularity(VkDevice device,
16976 const VkRenderingAreaInfo* pRenderingAreaInfo,
16977 VkExtent2D* pGranularity, uint32_t doLock) {
16978 (void)doLock;
16979 bool queueSubmitWithCommandsEnabled =
16980 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
16981 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
16982 auto stream = mImpl->stream();
16983 auto pool = mImpl->pool();
16984 VkDevice local_device;
16985 VkRenderingAreaInfo* local_pRenderingAreaInfo;
16986 local_device = device;
16987 local_pRenderingAreaInfo = nullptr;
16988 if (pRenderingAreaInfo) {
16989 local_pRenderingAreaInfo =
16990 (VkRenderingAreaInfo*)pool->alloc(sizeof(const VkRenderingAreaInfo));
16991 deepcopy_VkRenderingAreaInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderingAreaInfo,
16992 (VkRenderingAreaInfo*)(local_pRenderingAreaInfo));
16993 }
16994 if (local_pRenderingAreaInfo) {
16995 transform_tohost_VkRenderingAreaInfo(sResourceTracker,
16996 (VkRenderingAreaInfo*)(local_pRenderingAreaInfo));
16997 }
16998 size_t count = 0;
16999 size_t* countPtr = &count;
17000 {
17001 uint64_t cgen_var_0;
17002 *countPtr += 1 * 8;
17003 count_VkRenderingAreaInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17004 (VkRenderingAreaInfo*)(local_pRenderingAreaInfo), countPtr);
17005 count_VkExtent2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity),
17006 countPtr);
17007 }
17008 uint32_t packetSize_vkGetRenderingAreaGranularity =
17009 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17010 uint8_t* streamPtr = stream->reserve(packetSize_vkGetRenderingAreaGranularity);
17011 uint8_t* packetBeginPtr = streamPtr;
17012 uint8_t** streamPtrPtr = &streamPtr;
17013 uint32_t opcode_vkGetRenderingAreaGranularity = OP_vkGetRenderingAreaGranularity;
17014 uint32_t seqno;
17015 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17016 memcpy(streamPtr, &opcode_vkGetRenderingAreaGranularity, sizeof(uint32_t));
17017 streamPtr += sizeof(uint32_t);
17018 memcpy(streamPtr, &packetSize_vkGetRenderingAreaGranularity, sizeof(uint32_t));
17019 streamPtr += sizeof(uint32_t);
17020 if (queueSubmitWithCommandsEnabled) {
17021 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17022 streamPtr += sizeof(uint32_t);
17023 }
17024 uint64_t cgen_var_0;
17025 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17026 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17027 *streamPtrPtr += 1 * 8;
17028 reservedmarshal_VkRenderingAreaInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17029 (VkRenderingAreaInfo*)(local_pRenderingAreaInfo),
17030 streamPtrPtr);
17031 reservedmarshal_VkExtent2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity),
17032 streamPtrPtr);
17033 unmarshal_VkExtent2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity));
17034 if (pGranularity) {
17035 transform_fromhost_VkExtent2D(sResourceTracker, (VkExtent2D*)(pGranularity));
17036 }
17037 ++encodeCount;
17038 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17039 pool->freeAll();
17040 stream->clearPool();
17041 }
17042 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17043 }
17044
vkGetDeviceImageSubresourceLayout(VkDevice device,const VkDeviceImageSubresourceInfo * pInfo,VkSubresourceLayout2 * pLayout,uint32_t doLock)17045 void VkEncoder::vkGetDeviceImageSubresourceLayout(VkDevice device,
17046 const VkDeviceImageSubresourceInfo* pInfo,
17047 VkSubresourceLayout2* pLayout, uint32_t doLock) {
17048 (void)doLock;
17049 bool queueSubmitWithCommandsEnabled =
17050 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17051 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17052 auto stream = mImpl->stream();
17053 auto pool = mImpl->pool();
17054 VkDevice local_device;
17055 VkDeviceImageSubresourceInfo* local_pInfo;
17056 local_device = device;
17057 local_pInfo = nullptr;
17058 if (pInfo) {
17059 local_pInfo =
17060 (VkDeviceImageSubresourceInfo*)pool->alloc(sizeof(const VkDeviceImageSubresourceInfo));
17061 deepcopy_VkDeviceImageSubresourceInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
17062 (VkDeviceImageSubresourceInfo*)(local_pInfo));
17063 }
17064 if (local_pInfo) {
17065 transform_tohost_VkDeviceImageSubresourceInfo(sResourceTracker,
17066 (VkDeviceImageSubresourceInfo*)(local_pInfo));
17067 }
17068 size_t count = 0;
17069 size_t* countPtr = &count;
17070 {
17071 uint64_t cgen_var_0;
17072 *countPtr += 1 * 8;
17073 count_VkDeviceImageSubresourceInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17074 (VkDeviceImageSubresourceInfo*)(local_pInfo), countPtr);
17075 count_VkSubresourceLayout2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17076 (VkSubresourceLayout2*)(pLayout), countPtr);
17077 }
17078 uint32_t packetSize_vkGetDeviceImageSubresourceLayout =
17079 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17080 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceImageSubresourceLayout);
17081 uint8_t* packetBeginPtr = streamPtr;
17082 uint8_t** streamPtrPtr = &streamPtr;
17083 uint32_t opcode_vkGetDeviceImageSubresourceLayout = OP_vkGetDeviceImageSubresourceLayout;
17084 uint32_t seqno;
17085 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17086 memcpy(streamPtr, &opcode_vkGetDeviceImageSubresourceLayout, sizeof(uint32_t));
17087 streamPtr += sizeof(uint32_t);
17088 memcpy(streamPtr, &packetSize_vkGetDeviceImageSubresourceLayout, sizeof(uint32_t));
17089 streamPtr += sizeof(uint32_t);
17090 if (queueSubmitWithCommandsEnabled) {
17091 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17092 streamPtr += sizeof(uint32_t);
17093 }
17094 uint64_t cgen_var_0;
17095 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17096 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17097 *streamPtrPtr += 1 * 8;
17098 reservedmarshal_VkDeviceImageSubresourceInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17099 (VkDeviceImageSubresourceInfo*)(local_pInfo),
17100 streamPtrPtr);
17101 reservedmarshal_VkSubresourceLayout2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17102 (VkSubresourceLayout2*)(pLayout), streamPtrPtr);
17103 unmarshal_VkSubresourceLayout2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17104 (VkSubresourceLayout2*)(pLayout));
17105 if (pLayout) {
17106 transform_fromhost_VkSubresourceLayout2(sResourceTracker, (VkSubresourceLayout2*)(pLayout));
17107 }
17108 ++encodeCount;
17109 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17110 pool->freeAll();
17111 stream->clearPool();
17112 }
17113 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17114 }
17115
vkGetImageSubresourceLayout2(VkDevice device,VkImage image,const VkImageSubresource2 * pSubresource,VkSubresourceLayout2 * pLayout,uint32_t doLock)17116 void VkEncoder::vkGetImageSubresourceLayout2(VkDevice device, VkImage image,
17117 const VkImageSubresource2* pSubresource,
17118 VkSubresourceLayout2* pLayout, uint32_t doLock) {
17119 (void)doLock;
17120 bool queueSubmitWithCommandsEnabled =
17121 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17122 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17123 auto stream = mImpl->stream();
17124 auto pool = mImpl->pool();
17125 VkDevice local_device;
17126 VkImage local_image;
17127 VkImageSubresource2* local_pSubresource;
17128 local_device = device;
17129 local_image = image;
17130 local_pSubresource = nullptr;
17131 if (pSubresource) {
17132 local_pSubresource = (VkImageSubresource2*)pool->alloc(sizeof(const VkImageSubresource2));
17133 deepcopy_VkImageSubresource2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubresource,
17134 (VkImageSubresource2*)(local_pSubresource));
17135 }
17136 if (local_pSubresource) {
17137 transform_tohost_VkImageSubresource2(sResourceTracker,
17138 (VkImageSubresource2*)(local_pSubresource));
17139 }
17140 size_t count = 0;
17141 size_t* countPtr = &count;
17142 {
17143 uint64_t cgen_var_0;
17144 *countPtr += 1 * 8;
17145 uint64_t cgen_var_1;
17146 *countPtr += 1 * 8;
17147 count_VkImageSubresource2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17148 (VkImageSubresource2*)(local_pSubresource), countPtr);
17149 count_VkSubresourceLayout2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17150 (VkSubresourceLayout2*)(pLayout), countPtr);
17151 }
17152 uint32_t packetSize_vkGetImageSubresourceLayout2 =
17153 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17154 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageSubresourceLayout2);
17155 uint8_t* packetBeginPtr = streamPtr;
17156 uint8_t** streamPtrPtr = &streamPtr;
17157 uint32_t opcode_vkGetImageSubresourceLayout2 = OP_vkGetImageSubresourceLayout2;
17158 uint32_t seqno;
17159 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17160 memcpy(streamPtr, &opcode_vkGetImageSubresourceLayout2, sizeof(uint32_t));
17161 streamPtr += sizeof(uint32_t);
17162 memcpy(streamPtr, &packetSize_vkGetImageSubresourceLayout2, sizeof(uint32_t));
17163 streamPtr += sizeof(uint32_t);
17164 if (queueSubmitWithCommandsEnabled) {
17165 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17166 streamPtr += sizeof(uint32_t);
17167 }
17168 uint64_t cgen_var_0;
17169 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17170 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17171 *streamPtrPtr += 1 * 8;
17172 uint64_t cgen_var_1;
17173 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
17174 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
17175 *streamPtrPtr += 1 * 8;
17176 reservedmarshal_VkImageSubresource2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17177 (VkImageSubresource2*)(local_pSubresource), streamPtrPtr);
17178 reservedmarshal_VkSubresourceLayout2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17179 (VkSubresourceLayout2*)(pLayout), streamPtrPtr);
17180 unmarshal_VkSubresourceLayout2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17181 (VkSubresourceLayout2*)(pLayout));
17182 if (pLayout) {
17183 transform_fromhost_VkSubresourceLayout2(sResourceTracker, (VkSubresourceLayout2*)(pLayout));
17184 }
17185 ++encodeCount;
17186 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17187 pool->freeAll();
17188 stream->clearPool();
17189 }
17190 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17191 }
17192
vkCmdPushDescriptorSet(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipelineLayout layout,uint32_t set,uint32_t descriptorWriteCount,const VkWriteDescriptorSet * pDescriptorWrites,uint32_t doLock)17193 void VkEncoder::vkCmdPushDescriptorSet(VkCommandBuffer commandBuffer,
17194 VkPipelineBindPoint pipelineBindPoint,
17195 VkPipelineLayout layout, uint32_t set,
17196 uint32_t descriptorWriteCount,
17197 const VkWriteDescriptorSet* pDescriptorWrites,
17198 uint32_t doLock) {
17199 (void)doLock;
17200 bool queueSubmitWithCommandsEnabled =
17201 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17202 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17203 auto stream = mImpl->stream();
17204 auto pool = mImpl->pool();
17205 VkCommandBuffer local_commandBuffer;
17206 VkPipelineBindPoint local_pipelineBindPoint;
17207 VkPipelineLayout local_layout;
17208 uint32_t local_set;
17209 uint32_t local_descriptorWriteCount;
17210 VkWriteDescriptorSet* local_pDescriptorWrites;
17211 local_commandBuffer = commandBuffer;
17212 local_pipelineBindPoint = pipelineBindPoint;
17213 local_layout = layout;
17214 local_set = set;
17215 local_descriptorWriteCount = descriptorWriteCount;
17216 local_pDescriptorWrites = nullptr;
17217 if (pDescriptorWrites) {
17218 local_pDescriptorWrites = (VkWriteDescriptorSet*)pool->alloc(
17219 ((descriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
17220 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
17221 deepcopy_VkWriteDescriptorSet(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDescriptorWrites + i,
17222 (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
17223 }
17224 }
17225 if (local_pDescriptorWrites) {
17226 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
17227 transform_tohost_VkWriteDescriptorSet(
17228 sResourceTracker, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
17229 }
17230 }
17231 size_t count = 0;
17232 size_t* countPtr = &count;
17233 {
17234 uint64_t cgen_var_0;
17235 *countPtr += 1 * 8;
17236 *countPtr += sizeof(VkPipelineBindPoint);
17237 uint64_t cgen_var_1;
17238 *countPtr += 1 * 8;
17239 *countPtr += sizeof(uint32_t);
17240 *countPtr += sizeof(uint32_t);
17241 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
17242 count_VkWriteDescriptorSet(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17243 (VkWriteDescriptorSet*)(local_pDescriptorWrites + i),
17244 countPtr);
17245 }
17246 }
17247 uint32_t packetSize_vkCmdPushDescriptorSet = 4 + 4 + count;
17248 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdPushDescriptorSet -= 8;
17249 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdPushDescriptorSet);
17250 uint8_t* packetBeginPtr = streamPtr;
17251 uint8_t** streamPtrPtr = &streamPtr;
17252 uint32_t opcode_vkCmdPushDescriptorSet = OP_vkCmdPushDescriptorSet;
17253 memcpy(streamPtr, &opcode_vkCmdPushDescriptorSet, sizeof(uint32_t));
17254 streamPtr += sizeof(uint32_t);
17255 memcpy(streamPtr, &packetSize_vkCmdPushDescriptorSet, sizeof(uint32_t));
17256 streamPtr += sizeof(uint32_t);
17257 if (!queueSubmitWithCommandsEnabled) {
17258 uint64_t cgen_var_0;
17259 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
17260 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17261 *streamPtrPtr += 1 * 8;
17262 }
17263 memcpy(*streamPtrPtr, (VkPipelineBindPoint*)&local_pipelineBindPoint,
17264 sizeof(VkPipelineBindPoint));
17265 *streamPtrPtr += sizeof(VkPipelineBindPoint);
17266 uint64_t cgen_var_0;
17267 *&cgen_var_0 = get_host_u64_VkPipelineLayout((*&local_layout));
17268 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17269 *streamPtrPtr += 1 * 8;
17270 memcpy(*streamPtrPtr, (uint32_t*)&local_set, sizeof(uint32_t));
17271 *streamPtrPtr += sizeof(uint32_t);
17272 memcpy(*streamPtrPtr, (uint32_t*)&local_descriptorWriteCount, sizeof(uint32_t));
17273 *streamPtrPtr += sizeof(uint32_t);
17274 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i) {
17275 reservedmarshal_VkWriteDescriptorSet(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17276 (VkWriteDescriptorSet*)(local_pDescriptorWrites + i),
17277 streamPtrPtr);
17278 }
17279 ++encodeCount;
17280 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17281 pool->freeAll();
17282 stream->clearPool();
17283 }
17284 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17285 }
17286
vkCmdPushDescriptorSetWithTemplate(VkCommandBuffer commandBuffer,VkDescriptorUpdateTemplate descriptorUpdateTemplate,VkPipelineLayout layout,uint32_t set,const void * pData,uint32_t doLock)17287 void VkEncoder::vkCmdPushDescriptorSetWithTemplate(
17288 VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate,
17289 VkPipelineLayout layout, uint32_t set, const void* pData, uint32_t doLock) {
17290 (void)doLock;
17291 bool queueSubmitWithCommandsEnabled =
17292 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17293 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17294 auto stream = mImpl->stream();
17295 auto pool = mImpl->pool();
17296 VkCommandBuffer local_commandBuffer;
17297 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
17298 VkPipelineLayout local_layout;
17299 uint32_t local_set;
17300 void* local_pData;
17301 local_commandBuffer = commandBuffer;
17302 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
17303 local_layout = layout;
17304 local_set = set;
17305 // Avoiding deepcopy for pData
17306 local_pData = (void*)pData;
17307 size_t count = 0;
17308 size_t* countPtr = &count;
17309 {
17310 uint64_t cgen_var_0;
17311 *countPtr += 1 * 8;
17312 uint64_t cgen_var_1;
17313 *countPtr += 1 * 8;
17314 uint64_t cgen_var_2;
17315 *countPtr += 1 * 8;
17316 *countPtr += sizeof(uint32_t);
17317 // WARNING PTR CHECK
17318 *countPtr += 8;
17319 if (local_pData) {
17320 *countPtr += sizeof(uint8_t);
17321 }
17322 }
17323 uint32_t packetSize_vkCmdPushDescriptorSetWithTemplate = 4 + 4 + count;
17324 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdPushDescriptorSetWithTemplate -= 8;
17325 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdPushDescriptorSetWithTemplate);
17326 uint8_t* packetBeginPtr = streamPtr;
17327 uint8_t** streamPtrPtr = &streamPtr;
17328 uint32_t opcode_vkCmdPushDescriptorSetWithTemplate = OP_vkCmdPushDescriptorSetWithTemplate;
17329 memcpy(streamPtr, &opcode_vkCmdPushDescriptorSetWithTemplate, sizeof(uint32_t));
17330 streamPtr += sizeof(uint32_t);
17331 memcpy(streamPtr, &packetSize_vkCmdPushDescriptorSetWithTemplate, sizeof(uint32_t));
17332 streamPtr += sizeof(uint32_t);
17333 if (!queueSubmitWithCommandsEnabled) {
17334 uint64_t cgen_var_0;
17335 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
17336 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17337 *streamPtrPtr += 1 * 8;
17338 }
17339 uint64_t cgen_var_0;
17340 *&cgen_var_0 = get_host_u64_VkDescriptorUpdateTemplate((*&local_descriptorUpdateTemplate));
17341 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17342 *streamPtrPtr += 1 * 8;
17343 uint64_t cgen_var_1;
17344 *&cgen_var_1 = get_host_u64_VkPipelineLayout((*&local_layout));
17345 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
17346 *streamPtrPtr += 1 * 8;
17347 memcpy(*streamPtrPtr, (uint32_t*)&local_set, sizeof(uint32_t));
17348 *streamPtrPtr += sizeof(uint32_t);
17349 // WARNING PTR CHECK
17350 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pData;
17351 memcpy((*streamPtrPtr), &cgen_var_2, 8);
17352 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
17353 *streamPtrPtr += 8;
17354 if (local_pData) {
17355 memcpy(*streamPtrPtr, (void*)local_pData, sizeof(uint8_t));
17356 *streamPtrPtr += sizeof(uint8_t);
17357 }
17358 ++encodeCount;
17359 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17360 pool->freeAll();
17361 stream->clearPool();
17362 }
17363 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17364 }
17365
vkCmdSetRenderingAttachmentLocations(VkCommandBuffer commandBuffer,const VkRenderingAttachmentLocationInfo * pLocationInfo,uint32_t doLock)17366 void VkEncoder::vkCmdSetRenderingAttachmentLocations(
17367 VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo,
17368 uint32_t doLock) {
17369 (void)doLock;
17370 bool queueSubmitWithCommandsEnabled =
17371 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17372 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17373 auto stream = mImpl->stream();
17374 auto pool = mImpl->pool();
17375 VkCommandBuffer local_commandBuffer;
17376 VkRenderingAttachmentLocationInfo* local_pLocationInfo;
17377 local_commandBuffer = commandBuffer;
17378 local_pLocationInfo = nullptr;
17379 if (pLocationInfo) {
17380 local_pLocationInfo = (VkRenderingAttachmentLocationInfo*)pool->alloc(
17381 sizeof(const VkRenderingAttachmentLocationInfo));
17382 deepcopy_VkRenderingAttachmentLocationInfo(
17383 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pLocationInfo,
17384 (VkRenderingAttachmentLocationInfo*)(local_pLocationInfo));
17385 }
17386 if (local_pLocationInfo) {
17387 transform_tohost_VkRenderingAttachmentLocationInfo(
17388 sResourceTracker, (VkRenderingAttachmentLocationInfo*)(local_pLocationInfo));
17389 }
17390 size_t count = 0;
17391 size_t* countPtr = &count;
17392 {
17393 uint64_t cgen_var_0;
17394 *countPtr += 1 * 8;
17395 count_VkRenderingAttachmentLocationInfo(
17396 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17397 (VkRenderingAttachmentLocationInfo*)(local_pLocationInfo), countPtr);
17398 }
17399 uint32_t packetSize_vkCmdSetRenderingAttachmentLocations = 4 + 4 + count;
17400 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetRenderingAttachmentLocations -= 8;
17401 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetRenderingAttachmentLocations);
17402 uint8_t* packetBeginPtr = streamPtr;
17403 uint8_t** streamPtrPtr = &streamPtr;
17404 uint32_t opcode_vkCmdSetRenderingAttachmentLocations = OP_vkCmdSetRenderingAttachmentLocations;
17405 memcpy(streamPtr, &opcode_vkCmdSetRenderingAttachmentLocations, sizeof(uint32_t));
17406 streamPtr += sizeof(uint32_t);
17407 memcpy(streamPtr, &packetSize_vkCmdSetRenderingAttachmentLocations, sizeof(uint32_t));
17408 streamPtr += sizeof(uint32_t);
17409 if (!queueSubmitWithCommandsEnabled) {
17410 uint64_t cgen_var_0;
17411 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
17412 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17413 *streamPtrPtr += 1 * 8;
17414 }
17415 reservedmarshal_VkRenderingAttachmentLocationInfo(
17416 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17417 (VkRenderingAttachmentLocationInfo*)(local_pLocationInfo), streamPtrPtr);
17418 ++encodeCount;
17419 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17420 pool->freeAll();
17421 stream->clearPool();
17422 }
17423 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17424 }
17425
vkCmdSetRenderingInputAttachmentIndices(VkCommandBuffer commandBuffer,const VkRenderingInputAttachmentIndexInfo * pInputAttachmentIndexInfo,uint32_t doLock)17426 void VkEncoder::vkCmdSetRenderingInputAttachmentIndices(
17427 VkCommandBuffer commandBuffer,
17428 const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo, uint32_t doLock) {
17429 (void)doLock;
17430 bool queueSubmitWithCommandsEnabled =
17431 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17432 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17433 auto stream = mImpl->stream();
17434 auto pool = mImpl->pool();
17435 VkCommandBuffer local_commandBuffer;
17436 VkRenderingInputAttachmentIndexInfo* local_pInputAttachmentIndexInfo;
17437 local_commandBuffer = commandBuffer;
17438 local_pInputAttachmentIndexInfo = nullptr;
17439 if (pInputAttachmentIndexInfo) {
17440 local_pInputAttachmentIndexInfo = (VkRenderingInputAttachmentIndexInfo*)pool->alloc(
17441 sizeof(const VkRenderingInputAttachmentIndexInfo));
17442 deepcopy_VkRenderingInputAttachmentIndexInfo(
17443 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInputAttachmentIndexInfo,
17444 (VkRenderingInputAttachmentIndexInfo*)(local_pInputAttachmentIndexInfo));
17445 }
17446 if (local_pInputAttachmentIndexInfo) {
17447 transform_tohost_VkRenderingInputAttachmentIndexInfo(
17448 sResourceTracker,
17449 (VkRenderingInputAttachmentIndexInfo*)(local_pInputAttachmentIndexInfo));
17450 }
17451 size_t count = 0;
17452 size_t* countPtr = &count;
17453 {
17454 uint64_t cgen_var_0;
17455 *countPtr += 1 * 8;
17456 count_VkRenderingInputAttachmentIndexInfo(
17457 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17458 (VkRenderingInputAttachmentIndexInfo*)(local_pInputAttachmentIndexInfo), countPtr);
17459 }
17460 uint32_t packetSize_vkCmdSetRenderingInputAttachmentIndices = 4 + 4 + count;
17461 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetRenderingInputAttachmentIndices -= 8;
17462 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetRenderingInputAttachmentIndices);
17463 uint8_t* packetBeginPtr = streamPtr;
17464 uint8_t** streamPtrPtr = &streamPtr;
17465 uint32_t opcode_vkCmdSetRenderingInputAttachmentIndices =
17466 OP_vkCmdSetRenderingInputAttachmentIndices;
17467 memcpy(streamPtr, &opcode_vkCmdSetRenderingInputAttachmentIndices, sizeof(uint32_t));
17468 streamPtr += sizeof(uint32_t);
17469 memcpy(streamPtr, &packetSize_vkCmdSetRenderingInputAttachmentIndices, sizeof(uint32_t));
17470 streamPtr += sizeof(uint32_t);
17471 if (!queueSubmitWithCommandsEnabled) {
17472 uint64_t cgen_var_0;
17473 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
17474 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17475 *streamPtrPtr += 1 * 8;
17476 }
17477 reservedmarshal_VkRenderingInputAttachmentIndexInfo(
17478 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17479 (VkRenderingInputAttachmentIndexInfo*)(local_pInputAttachmentIndexInfo), streamPtrPtr);
17480 ++encodeCount;
17481 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17482 pool->freeAll();
17483 stream->clearPool();
17484 }
17485 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17486 }
17487
vkCmdBindDescriptorSets2(VkCommandBuffer commandBuffer,const VkBindDescriptorSetsInfo * pBindDescriptorSetsInfo,uint32_t doLock)17488 void VkEncoder::vkCmdBindDescriptorSets2(VkCommandBuffer commandBuffer,
17489 const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo,
17490 uint32_t doLock) {
17491 (void)doLock;
17492 bool queueSubmitWithCommandsEnabled =
17493 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17494 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17495 auto stream = mImpl->stream();
17496 auto pool = mImpl->pool();
17497 VkCommandBuffer local_commandBuffer;
17498 VkBindDescriptorSetsInfo* local_pBindDescriptorSetsInfo;
17499 local_commandBuffer = commandBuffer;
17500 local_pBindDescriptorSetsInfo = nullptr;
17501 if (pBindDescriptorSetsInfo) {
17502 local_pBindDescriptorSetsInfo =
17503 (VkBindDescriptorSetsInfo*)pool->alloc(sizeof(const VkBindDescriptorSetsInfo));
17504 deepcopy_VkBindDescriptorSetsInfo(
17505 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindDescriptorSetsInfo,
17506 (VkBindDescriptorSetsInfo*)(local_pBindDescriptorSetsInfo));
17507 }
17508 if (local_pBindDescriptorSetsInfo) {
17509 transform_tohost_VkBindDescriptorSetsInfo(
17510 sResourceTracker, (VkBindDescriptorSetsInfo*)(local_pBindDescriptorSetsInfo));
17511 }
17512 size_t count = 0;
17513 size_t* countPtr = &count;
17514 {
17515 uint64_t cgen_var_0;
17516 *countPtr += 1 * 8;
17517 count_VkBindDescriptorSetsInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17518 (VkBindDescriptorSetsInfo*)(local_pBindDescriptorSetsInfo),
17519 countPtr);
17520 }
17521 uint32_t packetSize_vkCmdBindDescriptorSets2 = 4 + 4 + count;
17522 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindDescriptorSets2 -= 8;
17523 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindDescriptorSets2);
17524 uint8_t* packetBeginPtr = streamPtr;
17525 uint8_t** streamPtrPtr = &streamPtr;
17526 uint32_t opcode_vkCmdBindDescriptorSets2 = OP_vkCmdBindDescriptorSets2;
17527 memcpy(streamPtr, &opcode_vkCmdBindDescriptorSets2, sizeof(uint32_t));
17528 streamPtr += sizeof(uint32_t);
17529 memcpy(streamPtr, &packetSize_vkCmdBindDescriptorSets2, sizeof(uint32_t));
17530 streamPtr += sizeof(uint32_t);
17531 if (!queueSubmitWithCommandsEnabled) {
17532 uint64_t cgen_var_0;
17533 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
17534 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17535 *streamPtrPtr += 1 * 8;
17536 }
17537 reservedmarshal_VkBindDescriptorSetsInfo(
17538 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17539 (VkBindDescriptorSetsInfo*)(local_pBindDescriptorSetsInfo), streamPtrPtr);
17540 ++encodeCount;
17541 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17542 pool->freeAll();
17543 stream->clearPool();
17544 }
17545 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17546 }
17547
vkCmdPushConstants2(VkCommandBuffer commandBuffer,const VkPushConstantsInfo * pPushConstantsInfo,uint32_t doLock)17548 void VkEncoder::vkCmdPushConstants2(VkCommandBuffer commandBuffer,
17549 const VkPushConstantsInfo* pPushConstantsInfo,
17550 uint32_t doLock) {
17551 (void)doLock;
17552 bool queueSubmitWithCommandsEnabled =
17553 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17554 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17555 auto stream = mImpl->stream();
17556 auto pool = mImpl->pool();
17557 VkCommandBuffer local_commandBuffer;
17558 VkPushConstantsInfo* local_pPushConstantsInfo;
17559 local_commandBuffer = commandBuffer;
17560 local_pPushConstantsInfo = nullptr;
17561 if (pPushConstantsInfo) {
17562 local_pPushConstantsInfo =
17563 (VkPushConstantsInfo*)pool->alloc(sizeof(const VkPushConstantsInfo));
17564 deepcopy_VkPushConstantsInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pPushConstantsInfo,
17565 (VkPushConstantsInfo*)(local_pPushConstantsInfo));
17566 }
17567 if (local_pPushConstantsInfo) {
17568 transform_tohost_VkPushConstantsInfo(sResourceTracker,
17569 (VkPushConstantsInfo*)(local_pPushConstantsInfo));
17570 }
17571 size_t count = 0;
17572 size_t* countPtr = &count;
17573 {
17574 uint64_t cgen_var_0;
17575 *countPtr += 1 * 8;
17576 count_VkPushConstantsInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17577 (VkPushConstantsInfo*)(local_pPushConstantsInfo), countPtr);
17578 }
17579 uint32_t packetSize_vkCmdPushConstants2 = 4 + 4 + count;
17580 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdPushConstants2 -= 8;
17581 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdPushConstants2);
17582 uint8_t* packetBeginPtr = streamPtr;
17583 uint8_t** streamPtrPtr = &streamPtr;
17584 uint32_t opcode_vkCmdPushConstants2 = OP_vkCmdPushConstants2;
17585 memcpy(streamPtr, &opcode_vkCmdPushConstants2, sizeof(uint32_t));
17586 streamPtr += sizeof(uint32_t);
17587 memcpy(streamPtr, &packetSize_vkCmdPushConstants2, sizeof(uint32_t));
17588 streamPtr += sizeof(uint32_t);
17589 if (!queueSubmitWithCommandsEnabled) {
17590 uint64_t cgen_var_0;
17591 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
17592 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17593 *streamPtrPtr += 1 * 8;
17594 }
17595 reservedmarshal_VkPushConstantsInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17596 (VkPushConstantsInfo*)(local_pPushConstantsInfo),
17597 streamPtrPtr);
17598 ++encodeCount;
17599 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17600 pool->freeAll();
17601 stream->clearPool();
17602 }
17603 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17604 }
17605
vkCmdPushDescriptorSet2(VkCommandBuffer commandBuffer,const VkPushDescriptorSetInfo * pPushDescriptorSetInfo,uint32_t doLock)17606 void VkEncoder::vkCmdPushDescriptorSet2(VkCommandBuffer commandBuffer,
17607 const VkPushDescriptorSetInfo* pPushDescriptorSetInfo,
17608 uint32_t doLock) {
17609 (void)doLock;
17610 bool queueSubmitWithCommandsEnabled =
17611 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17612 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17613 auto stream = mImpl->stream();
17614 auto pool = mImpl->pool();
17615 VkCommandBuffer local_commandBuffer;
17616 VkPushDescriptorSetInfo* local_pPushDescriptorSetInfo;
17617 local_commandBuffer = commandBuffer;
17618 local_pPushDescriptorSetInfo = nullptr;
17619 if (pPushDescriptorSetInfo) {
17620 local_pPushDescriptorSetInfo =
17621 (VkPushDescriptorSetInfo*)pool->alloc(sizeof(const VkPushDescriptorSetInfo));
17622 deepcopy_VkPushDescriptorSetInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pPushDescriptorSetInfo,
17623 (VkPushDescriptorSetInfo*)(local_pPushDescriptorSetInfo));
17624 }
17625 if (local_pPushDescriptorSetInfo) {
17626 transform_tohost_VkPushDescriptorSetInfo(
17627 sResourceTracker, (VkPushDescriptorSetInfo*)(local_pPushDescriptorSetInfo));
17628 }
17629 size_t count = 0;
17630 size_t* countPtr = &count;
17631 {
17632 uint64_t cgen_var_0;
17633 *countPtr += 1 * 8;
17634 count_VkPushDescriptorSetInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17635 (VkPushDescriptorSetInfo*)(local_pPushDescriptorSetInfo),
17636 countPtr);
17637 }
17638 uint32_t packetSize_vkCmdPushDescriptorSet2 = 4 + 4 + count;
17639 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdPushDescriptorSet2 -= 8;
17640 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdPushDescriptorSet2);
17641 uint8_t* packetBeginPtr = streamPtr;
17642 uint8_t** streamPtrPtr = &streamPtr;
17643 uint32_t opcode_vkCmdPushDescriptorSet2 = OP_vkCmdPushDescriptorSet2;
17644 memcpy(streamPtr, &opcode_vkCmdPushDescriptorSet2, sizeof(uint32_t));
17645 streamPtr += sizeof(uint32_t);
17646 memcpy(streamPtr, &packetSize_vkCmdPushDescriptorSet2, sizeof(uint32_t));
17647 streamPtr += sizeof(uint32_t);
17648 if (!queueSubmitWithCommandsEnabled) {
17649 uint64_t cgen_var_0;
17650 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
17651 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17652 *streamPtrPtr += 1 * 8;
17653 }
17654 reservedmarshal_VkPushDescriptorSetInfo(
17655 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17656 (VkPushDescriptorSetInfo*)(local_pPushDescriptorSetInfo), streamPtrPtr);
17657 ++encodeCount;
17658 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17659 pool->freeAll();
17660 stream->clearPool();
17661 }
17662 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17663 }
17664
vkCmdPushDescriptorSetWithTemplate2(VkCommandBuffer commandBuffer,const VkPushDescriptorSetWithTemplateInfo * pPushDescriptorSetWithTemplateInfo,uint32_t doLock)17665 void VkEncoder::vkCmdPushDescriptorSetWithTemplate2(
17666 VkCommandBuffer commandBuffer,
17667 const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo,
17668 uint32_t doLock) {
17669 (void)doLock;
17670 bool queueSubmitWithCommandsEnabled =
17671 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17672 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17673 auto stream = mImpl->stream();
17674 auto pool = mImpl->pool();
17675 VkCommandBuffer local_commandBuffer;
17676 VkPushDescriptorSetWithTemplateInfo* local_pPushDescriptorSetWithTemplateInfo;
17677 local_commandBuffer = commandBuffer;
17678 local_pPushDescriptorSetWithTemplateInfo = nullptr;
17679 if (pPushDescriptorSetWithTemplateInfo) {
17680 local_pPushDescriptorSetWithTemplateInfo =
17681 (VkPushDescriptorSetWithTemplateInfo*)pool->alloc(
17682 sizeof(const VkPushDescriptorSetWithTemplateInfo));
17683 deepcopy_VkPushDescriptorSetWithTemplateInfo(
17684 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pPushDescriptorSetWithTemplateInfo,
17685 (VkPushDescriptorSetWithTemplateInfo*)(local_pPushDescriptorSetWithTemplateInfo));
17686 }
17687 if (local_pPushDescriptorSetWithTemplateInfo) {
17688 transform_tohost_VkPushDescriptorSetWithTemplateInfo(
17689 sResourceTracker,
17690 (VkPushDescriptorSetWithTemplateInfo*)(local_pPushDescriptorSetWithTemplateInfo));
17691 }
17692 size_t count = 0;
17693 size_t* countPtr = &count;
17694 {
17695 uint64_t cgen_var_0;
17696 *countPtr += 1 * 8;
17697 count_VkPushDescriptorSetWithTemplateInfo(
17698 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17699 (VkPushDescriptorSetWithTemplateInfo*)(local_pPushDescriptorSetWithTemplateInfo),
17700 countPtr);
17701 }
17702 uint32_t packetSize_vkCmdPushDescriptorSetWithTemplate2 = 4 + 4 + count;
17703 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdPushDescriptorSetWithTemplate2 -= 8;
17704 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdPushDescriptorSetWithTemplate2);
17705 uint8_t* packetBeginPtr = streamPtr;
17706 uint8_t** streamPtrPtr = &streamPtr;
17707 uint32_t opcode_vkCmdPushDescriptorSetWithTemplate2 = OP_vkCmdPushDescriptorSetWithTemplate2;
17708 memcpy(streamPtr, &opcode_vkCmdPushDescriptorSetWithTemplate2, sizeof(uint32_t));
17709 streamPtr += sizeof(uint32_t);
17710 memcpy(streamPtr, &packetSize_vkCmdPushDescriptorSetWithTemplate2, sizeof(uint32_t));
17711 streamPtr += sizeof(uint32_t);
17712 if (!queueSubmitWithCommandsEnabled) {
17713 uint64_t cgen_var_0;
17714 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
17715 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17716 *streamPtrPtr += 1 * 8;
17717 }
17718 reservedmarshal_VkPushDescriptorSetWithTemplateInfo(
17719 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17720 (VkPushDescriptorSetWithTemplateInfo*)(local_pPushDescriptorSetWithTemplateInfo),
17721 streamPtrPtr);
17722 ++encodeCount;
17723 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17724 pool->freeAll();
17725 stream->clearPool();
17726 }
17727 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17728 }
17729
vkCopyMemoryToImage(VkDevice device,const VkCopyMemoryToImageInfo * pCopyMemoryToImageInfo,uint32_t doLock)17730 VkResult VkEncoder::vkCopyMemoryToImage(VkDevice device,
17731 const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo,
17732 uint32_t doLock) {
17733 (void)doLock;
17734 bool queueSubmitWithCommandsEnabled =
17735 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17736 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17737 auto stream = mImpl->stream();
17738 auto pool = mImpl->pool();
17739 VkDevice local_device;
17740 VkCopyMemoryToImageInfo* local_pCopyMemoryToImageInfo;
17741 local_device = device;
17742 local_pCopyMemoryToImageInfo = nullptr;
17743 if (pCopyMemoryToImageInfo) {
17744 local_pCopyMemoryToImageInfo =
17745 (VkCopyMemoryToImageInfo*)pool->alloc(sizeof(const VkCopyMemoryToImageInfo));
17746 deepcopy_VkCopyMemoryToImageInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyMemoryToImageInfo,
17747 (VkCopyMemoryToImageInfo*)(local_pCopyMemoryToImageInfo));
17748 }
17749 if (local_pCopyMemoryToImageInfo) {
17750 transform_tohost_VkCopyMemoryToImageInfo(
17751 sResourceTracker, (VkCopyMemoryToImageInfo*)(local_pCopyMemoryToImageInfo));
17752 }
17753 size_t count = 0;
17754 size_t* countPtr = &count;
17755 {
17756 uint64_t cgen_var_0;
17757 *countPtr += 1 * 8;
17758 count_VkCopyMemoryToImageInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17759 (VkCopyMemoryToImageInfo*)(local_pCopyMemoryToImageInfo),
17760 countPtr);
17761 }
17762 uint32_t packetSize_vkCopyMemoryToImage =
17763 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17764 uint8_t* streamPtr = stream->reserve(packetSize_vkCopyMemoryToImage);
17765 uint8_t* packetBeginPtr = streamPtr;
17766 uint8_t** streamPtrPtr = &streamPtr;
17767 uint32_t opcode_vkCopyMemoryToImage = OP_vkCopyMemoryToImage;
17768 uint32_t seqno;
17769 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17770 memcpy(streamPtr, &opcode_vkCopyMemoryToImage, sizeof(uint32_t));
17771 streamPtr += sizeof(uint32_t);
17772 memcpy(streamPtr, &packetSize_vkCopyMemoryToImage, sizeof(uint32_t));
17773 streamPtr += sizeof(uint32_t);
17774 if (queueSubmitWithCommandsEnabled) {
17775 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17776 streamPtr += sizeof(uint32_t);
17777 }
17778 uint64_t cgen_var_0;
17779 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17780 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17781 *streamPtrPtr += 1 * 8;
17782 reservedmarshal_VkCopyMemoryToImageInfo(
17783 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17784 (VkCopyMemoryToImageInfo*)(local_pCopyMemoryToImageInfo), streamPtrPtr);
17785 VkResult vkCopyMemoryToImage_VkResult_return = (VkResult)0;
17786 stream->read(&vkCopyMemoryToImage_VkResult_return, sizeof(VkResult));
17787 ++encodeCount;
17788 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17789 pool->freeAll();
17790 stream->clearPool();
17791 }
17792 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17793 return vkCopyMemoryToImage_VkResult_return;
17794 }
17795
vkCopyImageToMemory(VkDevice device,const VkCopyImageToMemoryInfo * pCopyImageToMemoryInfo,uint32_t doLock)17796 VkResult VkEncoder::vkCopyImageToMemory(VkDevice device,
17797 const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo,
17798 uint32_t doLock) {
17799 (void)doLock;
17800 bool queueSubmitWithCommandsEnabled =
17801 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17802 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17803 auto stream = mImpl->stream();
17804 auto pool = mImpl->pool();
17805 VkDevice local_device;
17806 VkCopyImageToMemoryInfo* local_pCopyImageToMemoryInfo;
17807 local_device = device;
17808 local_pCopyImageToMemoryInfo = nullptr;
17809 if (pCopyImageToMemoryInfo) {
17810 local_pCopyImageToMemoryInfo =
17811 (VkCopyImageToMemoryInfo*)pool->alloc(sizeof(const VkCopyImageToMemoryInfo));
17812 deepcopy_VkCopyImageToMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageToMemoryInfo,
17813 (VkCopyImageToMemoryInfo*)(local_pCopyImageToMemoryInfo));
17814 }
17815 if (local_pCopyImageToMemoryInfo) {
17816 transform_tohost_VkCopyImageToMemoryInfo(
17817 sResourceTracker, (VkCopyImageToMemoryInfo*)(local_pCopyImageToMemoryInfo));
17818 }
17819 size_t count = 0;
17820 size_t* countPtr = &count;
17821 {
17822 uint64_t cgen_var_0;
17823 *countPtr += 1 * 8;
17824 count_VkCopyImageToMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17825 (VkCopyImageToMemoryInfo*)(local_pCopyImageToMemoryInfo),
17826 countPtr);
17827 }
17828 uint32_t packetSize_vkCopyImageToMemory =
17829 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17830 uint8_t* streamPtr = stream->reserve(packetSize_vkCopyImageToMemory);
17831 uint8_t* packetBeginPtr = streamPtr;
17832 uint8_t** streamPtrPtr = &streamPtr;
17833 uint32_t opcode_vkCopyImageToMemory = OP_vkCopyImageToMemory;
17834 uint32_t seqno;
17835 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17836 memcpy(streamPtr, &opcode_vkCopyImageToMemory, sizeof(uint32_t));
17837 streamPtr += sizeof(uint32_t);
17838 memcpy(streamPtr, &packetSize_vkCopyImageToMemory, sizeof(uint32_t));
17839 streamPtr += sizeof(uint32_t);
17840 if (queueSubmitWithCommandsEnabled) {
17841 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17842 streamPtr += sizeof(uint32_t);
17843 }
17844 uint64_t cgen_var_0;
17845 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17846 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17847 *streamPtrPtr += 1 * 8;
17848 reservedmarshal_VkCopyImageToMemoryInfo(
17849 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17850 (VkCopyImageToMemoryInfo*)(local_pCopyImageToMemoryInfo), streamPtrPtr);
17851 VkResult vkCopyImageToMemory_VkResult_return = (VkResult)0;
17852 stream->read(&vkCopyImageToMemory_VkResult_return, sizeof(VkResult));
17853 ++encodeCount;
17854 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17855 pool->freeAll();
17856 stream->clearPool();
17857 }
17858 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17859 return vkCopyImageToMemory_VkResult_return;
17860 }
17861
vkCopyImageToImage(VkDevice device,const VkCopyImageToImageInfo * pCopyImageToImageInfo,uint32_t doLock)17862 VkResult VkEncoder::vkCopyImageToImage(VkDevice device,
17863 const VkCopyImageToImageInfo* pCopyImageToImageInfo,
17864 uint32_t doLock) {
17865 (void)doLock;
17866 bool queueSubmitWithCommandsEnabled =
17867 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17868 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17869 auto stream = mImpl->stream();
17870 auto pool = mImpl->pool();
17871 VkDevice local_device;
17872 VkCopyImageToImageInfo* local_pCopyImageToImageInfo;
17873 local_device = device;
17874 local_pCopyImageToImageInfo = nullptr;
17875 if (pCopyImageToImageInfo) {
17876 local_pCopyImageToImageInfo =
17877 (VkCopyImageToImageInfo*)pool->alloc(sizeof(const VkCopyImageToImageInfo));
17878 deepcopy_VkCopyImageToImageInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageToImageInfo,
17879 (VkCopyImageToImageInfo*)(local_pCopyImageToImageInfo));
17880 }
17881 if (local_pCopyImageToImageInfo) {
17882 transform_tohost_VkCopyImageToImageInfo(
17883 sResourceTracker, (VkCopyImageToImageInfo*)(local_pCopyImageToImageInfo));
17884 }
17885 size_t count = 0;
17886 size_t* countPtr = &count;
17887 {
17888 uint64_t cgen_var_0;
17889 *countPtr += 1 * 8;
17890 count_VkCopyImageToImageInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17891 (VkCopyImageToImageInfo*)(local_pCopyImageToImageInfo),
17892 countPtr);
17893 }
17894 uint32_t packetSize_vkCopyImageToImage =
17895 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17896 uint8_t* streamPtr = stream->reserve(packetSize_vkCopyImageToImage);
17897 uint8_t* packetBeginPtr = streamPtr;
17898 uint8_t** streamPtrPtr = &streamPtr;
17899 uint32_t opcode_vkCopyImageToImage = OP_vkCopyImageToImage;
17900 uint32_t seqno;
17901 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17902 memcpy(streamPtr, &opcode_vkCopyImageToImage, sizeof(uint32_t));
17903 streamPtr += sizeof(uint32_t);
17904 memcpy(streamPtr, &packetSize_vkCopyImageToImage, sizeof(uint32_t));
17905 streamPtr += sizeof(uint32_t);
17906 if (queueSubmitWithCommandsEnabled) {
17907 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17908 streamPtr += sizeof(uint32_t);
17909 }
17910 uint64_t cgen_var_0;
17911 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17912 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17913 *streamPtrPtr += 1 * 8;
17914 reservedmarshal_VkCopyImageToImageInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17915 (VkCopyImageToImageInfo*)(local_pCopyImageToImageInfo),
17916 streamPtrPtr);
17917 VkResult vkCopyImageToImage_VkResult_return = (VkResult)0;
17918 stream->read(&vkCopyImageToImage_VkResult_return, sizeof(VkResult));
17919 ++encodeCount;
17920 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
17921 pool->freeAll();
17922 stream->clearPool();
17923 }
17924 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
17925 return vkCopyImageToImage_VkResult_return;
17926 }
17927
vkTransitionImageLayout(VkDevice device,uint32_t transitionCount,const VkHostImageLayoutTransitionInfo * pTransitions,uint32_t doLock)17928 VkResult VkEncoder::vkTransitionImageLayout(VkDevice device, uint32_t transitionCount,
17929 const VkHostImageLayoutTransitionInfo* pTransitions,
17930 uint32_t doLock) {
17931 (void)doLock;
17932 bool queueSubmitWithCommandsEnabled =
17933 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
17934 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
17935 auto stream = mImpl->stream();
17936 auto pool = mImpl->pool();
17937 VkDevice local_device;
17938 uint32_t local_transitionCount;
17939 VkHostImageLayoutTransitionInfo* local_pTransitions;
17940 local_device = device;
17941 local_transitionCount = transitionCount;
17942 local_pTransitions = nullptr;
17943 if (pTransitions) {
17944 local_pTransitions = (VkHostImageLayoutTransitionInfo*)pool->alloc(
17945 ((transitionCount)) * sizeof(const VkHostImageLayoutTransitionInfo));
17946 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
17947 deepcopy_VkHostImageLayoutTransitionInfo(
17948 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pTransitions + i,
17949 (VkHostImageLayoutTransitionInfo*)(local_pTransitions + i));
17950 }
17951 }
17952 if (local_pTransitions) {
17953 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
17954 transform_tohost_VkHostImageLayoutTransitionInfo(
17955 sResourceTracker, (VkHostImageLayoutTransitionInfo*)(local_pTransitions + i));
17956 }
17957 }
17958 size_t count = 0;
17959 size_t* countPtr = &count;
17960 {
17961 uint64_t cgen_var_0;
17962 *countPtr += 1 * 8;
17963 *countPtr += sizeof(uint32_t);
17964 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
17965 count_VkHostImageLayoutTransitionInfo(
17966 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
17967 (VkHostImageLayoutTransitionInfo*)(local_pTransitions + i), countPtr);
17968 }
17969 }
17970 uint32_t packetSize_vkTransitionImageLayout =
17971 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
17972 uint8_t* streamPtr = stream->reserve(packetSize_vkTransitionImageLayout);
17973 uint8_t* packetBeginPtr = streamPtr;
17974 uint8_t** streamPtrPtr = &streamPtr;
17975 uint32_t opcode_vkTransitionImageLayout = OP_vkTransitionImageLayout;
17976 uint32_t seqno;
17977 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
17978 memcpy(streamPtr, &opcode_vkTransitionImageLayout, sizeof(uint32_t));
17979 streamPtr += sizeof(uint32_t);
17980 memcpy(streamPtr, &packetSize_vkTransitionImageLayout, sizeof(uint32_t));
17981 streamPtr += sizeof(uint32_t);
17982 if (queueSubmitWithCommandsEnabled) {
17983 memcpy(streamPtr, &seqno, sizeof(uint32_t));
17984 streamPtr += sizeof(uint32_t);
17985 }
17986 uint64_t cgen_var_0;
17987 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
17988 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
17989 *streamPtrPtr += 1 * 8;
17990 memcpy(*streamPtrPtr, (uint32_t*)&local_transitionCount, sizeof(uint32_t));
17991 *streamPtrPtr += sizeof(uint32_t);
17992 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
17993 reservedmarshal_VkHostImageLayoutTransitionInfo(
17994 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
17995 (VkHostImageLayoutTransitionInfo*)(local_pTransitions + i), streamPtrPtr);
17996 }
17997 VkResult vkTransitionImageLayout_VkResult_return = (VkResult)0;
17998 stream->read(&vkTransitionImageLayout_VkResult_return, sizeof(VkResult));
17999 ++encodeCount;
18000 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18001 pool->freeAll();
18002 stream->clearPool();
18003 }
18004 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18005 return vkTransitionImageLayout_VkResult_return;
18006 }
18007
18008 #endif
18009 #ifdef VK_KHR_dynamic_rendering
vkCmdBeginRenderingKHR(VkCommandBuffer commandBuffer,const VkRenderingInfo * pRenderingInfo,uint32_t doLock)18010 void VkEncoder::vkCmdBeginRenderingKHR(VkCommandBuffer commandBuffer,
18011 const VkRenderingInfo* pRenderingInfo, uint32_t doLock) {
18012 (void)doLock;
18013 bool queueSubmitWithCommandsEnabled =
18014 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18015 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18016 auto stream = mImpl->stream();
18017 auto pool = mImpl->pool();
18018 VkCommandBuffer local_commandBuffer;
18019 VkRenderingInfo* local_pRenderingInfo;
18020 local_commandBuffer = commandBuffer;
18021 local_pRenderingInfo = nullptr;
18022 if (pRenderingInfo) {
18023 local_pRenderingInfo = (VkRenderingInfo*)pool->alloc(sizeof(const VkRenderingInfo));
18024 deepcopy_VkRenderingInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderingInfo,
18025 (VkRenderingInfo*)(local_pRenderingInfo));
18026 }
18027 if (local_pRenderingInfo) {
18028 transform_tohost_VkRenderingInfo(sResourceTracker,
18029 (VkRenderingInfo*)(local_pRenderingInfo));
18030 }
18031 size_t count = 0;
18032 size_t* countPtr = &count;
18033 {
18034 uint64_t cgen_var_0;
18035 *countPtr += 1 * 8;
18036 count_VkRenderingInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18037 (VkRenderingInfo*)(local_pRenderingInfo), countPtr);
18038 }
18039 uint32_t packetSize_vkCmdBeginRenderingKHR = 4 + 4 + count;
18040 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginRenderingKHR -= 8;
18041 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginRenderingKHR);
18042 uint8_t* packetBeginPtr = streamPtr;
18043 uint8_t** streamPtrPtr = &streamPtr;
18044 uint32_t opcode_vkCmdBeginRenderingKHR = OP_vkCmdBeginRenderingKHR;
18045 memcpy(streamPtr, &opcode_vkCmdBeginRenderingKHR, sizeof(uint32_t));
18046 streamPtr += sizeof(uint32_t);
18047 memcpy(streamPtr, &packetSize_vkCmdBeginRenderingKHR, sizeof(uint32_t));
18048 streamPtr += sizeof(uint32_t);
18049 if (!queueSubmitWithCommandsEnabled) {
18050 uint64_t cgen_var_0;
18051 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
18052 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18053 *streamPtrPtr += 1 * 8;
18054 }
18055 reservedmarshal_VkRenderingInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18056 (VkRenderingInfo*)(local_pRenderingInfo), streamPtrPtr);
18057 ++encodeCount;
18058 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18059 pool->freeAll();
18060 stream->clearPool();
18061 }
18062 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18063 }
18064
vkCmdEndRenderingKHR(VkCommandBuffer commandBuffer,uint32_t doLock)18065 void VkEncoder::vkCmdEndRenderingKHR(VkCommandBuffer commandBuffer, uint32_t doLock) {
18066 (void)doLock;
18067 bool queueSubmitWithCommandsEnabled =
18068 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18069 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18070 auto stream = mImpl->stream();
18071 auto pool = mImpl->pool();
18072 VkCommandBuffer local_commandBuffer;
18073 local_commandBuffer = commandBuffer;
18074 size_t count = 0;
18075 size_t* countPtr = &count;
18076 {
18077 uint64_t cgen_var_0;
18078 *countPtr += 1 * 8;
18079 }
18080 uint32_t packetSize_vkCmdEndRenderingKHR = 4 + 4 + count;
18081 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndRenderingKHR -= 8;
18082 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndRenderingKHR);
18083 uint8_t* packetBeginPtr = streamPtr;
18084 uint8_t** streamPtrPtr = &streamPtr;
18085 uint32_t opcode_vkCmdEndRenderingKHR = OP_vkCmdEndRenderingKHR;
18086 memcpy(streamPtr, &opcode_vkCmdEndRenderingKHR, sizeof(uint32_t));
18087 streamPtr += sizeof(uint32_t);
18088 memcpy(streamPtr, &packetSize_vkCmdEndRenderingKHR, sizeof(uint32_t));
18089 streamPtr += sizeof(uint32_t);
18090 if (!queueSubmitWithCommandsEnabled) {
18091 uint64_t cgen_var_0;
18092 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
18093 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18094 *streamPtrPtr += 1 * 8;
18095 }
18096 ++encodeCount;
18097 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18098 pool->freeAll();
18099 stream->clearPool();
18100 }
18101 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18102 }
18103
18104 #endif
18105 #ifdef VK_KHR_get_physical_device_properties2
vkGetPhysicalDeviceFeatures2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures2 * pFeatures,uint32_t doLock)18106 void VkEncoder::vkGetPhysicalDeviceFeatures2KHR(VkPhysicalDevice physicalDevice,
18107 VkPhysicalDeviceFeatures2* pFeatures,
18108 uint32_t doLock) {
18109 (void)doLock;
18110 bool queueSubmitWithCommandsEnabled =
18111 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18112 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18113 auto stream = mImpl->stream();
18114 auto pool = mImpl->pool();
18115 VkPhysicalDevice local_physicalDevice;
18116 local_physicalDevice = physicalDevice;
18117 size_t count = 0;
18118 size_t* countPtr = &count;
18119 {
18120 uint64_t cgen_var_0;
18121 *countPtr += 1 * 8;
18122 count_VkPhysicalDeviceFeatures2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18123 (VkPhysicalDeviceFeatures2*)(pFeatures), countPtr);
18124 }
18125 uint32_t packetSize_vkGetPhysicalDeviceFeatures2KHR =
18126 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18127 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFeatures2KHR);
18128 uint8_t* packetBeginPtr = streamPtr;
18129 uint8_t** streamPtrPtr = &streamPtr;
18130 uint32_t opcode_vkGetPhysicalDeviceFeatures2KHR = OP_vkGetPhysicalDeviceFeatures2KHR;
18131 uint32_t seqno;
18132 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18133 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceFeatures2KHR, sizeof(uint32_t));
18134 streamPtr += sizeof(uint32_t);
18135 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceFeatures2KHR, sizeof(uint32_t));
18136 streamPtr += sizeof(uint32_t);
18137 if (queueSubmitWithCommandsEnabled) {
18138 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18139 streamPtr += sizeof(uint32_t);
18140 }
18141 uint64_t cgen_var_0;
18142 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
18143 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18144 *streamPtrPtr += 1 * 8;
18145 reservedmarshal_VkPhysicalDeviceFeatures2(
18146 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures2*)(pFeatures), streamPtrPtr);
18147 unmarshal_VkPhysicalDeviceFeatures2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18148 (VkPhysicalDeviceFeatures2*)(pFeatures));
18149 if (pFeatures) {
18150 transform_fromhost_VkPhysicalDeviceFeatures2(sResourceTracker,
18151 (VkPhysicalDeviceFeatures2*)(pFeatures));
18152 }
18153 sResourceTracker->on_vkGetPhysicalDeviceFeatures2KHR(this, physicalDevice, pFeatures);
18154 ++encodeCount;
18155 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18156 pool->freeAll();
18157 stream->clearPool();
18158 }
18159 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18160 }
18161
vkGetPhysicalDeviceProperties2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties2 * pProperties,uint32_t doLock)18162 void VkEncoder::vkGetPhysicalDeviceProperties2KHR(VkPhysicalDevice physicalDevice,
18163 VkPhysicalDeviceProperties2* pProperties,
18164 uint32_t doLock) {
18165 (void)doLock;
18166 bool queueSubmitWithCommandsEnabled =
18167 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18168 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18169 auto stream = mImpl->stream();
18170 auto pool = mImpl->pool();
18171 VkPhysicalDevice local_physicalDevice;
18172 local_physicalDevice = physicalDevice;
18173 size_t count = 0;
18174 size_t* countPtr = &count;
18175 {
18176 uint64_t cgen_var_0;
18177 *countPtr += 1 * 8;
18178 count_VkPhysicalDeviceProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18179 (VkPhysicalDeviceProperties2*)(pProperties), countPtr);
18180 }
18181 uint32_t packetSize_vkGetPhysicalDeviceProperties2KHR =
18182 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18183 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceProperties2KHR);
18184 uint8_t* packetBeginPtr = streamPtr;
18185 uint8_t** streamPtrPtr = &streamPtr;
18186 uint32_t opcode_vkGetPhysicalDeviceProperties2KHR = OP_vkGetPhysicalDeviceProperties2KHR;
18187 uint32_t seqno;
18188 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18189 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceProperties2KHR, sizeof(uint32_t));
18190 streamPtr += sizeof(uint32_t);
18191 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceProperties2KHR, sizeof(uint32_t));
18192 streamPtr += sizeof(uint32_t);
18193 if (queueSubmitWithCommandsEnabled) {
18194 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18195 streamPtr += sizeof(uint32_t);
18196 }
18197 uint64_t cgen_var_0;
18198 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
18199 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18200 *streamPtrPtr += 1 * 8;
18201 reservedmarshal_VkPhysicalDeviceProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18202 (VkPhysicalDeviceProperties2*)(pProperties),
18203 streamPtrPtr);
18204 unmarshal_VkPhysicalDeviceProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18205 (VkPhysicalDeviceProperties2*)(pProperties));
18206 if (pProperties) {
18207 transform_fromhost_VkPhysicalDeviceProperties2(sResourceTracker,
18208 (VkPhysicalDeviceProperties2*)(pProperties));
18209 }
18210 sResourceTracker->on_vkGetPhysicalDeviceProperties2KHR(this, physicalDevice, pProperties);
18211 ++encodeCount;
18212 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18213 pool->freeAll();
18214 stream->clearPool();
18215 }
18216 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18217 }
18218
vkGetPhysicalDeviceFormatProperties2KHR(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties2 * pFormatProperties,uint32_t doLock)18219 void VkEncoder::vkGetPhysicalDeviceFormatProperties2KHR(VkPhysicalDevice physicalDevice,
18220 VkFormat format,
18221 VkFormatProperties2* pFormatProperties,
18222 uint32_t doLock) {
18223 (void)doLock;
18224 bool queueSubmitWithCommandsEnabled =
18225 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18226 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18227 auto stream = mImpl->stream();
18228 auto pool = mImpl->pool();
18229 VkPhysicalDevice local_physicalDevice;
18230 VkFormat local_format;
18231 local_physicalDevice = physicalDevice;
18232 local_format = format;
18233 size_t count = 0;
18234 size_t* countPtr = &count;
18235 {
18236 uint64_t cgen_var_0;
18237 *countPtr += 1 * 8;
18238 *countPtr += sizeof(VkFormat);
18239 count_VkFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18240 (VkFormatProperties2*)(pFormatProperties), countPtr);
18241 }
18242 uint32_t packetSize_vkGetPhysicalDeviceFormatProperties2KHR =
18243 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18244 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFormatProperties2KHR);
18245 uint8_t* packetBeginPtr = streamPtr;
18246 uint8_t** streamPtrPtr = &streamPtr;
18247 uint32_t opcode_vkGetPhysicalDeviceFormatProperties2KHR =
18248 OP_vkGetPhysicalDeviceFormatProperties2KHR;
18249 uint32_t seqno;
18250 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18251 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceFormatProperties2KHR, sizeof(uint32_t));
18252 streamPtr += sizeof(uint32_t);
18253 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceFormatProperties2KHR, sizeof(uint32_t));
18254 streamPtr += sizeof(uint32_t);
18255 if (queueSubmitWithCommandsEnabled) {
18256 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18257 streamPtr += sizeof(uint32_t);
18258 }
18259 uint64_t cgen_var_0;
18260 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
18261 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18262 *streamPtrPtr += 1 * 8;
18263 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
18264 *streamPtrPtr += sizeof(VkFormat);
18265 reservedmarshal_VkFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18266 (VkFormatProperties2*)(pFormatProperties), streamPtrPtr);
18267 unmarshal_VkFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18268 (VkFormatProperties2*)(pFormatProperties));
18269 if (pFormatProperties) {
18270 transform_fromhost_VkFormatProperties2(sResourceTracker,
18271 (VkFormatProperties2*)(pFormatProperties));
18272 }
18273 ++encodeCount;
18274 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18275 pool->freeAll();
18276 stream->clearPool();
18277 }
18278 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18279 }
18280
vkGetPhysicalDeviceImageFormatProperties2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo,VkImageFormatProperties2 * pImageFormatProperties,uint32_t doLock)18281 VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2KHR(
18282 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
18283 VkImageFormatProperties2* pImageFormatProperties, uint32_t doLock) {
18284 (void)doLock;
18285 bool queueSubmitWithCommandsEnabled =
18286 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18287 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18288 auto stream = mImpl->stream();
18289 auto pool = mImpl->pool();
18290 VkPhysicalDevice local_physicalDevice;
18291 VkPhysicalDeviceImageFormatInfo2* local_pImageFormatInfo;
18292 local_physicalDevice = physicalDevice;
18293 local_pImageFormatInfo = nullptr;
18294 if (pImageFormatInfo) {
18295 local_pImageFormatInfo = (VkPhysicalDeviceImageFormatInfo2*)pool->alloc(
18296 sizeof(const VkPhysicalDeviceImageFormatInfo2));
18297 deepcopy_VkPhysicalDeviceImageFormatInfo2(
18298 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageFormatInfo,
18299 (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
18300 }
18301 if (local_pImageFormatInfo) {
18302 transform_tohost_VkPhysicalDeviceImageFormatInfo2(
18303 sResourceTracker, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
18304 }
18305 size_t count = 0;
18306 size_t* countPtr = &count;
18307 {
18308 uint64_t cgen_var_0;
18309 *countPtr += 1 * 8;
18310 count_VkPhysicalDeviceImageFormatInfo2(
18311 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18312 (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), countPtr);
18313 count_VkImageFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18314 (VkImageFormatProperties2*)(pImageFormatProperties),
18315 countPtr);
18316 }
18317 uint32_t packetSize_vkGetPhysicalDeviceImageFormatProperties2KHR =
18318 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18319 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceImageFormatProperties2KHR);
18320 uint8_t* packetBeginPtr = streamPtr;
18321 uint8_t** streamPtrPtr = &streamPtr;
18322 uint32_t opcode_vkGetPhysicalDeviceImageFormatProperties2KHR =
18323 OP_vkGetPhysicalDeviceImageFormatProperties2KHR;
18324 uint32_t seqno;
18325 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18326 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceImageFormatProperties2KHR, sizeof(uint32_t));
18327 streamPtr += sizeof(uint32_t);
18328 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceImageFormatProperties2KHR, sizeof(uint32_t));
18329 streamPtr += sizeof(uint32_t);
18330 if (queueSubmitWithCommandsEnabled) {
18331 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18332 streamPtr += sizeof(uint32_t);
18333 }
18334 uint64_t cgen_var_0;
18335 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
18336 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18337 *streamPtrPtr += 1 * 8;
18338 reservedmarshal_VkPhysicalDeviceImageFormatInfo2(
18339 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18340 (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), streamPtrPtr);
18341 reservedmarshal_VkImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18342 (VkImageFormatProperties2*)(pImageFormatProperties),
18343 streamPtrPtr);
18344 unmarshal_VkImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18345 (VkImageFormatProperties2*)(pImageFormatProperties));
18346 if (pImageFormatProperties) {
18347 transform_fromhost_VkImageFormatProperties2(
18348 sResourceTracker, (VkImageFormatProperties2*)(pImageFormatProperties));
18349 }
18350 VkResult vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return = (VkResult)0;
18351 stream->read(&vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return, sizeof(VkResult));
18352 ++encodeCount;
18353 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18354 pool->freeAll();
18355 stream->clearPool();
18356 }
18357 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18358 return vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return;
18359 }
18360
vkGetPhysicalDeviceQueueFamilyProperties2KHR(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties2 * pQueueFamilyProperties,uint32_t doLock)18361 void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties2KHR(
18362 VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount,
18363 VkQueueFamilyProperties2* pQueueFamilyProperties, uint32_t doLock) {
18364 (void)doLock;
18365 bool queueSubmitWithCommandsEnabled =
18366 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18367 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18368 auto stream = mImpl->stream();
18369 auto pool = mImpl->pool();
18370 VkPhysicalDevice local_physicalDevice;
18371 local_physicalDevice = physicalDevice;
18372 size_t count = 0;
18373 size_t* countPtr = &count;
18374 {
18375 uint64_t cgen_var_0;
18376 *countPtr += 1 * 8;
18377 // WARNING PTR CHECK
18378 *countPtr += 8;
18379 if (pQueueFamilyPropertyCount) {
18380 *countPtr += sizeof(uint32_t);
18381 }
18382 // WARNING PTR CHECK
18383 *countPtr += 8;
18384 if (pQueueFamilyProperties) {
18385 if (pQueueFamilyPropertyCount) {
18386 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
18387 count_VkQueueFamilyProperties2(
18388 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18389 (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), countPtr);
18390 }
18391 }
18392 }
18393 }
18394 uint32_t packetSize_vkGetPhysicalDeviceQueueFamilyProperties2KHR =
18395 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18396 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceQueueFamilyProperties2KHR);
18397 uint8_t* packetBeginPtr = streamPtr;
18398 uint8_t** streamPtrPtr = &streamPtr;
18399 uint32_t opcode_vkGetPhysicalDeviceQueueFamilyProperties2KHR =
18400 OP_vkGetPhysicalDeviceQueueFamilyProperties2KHR;
18401 uint32_t seqno;
18402 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18403 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceQueueFamilyProperties2KHR, sizeof(uint32_t));
18404 streamPtr += sizeof(uint32_t);
18405 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceQueueFamilyProperties2KHR, sizeof(uint32_t));
18406 streamPtr += sizeof(uint32_t);
18407 if (queueSubmitWithCommandsEnabled) {
18408 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18409 streamPtr += sizeof(uint32_t);
18410 }
18411 uint64_t cgen_var_0;
18412 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
18413 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18414 *streamPtrPtr += 1 * 8;
18415 // WARNING PTR CHECK
18416 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
18417 memcpy((*streamPtrPtr), &cgen_var_1, 8);
18418 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
18419 *streamPtrPtr += 8;
18420 if (pQueueFamilyPropertyCount) {
18421 memcpy(*streamPtrPtr, (uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
18422 *streamPtrPtr += sizeof(uint32_t);
18423 }
18424 // WARNING PTR CHECK
18425 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
18426 memcpy((*streamPtrPtr), &cgen_var_2, 8);
18427 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
18428 *streamPtrPtr += 8;
18429 if (pQueueFamilyProperties) {
18430 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
18431 reservedmarshal_VkQueueFamilyProperties2(
18432 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18433 (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), streamPtrPtr);
18434 }
18435 }
18436 // WARNING PTR CHECK
18437 uint32_t* check_pQueueFamilyPropertyCount;
18438 check_pQueueFamilyPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
18439 if (pQueueFamilyPropertyCount) {
18440 if (!(check_pQueueFamilyPropertyCount)) {
18441 fprintf(stderr,
18442 "fatal: pQueueFamilyPropertyCount inconsistent between guest and host\n");
18443 }
18444 stream->read((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
18445 }
18446 // WARNING PTR CHECK
18447 VkQueueFamilyProperties2* check_pQueueFamilyProperties;
18448 check_pQueueFamilyProperties = (VkQueueFamilyProperties2*)(uintptr_t)stream->getBe64();
18449 if (pQueueFamilyProperties) {
18450 if (!(check_pQueueFamilyProperties)) {
18451 fprintf(stderr, "fatal: pQueueFamilyProperties inconsistent between guest and host\n");
18452 }
18453 if (pQueueFamilyPropertyCount) {
18454 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
18455 unmarshal_VkQueueFamilyProperties2(
18456 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18457 (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
18458 }
18459 }
18460 }
18461 if (pQueueFamilyPropertyCount) {
18462 if (pQueueFamilyProperties) {
18463 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i) {
18464 transform_fromhost_VkQueueFamilyProperties2(
18465 sResourceTracker, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
18466 }
18467 }
18468 }
18469 ++encodeCount;
18470 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18471 pool->freeAll();
18472 stream->clearPool();
18473 }
18474 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18475 }
18476
vkGetPhysicalDeviceMemoryProperties2KHR(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties2 * pMemoryProperties,uint32_t doLock)18477 void VkEncoder::vkGetPhysicalDeviceMemoryProperties2KHR(
18478 VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties,
18479 uint32_t doLock) {
18480 (void)doLock;
18481 bool queueSubmitWithCommandsEnabled =
18482 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18483 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18484 auto stream = mImpl->stream();
18485 auto pool = mImpl->pool();
18486 VkPhysicalDevice local_physicalDevice;
18487 local_physicalDevice = physicalDevice;
18488 size_t count = 0;
18489 size_t* countPtr = &count;
18490 {
18491 uint64_t cgen_var_0;
18492 *countPtr += 1 * 8;
18493 count_VkPhysicalDeviceMemoryProperties2(
18494 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18495 (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), countPtr);
18496 }
18497 uint32_t packetSize_vkGetPhysicalDeviceMemoryProperties2KHR =
18498 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18499 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceMemoryProperties2KHR);
18500 uint8_t* packetBeginPtr = streamPtr;
18501 uint8_t** streamPtrPtr = &streamPtr;
18502 uint32_t opcode_vkGetPhysicalDeviceMemoryProperties2KHR =
18503 OP_vkGetPhysicalDeviceMemoryProperties2KHR;
18504 uint32_t seqno;
18505 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18506 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceMemoryProperties2KHR, sizeof(uint32_t));
18507 streamPtr += sizeof(uint32_t);
18508 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceMemoryProperties2KHR, sizeof(uint32_t));
18509 streamPtr += sizeof(uint32_t);
18510 if (queueSubmitWithCommandsEnabled) {
18511 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18512 streamPtr += sizeof(uint32_t);
18513 }
18514 uint64_t cgen_var_0;
18515 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
18516 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18517 *streamPtrPtr += 1 * 8;
18518 reservedmarshal_VkPhysicalDeviceMemoryProperties2(
18519 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties),
18520 streamPtrPtr);
18521 unmarshal_VkPhysicalDeviceMemoryProperties2(
18522 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18523 (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
18524 if (pMemoryProperties) {
18525 transform_fromhost_VkPhysicalDeviceMemoryProperties2(
18526 sResourceTracker, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
18527 }
18528 ++encodeCount;
18529 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18530 pool->freeAll();
18531 stream->clearPool();
18532 }
18533 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18534 }
18535
vkGetPhysicalDeviceSparseImageFormatProperties2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo,uint32_t * pPropertyCount,VkSparseImageFormatProperties2 * pProperties,uint32_t doLock)18536 void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
18537 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
18538 uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties, uint32_t doLock) {
18539 (void)doLock;
18540 bool queueSubmitWithCommandsEnabled =
18541 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18542 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18543 auto stream = mImpl->stream();
18544 auto pool = mImpl->pool();
18545 VkPhysicalDevice local_physicalDevice;
18546 VkPhysicalDeviceSparseImageFormatInfo2* local_pFormatInfo;
18547 local_physicalDevice = physicalDevice;
18548 local_pFormatInfo = nullptr;
18549 if (pFormatInfo) {
18550 local_pFormatInfo = (VkPhysicalDeviceSparseImageFormatInfo2*)pool->alloc(
18551 sizeof(const VkPhysicalDeviceSparseImageFormatInfo2));
18552 deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(
18553 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pFormatInfo,
18554 (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
18555 }
18556 if (local_pFormatInfo) {
18557 transform_tohost_VkPhysicalDeviceSparseImageFormatInfo2(
18558 sResourceTracker, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
18559 }
18560 size_t count = 0;
18561 size_t* countPtr = &count;
18562 {
18563 uint64_t cgen_var_0;
18564 *countPtr += 1 * 8;
18565 count_VkPhysicalDeviceSparseImageFormatInfo2(
18566 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18567 (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), countPtr);
18568 // WARNING PTR CHECK
18569 *countPtr += 8;
18570 if (pPropertyCount) {
18571 *countPtr += sizeof(uint32_t);
18572 }
18573 // WARNING PTR CHECK
18574 *countPtr += 8;
18575 if (pProperties) {
18576 if (pPropertyCount) {
18577 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
18578 count_VkSparseImageFormatProperties2(
18579 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18580 (VkSparseImageFormatProperties2*)(pProperties + i), countPtr);
18581 }
18582 }
18583 }
18584 }
18585 uint32_t packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2KHR =
18586 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18587 uint8_t* streamPtr =
18588 stream->reserve(packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2KHR);
18589 uint8_t* packetBeginPtr = streamPtr;
18590 uint8_t** streamPtrPtr = &streamPtr;
18591 uint32_t opcode_vkGetPhysicalDeviceSparseImageFormatProperties2KHR =
18592 OP_vkGetPhysicalDeviceSparseImageFormatProperties2KHR;
18593 uint32_t seqno;
18594 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18595 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceSparseImageFormatProperties2KHR, sizeof(uint32_t));
18596 streamPtr += sizeof(uint32_t);
18597 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2KHR,
18598 sizeof(uint32_t));
18599 streamPtr += sizeof(uint32_t);
18600 if (queueSubmitWithCommandsEnabled) {
18601 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18602 streamPtr += sizeof(uint32_t);
18603 }
18604 uint64_t cgen_var_0;
18605 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
18606 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18607 *streamPtrPtr += 1 * 8;
18608 reservedmarshal_VkPhysicalDeviceSparseImageFormatInfo2(
18609 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18610 (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), streamPtrPtr);
18611 // WARNING PTR CHECK
18612 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pPropertyCount;
18613 memcpy((*streamPtrPtr), &cgen_var_1, 8);
18614 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
18615 *streamPtrPtr += 8;
18616 if (pPropertyCount) {
18617 memcpy(*streamPtrPtr, (uint32_t*)pPropertyCount, sizeof(uint32_t));
18618 *streamPtrPtr += sizeof(uint32_t);
18619 }
18620 // WARNING PTR CHECK
18621 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pProperties;
18622 memcpy((*streamPtrPtr), &cgen_var_2, 8);
18623 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
18624 *streamPtrPtr += 8;
18625 if (pProperties) {
18626 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
18627 reservedmarshal_VkSparseImageFormatProperties2(
18628 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18629 (VkSparseImageFormatProperties2*)(pProperties + i), streamPtrPtr);
18630 }
18631 }
18632 // WARNING PTR CHECK
18633 uint32_t* check_pPropertyCount;
18634 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
18635 if (pPropertyCount) {
18636 if (!(check_pPropertyCount)) {
18637 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
18638 }
18639 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
18640 }
18641 // WARNING PTR CHECK
18642 VkSparseImageFormatProperties2* check_pProperties;
18643 check_pProperties = (VkSparseImageFormatProperties2*)(uintptr_t)stream->getBe64();
18644 if (pProperties) {
18645 if (!(check_pProperties)) {
18646 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
18647 }
18648 if (pPropertyCount) {
18649 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
18650 unmarshal_VkSparseImageFormatProperties2(
18651 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18652 (VkSparseImageFormatProperties2*)(pProperties + i));
18653 }
18654 }
18655 }
18656 if (pPropertyCount) {
18657 if (pProperties) {
18658 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i) {
18659 transform_fromhost_VkSparseImageFormatProperties2(
18660 sResourceTracker, (VkSparseImageFormatProperties2*)(pProperties + i));
18661 }
18662 }
18663 }
18664 ++encodeCount;
18665 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18666 pool->freeAll();
18667 stream->clearPool();
18668 }
18669 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18670 }
18671
18672 #endif
18673 #ifdef VK_KHR_maintenance1
vkTrimCommandPoolKHR(VkDevice device,VkCommandPool commandPool,VkCommandPoolTrimFlags flags,uint32_t doLock)18674 void VkEncoder::vkTrimCommandPoolKHR(VkDevice device, VkCommandPool commandPool,
18675 VkCommandPoolTrimFlags flags, uint32_t doLock) {
18676 (void)doLock;
18677 bool queueSubmitWithCommandsEnabled =
18678 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18679 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18680 auto stream = mImpl->stream();
18681 auto pool = mImpl->pool();
18682 VkDevice local_device;
18683 VkCommandPool local_commandPool;
18684 VkCommandPoolTrimFlags local_flags;
18685 local_device = device;
18686 local_commandPool = commandPool;
18687 local_flags = flags;
18688 size_t count = 0;
18689 size_t* countPtr = &count;
18690 {
18691 uint64_t cgen_var_0;
18692 *countPtr += 1 * 8;
18693 uint64_t cgen_var_1;
18694 *countPtr += 1 * 8;
18695 *countPtr += sizeof(VkCommandPoolTrimFlags);
18696 }
18697 uint32_t packetSize_vkTrimCommandPoolKHR =
18698 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18699 uint8_t* streamPtr = stream->reserve(packetSize_vkTrimCommandPoolKHR);
18700 uint8_t* packetBeginPtr = streamPtr;
18701 uint8_t** streamPtrPtr = &streamPtr;
18702 uint32_t opcode_vkTrimCommandPoolKHR = OP_vkTrimCommandPoolKHR;
18703 uint32_t seqno;
18704 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18705 memcpy(streamPtr, &opcode_vkTrimCommandPoolKHR, sizeof(uint32_t));
18706 streamPtr += sizeof(uint32_t);
18707 memcpy(streamPtr, &packetSize_vkTrimCommandPoolKHR, sizeof(uint32_t));
18708 streamPtr += sizeof(uint32_t);
18709 if (queueSubmitWithCommandsEnabled) {
18710 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18711 streamPtr += sizeof(uint32_t);
18712 }
18713 uint64_t cgen_var_0;
18714 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
18715 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18716 *streamPtrPtr += 1 * 8;
18717 uint64_t cgen_var_1;
18718 *&cgen_var_1 = get_host_u64_VkCommandPool((*&local_commandPool));
18719 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
18720 *streamPtrPtr += 1 * 8;
18721 memcpy(*streamPtrPtr, (VkCommandPoolTrimFlags*)&local_flags, sizeof(VkCommandPoolTrimFlags));
18722 *streamPtrPtr += sizeof(VkCommandPoolTrimFlags);
18723 stream->flush();
18724 ++encodeCount;
18725 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18726 pool->freeAll();
18727 stream->clearPool();
18728 }
18729 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18730 }
18731
18732 #endif
18733 #ifdef VK_KHR_external_memory_capabilities
vkGetPhysicalDeviceExternalBufferPropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo,VkExternalBufferProperties * pExternalBufferProperties,uint32_t doLock)18734 void VkEncoder::vkGetPhysicalDeviceExternalBufferPropertiesKHR(
18735 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
18736 VkExternalBufferProperties* pExternalBufferProperties, uint32_t doLock) {
18737 (void)doLock;
18738 bool queueSubmitWithCommandsEnabled =
18739 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18740 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18741 auto stream = mImpl->stream();
18742 auto pool = mImpl->pool();
18743 VkPhysicalDevice local_physicalDevice;
18744 VkPhysicalDeviceExternalBufferInfo* local_pExternalBufferInfo;
18745 local_physicalDevice = physicalDevice;
18746 local_pExternalBufferInfo = nullptr;
18747 if (pExternalBufferInfo) {
18748 local_pExternalBufferInfo = (VkPhysicalDeviceExternalBufferInfo*)pool->alloc(
18749 sizeof(const VkPhysicalDeviceExternalBufferInfo));
18750 deepcopy_VkPhysicalDeviceExternalBufferInfo(
18751 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalBufferInfo,
18752 (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
18753 }
18754 if (local_pExternalBufferInfo) {
18755 sResourceTracker->transformImpl_VkPhysicalDeviceExternalBufferInfo_tohost(
18756 local_pExternalBufferInfo, 1);
18757 transform_tohost_VkPhysicalDeviceExternalBufferInfo(
18758 sResourceTracker, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
18759 }
18760 size_t count = 0;
18761 size_t* countPtr = &count;
18762 {
18763 uint64_t cgen_var_0;
18764 *countPtr += 1 * 8;
18765 count_VkPhysicalDeviceExternalBufferInfo(
18766 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18767 (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), countPtr);
18768 count_VkExternalBufferProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18769 (VkExternalBufferProperties*)(pExternalBufferProperties),
18770 countPtr);
18771 }
18772 uint32_t packetSize_vkGetPhysicalDeviceExternalBufferPropertiesKHR =
18773 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18774 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalBufferPropertiesKHR);
18775 uint8_t* packetBeginPtr = streamPtr;
18776 uint8_t** streamPtrPtr = &streamPtr;
18777 uint32_t opcode_vkGetPhysicalDeviceExternalBufferPropertiesKHR =
18778 OP_vkGetPhysicalDeviceExternalBufferPropertiesKHR;
18779 uint32_t seqno;
18780 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18781 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceExternalBufferPropertiesKHR, sizeof(uint32_t));
18782 streamPtr += sizeof(uint32_t);
18783 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceExternalBufferPropertiesKHR, sizeof(uint32_t));
18784 streamPtr += sizeof(uint32_t);
18785 if (queueSubmitWithCommandsEnabled) {
18786 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18787 streamPtr += sizeof(uint32_t);
18788 }
18789 uint64_t cgen_var_0;
18790 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
18791 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18792 *streamPtrPtr += 1 * 8;
18793 reservedmarshal_VkPhysicalDeviceExternalBufferInfo(
18794 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18795 (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), streamPtrPtr);
18796 reservedmarshal_VkExternalBufferProperties(
18797 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18798 (VkExternalBufferProperties*)(pExternalBufferProperties), streamPtrPtr);
18799 unmarshal_VkExternalBufferProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18800 (VkExternalBufferProperties*)(pExternalBufferProperties));
18801 if (pExternalBufferProperties) {
18802 sResourceTracker->transformImpl_VkExternalBufferProperties_fromhost(
18803 pExternalBufferProperties, 1);
18804 transform_fromhost_VkExternalBufferProperties(
18805 sResourceTracker, (VkExternalBufferProperties*)(pExternalBufferProperties));
18806 }
18807 ++encodeCount;
18808 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18809 pool->freeAll();
18810 stream->clearPool();
18811 }
18812 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18813 }
18814
18815 #endif
18816 #ifdef VK_KHR_external_semaphore_capabilities
vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo,VkExternalSemaphoreProperties * pExternalSemaphoreProperties,uint32_t doLock)18817 void VkEncoder::vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
18818 VkPhysicalDevice physicalDevice,
18819 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
18820 VkExternalSemaphoreProperties* pExternalSemaphoreProperties, uint32_t doLock) {
18821 (void)doLock;
18822 bool queueSubmitWithCommandsEnabled =
18823 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18824 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18825 auto stream = mImpl->stream();
18826 auto pool = mImpl->pool();
18827 VkPhysicalDevice local_physicalDevice;
18828 VkPhysicalDeviceExternalSemaphoreInfo* local_pExternalSemaphoreInfo;
18829 local_physicalDevice = physicalDevice;
18830 local_pExternalSemaphoreInfo = nullptr;
18831 if (pExternalSemaphoreInfo) {
18832 local_pExternalSemaphoreInfo = (VkPhysicalDeviceExternalSemaphoreInfo*)pool->alloc(
18833 sizeof(const VkPhysicalDeviceExternalSemaphoreInfo));
18834 deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(
18835 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalSemaphoreInfo,
18836 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
18837 }
18838 if (local_pExternalSemaphoreInfo) {
18839 transform_tohost_VkPhysicalDeviceExternalSemaphoreInfo(
18840 sResourceTracker,
18841 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
18842 }
18843 size_t count = 0;
18844 size_t* countPtr = &count;
18845 {
18846 uint64_t cgen_var_0;
18847 *countPtr += 1 * 8;
18848 count_VkPhysicalDeviceExternalSemaphoreInfo(
18849 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18850 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), countPtr);
18851 count_VkExternalSemaphoreProperties(
18852 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18853 (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), countPtr);
18854 }
18855 uint32_t packetSize_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR =
18856 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18857 uint8_t* streamPtr =
18858 stream->reserve(packetSize_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR);
18859 uint8_t* packetBeginPtr = streamPtr;
18860 uint8_t** streamPtrPtr = &streamPtr;
18861 uint32_t opcode_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR =
18862 OP_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR;
18863 uint32_t seqno;
18864 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18865 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR, sizeof(uint32_t));
18866 streamPtr += sizeof(uint32_t);
18867 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR,
18868 sizeof(uint32_t));
18869 streamPtr += sizeof(uint32_t);
18870 if (queueSubmitWithCommandsEnabled) {
18871 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18872 streamPtr += sizeof(uint32_t);
18873 }
18874 uint64_t cgen_var_0;
18875 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
18876 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18877 *streamPtrPtr += 1 * 8;
18878 reservedmarshal_VkPhysicalDeviceExternalSemaphoreInfo(
18879 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18880 (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), streamPtrPtr);
18881 reservedmarshal_VkExternalSemaphoreProperties(
18882 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18883 (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), streamPtrPtr);
18884 unmarshal_VkExternalSemaphoreProperties(
18885 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18886 (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
18887 if (pExternalSemaphoreProperties) {
18888 transform_fromhost_VkExternalSemaphoreProperties(
18889 sResourceTracker, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
18890 }
18891 sResourceTracker->on_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
18892 this, physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
18893 ++encodeCount;
18894 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18895 pool->freeAll();
18896 stream->clearPool();
18897 }
18898 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18899 }
18900
18901 #endif
18902 #ifdef VK_KHR_external_semaphore_fd
vkImportSemaphoreFdKHR(VkDevice device,const VkImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo,uint32_t doLock)18903 VkResult VkEncoder::vkImportSemaphoreFdKHR(VkDevice device,
18904 const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo,
18905 uint32_t doLock) {
18906 (void)doLock;
18907 bool queueSubmitWithCommandsEnabled =
18908 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18909 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18910 auto stream = mImpl->stream();
18911 auto pool = mImpl->pool();
18912 VkDevice local_device;
18913 VkImportSemaphoreFdInfoKHR* local_pImportSemaphoreFdInfo;
18914 local_device = device;
18915 local_pImportSemaphoreFdInfo = nullptr;
18916 if (pImportSemaphoreFdInfo) {
18917 local_pImportSemaphoreFdInfo =
18918 (VkImportSemaphoreFdInfoKHR*)pool->alloc(sizeof(const VkImportSemaphoreFdInfoKHR));
18919 deepcopy_VkImportSemaphoreFdInfoKHR(
18920 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImportSemaphoreFdInfo,
18921 (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
18922 }
18923 if (local_pImportSemaphoreFdInfo) {
18924 transform_tohost_VkImportSemaphoreFdInfoKHR(
18925 sResourceTracker, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
18926 }
18927 size_t count = 0;
18928 size_t* countPtr = &count;
18929 {
18930 uint64_t cgen_var_0;
18931 *countPtr += 1 * 8;
18932 count_VkImportSemaphoreFdInfoKHR(
18933 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18934 (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo), countPtr);
18935 }
18936 uint32_t packetSize_vkImportSemaphoreFdKHR =
18937 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
18938 uint8_t* streamPtr = stream->reserve(packetSize_vkImportSemaphoreFdKHR);
18939 uint8_t* packetBeginPtr = streamPtr;
18940 uint8_t** streamPtrPtr = &streamPtr;
18941 uint32_t opcode_vkImportSemaphoreFdKHR = OP_vkImportSemaphoreFdKHR;
18942 uint32_t seqno;
18943 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
18944 memcpy(streamPtr, &opcode_vkImportSemaphoreFdKHR, sizeof(uint32_t));
18945 streamPtr += sizeof(uint32_t);
18946 memcpy(streamPtr, &packetSize_vkImportSemaphoreFdKHR, sizeof(uint32_t));
18947 streamPtr += sizeof(uint32_t);
18948 if (queueSubmitWithCommandsEnabled) {
18949 memcpy(streamPtr, &seqno, sizeof(uint32_t));
18950 streamPtr += sizeof(uint32_t);
18951 }
18952 uint64_t cgen_var_0;
18953 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
18954 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
18955 *streamPtrPtr += 1 * 8;
18956 reservedmarshal_VkImportSemaphoreFdInfoKHR(
18957 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
18958 (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo), streamPtrPtr);
18959 VkResult vkImportSemaphoreFdKHR_VkResult_return = (VkResult)0;
18960 stream->read(&vkImportSemaphoreFdKHR_VkResult_return, sizeof(VkResult));
18961 ++encodeCount;
18962 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
18963 pool->freeAll();
18964 stream->clearPool();
18965 }
18966 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
18967 return vkImportSemaphoreFdKHR_VkResult_return;
18968 }
18969
vkGetSemaphoreFdKHR(VkDevice device,const VkSemaphoreGetFdInfoKHR * pGetFdInfo,int * pFd,uint32_t doLock)18970 VkResult VkEncoder::vkGetSemaphoreFdKHR(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
18971 int* pFd, uint32_t doLock) {
18972 (void)doLock;
18973 bool queueSubmitWithCommandsEnabled =
18974 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
18975 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
18976 auto stream = mImpl->stream();
18977 auto pool = mImpl->pool();
18978 VkDevice local_device;
18979 VkSemaphoreGetFdInfoKHR* local_pGetFdInfo;
18980 local_device = device;
18981 local_pGetFdInfo = nullptr;
18982 if (pGetFdInfo) {
18983 local_pGetFdInfo =
18984 (VkSemaphoreGetFdInfoKHR*)pool->alloc(sizeof(const VkSemaphoreGetFdInfoKHR));
18985 deepcopy_VkSemaphoreGetFdInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGetFdInfo,
18986 (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
18987 }
18988 if (local_pGetFdInfo) {
18989 transform_tohost_VkSemaphoreGetFdInfoKHR(sResourceTracker,
18990 (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
18991 }
18992 size_t count = 0;
18993 size_t* countPtr = &count;
18994 {
18995 uint64_t cgen_var_0;
18996 *countPtr += 1 * 8;
18997 count_VkSemaphoreGetFdInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
18998 (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo), countPtr);
18999 *countPtr += sizeof(int);
19000 }
19001 uint32_t packetSize_vkGetSemaphoreFdKHR =
19002 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19003 uint8_t* streamPtr = stream->reserve(packetSize_vkGetSemaphoreFdKHR);
19004 uint8_t* packetBeginPtr = streamPtr;
19005 uint8_t** streamPtrPtr = &streamPtr;
19006 uint32_t opcode_vkGetSemaphoreFdKHR = OP_vkGetSemaphoreFdKHR;
19007 uint32_t seqno;
19008 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19009 memcpy(streamPtr, &opcode_vkGetSemaphoreFdKHR, sizeof(uint32_t));
19010 streamPtr += sizeof(uint32_t);
19011 memcpy(streamPtr, &packetSize_vkGetSemaphoreFdKHR, sizeof(uint32_t));
19012 streamPtr += sizeof(uint32_t);
19013 if (queueSubmitWithCommandsEnabled) {
19014 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19015 streamPtr += sizeof(uint32_t);
19016 }
19017 uint64_t cgen_var_0;
19018 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19019 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19020 *streamPtrPtr += 1 * 8;
19021 reservedmarshal_VkSemaphoreGetFdInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19022 (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo),
19023 streamPtrPtr);
19024 memcpy(*streamPtrPtr, (int*)pFd, sizeof(int));
19025 *streamPtrPtr += sizeof(int);
19026 stream->read((int*)pFd, sizeof(int));
19027 VkResult vkGetSemaphoreFdKHR_VkResult_return = (VkResult)0;
19028 stream->read(&vkGetSemaphoreFdKHR_VkResult_return, sizeof(VkResult));
19029 ++encodeCount;
19030 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19031 pool->freeAll();
19032 stream->clearPool();
19033 }
19034 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19035 return vkGetSemaphoreFdKHR_VkResult_return;
19036 }
19037
19038 #endif
19039 #ifdef VK_KHR_descriptor_update_template
vkCreateDescriptorUpdateTemplateKHR(VkDevice device,const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate,uint32_t doLock)19040 VkResult VkEncoder::vkCreateDescriptorUpdateTemplateKHR(
19041 VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
19042 const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate,
19043 uint32_t doLock) {
19044 (void)doLock;
19045 bool queueSubmitWithCommandsEnabled =
19046 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19047 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19048 auto stream = mImpl->stream();
19049 auto pool = mImpl->pool();
19050 VkDevice local_device;
19051 VkDescriptorUpdateTemplateCreateInfo* local_pCreateInfo;
19052 VkAllocationCallbacks* local_pAllocator;
19053 local_device = device;
19054 local_pCreateInfo = nullptr;
19055 if (pCreateInfo) {
19056 local_pCreateInfo = (VkDescriptorUpdateTemplateCreateInfo*)pool->alloc(
19057 sizeof(const VkDescriptorUpdateTemplateCreateInfo));
19058 deepcopy_VkDescriptorUpdateTemplateCreateInfo(
19059 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
19060 (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
19061 }
19062 local_pAllocator = nullptr;
19063 if (pAllocator) {
19064 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
19065 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
19066 (VkAllocationCallbacks*)(local_pAllocator));
19067 }
19068 local_pAllocator = nullptr;
19069 if (local_pCreateInfo) {
19070 transform_tohost_VkDescriptorUpdateTemplateCreateInfo(
19071 sResourceTracker, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
19072 }
19073 if (local_pAllocator) {
19074 transform_tohost_VkAllocationCallbacks(sResourceTracker,
19075 (VkAllocationCallbacks*)(local_pAllocator));
19076 }
19077 size_t count = 0;
19078 size_t* countPtr = &count;
19079 {
19080 uint64_t cgen_var_0;
19081 *countPtr += 1 * 8;
19082 count_VkDescriptorUpdateTemplateCreateInfo(
19083 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19084 (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), countPtr);
19085 // WARNING PTR CHECK
19086 *countPtr += 8;
19087 if (local_pAllocator) {
19088 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19089 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
19090 }
19091 uint64_t cgen_var_1;
19092 *countPtr += 8;
19093 }
19094 uint32_t packetSize_vkCreateDescriptorUpdateTemplateKHR =
19095 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19096 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateDescriptorUpdateTemplateKHR);
19097 uint8_t* packetBeginPtr = streamPtr;
19098 uint8_t** streamPtrPtr = &streamPtr;
19099 uint32_t opcode_vkCreateDescriptorUpdateTemplateKHR = OP_vkCreateDescriptorUpdateTemplateKHR;
19100 uint32_t seqno;
19101 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19102 memcpy(streamPtr, &opcode_vkCreateDescriptorUpdateTemplateKHR, sizeof(uint32_t));
19103 streamPtr += sizeof(uint32_t);
19104 memcpy(streamPtr, &packetSize_vkCreateDescriptorUpdateTemplateKHR, sizeof(uint32_t));
19105 streamPtr += sizeof(uint32_t);
19106 if (queueSubmitWithCommandsEnabled) {
19107 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19108 streamPtr += sizeof(uint32_t);
19109 }
19110 uint64_t cgen_var_0;
19111 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19112 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19113 *streamPtrPtr += 1 * 8;
19114 reservedmarshal_VkDescriptorUpdateTemplateCreateInfo(
19115 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19116 (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), streamPtrPtr);
19117 // WARNING PTR CHECK
19118 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
19119 memcpy((*streamPtrPtr), &cgen_var_1, 8);
19120 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
19121 *streamPtrPtr += 8;
19122 if (local_pAllocator) {
19123 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19124 (VkAllocationCallbacks*)(local_pAllocator),
19125 streamPtrPtr);
19126 }
19127 /* is handle, possibly out */;
19128 uint64_t cgen_var_2;
19129 *&cgen_var_2 = (uint64_t)((*pDescriptorUpdateTemplate));
19130 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
19131 *streamPtrPtr += 8;
19132 /* is handle, possibly out */;
19133 stream->setHandleMapping(sResourceTracker->createMapping());
19134 uint64_t cgen_var_3;
19135 stream->read((uint64_t*)&cgen_var_3, 8);
19136 stream->handleMapping()->mapHandles_u64_VkDescriptorUpdateTemplate(
19137 &cgen_var_3, (VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate, 1);
19138 stream->unsetHandleMapping();
19139 VkResult vkCreateDescriptorUpdateTemplateKHR_VkResult_return = (VkResult)0;
19140 stream->read(&vkCreateDescriptorUpdateTemplateKHR_VkResult_return, sizeof(VkResult));
19141 sResourceTracker->on_vkCreateDescriptorUpdateTemplateKHR(
19142 this, vkCreateDescriptorUpdateTemplateKHR_VkResult_return, device, pCreateInfo, pAllocator,
19143 pDescriptorUpdateTemplate);
19144 ++encodeCount;
19145 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19146 pool->freeAll();
19147 stream->clearPool();
19148 }
19149 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19150 return vkCreateDescriptorUpdateTemplateKHR_VkResult_return;
19151 }
19152
vkDestroyDescriptorUpdateTemplateKHR(VkDevice device,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const VkAllocationCallbacks * pAllocator,uint32_t doLock)19153 void VkEncoder::vkDestroyDescriptorUpdateTemplateKHR(
19154 VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate,
19155 const VkAllocationCallbacks* pAllocator, uint32_t doLock) {
19156 (void)doLock;
19157 bool queueSubmitWithCommandsEnabled =
19158 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19159 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19160 auto stream = mImpl->stream();
19161 auto pool = mImpl->pool();
19162 VkDevice local_device;
19163 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
19164 VkAllocationCallbacks* local_pAllocator;
19165 local_device = device;
19166 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
19167 local_pAllocator = nullptr;
19168 if (pAllocator) {
19169 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
19170 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
19171 (VkAllocationCallbacks*)(local_pAllocator));
19172 }
19173 local_pAllocator = nullptr;
19174 if (local_pAllocator) {
19175 transform_tohost_VkAllocationCallbacks(sResourceTracker,
19176 (VkAllocationCallbacks*)(local_pAllocator));
19177 }
19178 size_t count = 0;
19179 size_t* countPtr = &count;
19180 {
19181 uint64_t cgen_var_0;
19182 *countPtr += 1 * 8;
19183 uint64_t cgen_var_1;
19184 *countPtr += 1 * 8;
19185 // WARNING PTR CHECK
19186 *countPtr += 8;
19187 if (local_pAllocator) {
19188 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19189 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
19190 }
19191 }
19192 uint32_t packetSize_vkDestroyDescriptorUpdateTemplateKHR =
19193 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19194 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyDescriptorUpdateTemplateKHR);
19195 uint8_t* packetBeginPtr = streamPtr;
19196 uint8_t** streamPtrPtr = &streamPtr;
19197 uint32_t opcode_vkDestroyDescriptorUpdateTemplateKHR = OP_vkDestroyDescriptorUpdateTemplateKHR;
19198 uint32_t seqno;
19199 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19200 memcpy(streamPtr, &opcode_vkDestroyDescriptorUpdateTemplateKHR, sizeof(uint32_t));
19201 streamPtr += sizeof(uint32_t);
19202 memcpy(streamPtr, &packetSize_vkDestroyDescriptorUpdateTemplateKHR, sizeof(uint32_t));
19203 streamPtr += sizeof(uint32_t);
19204 if (queueSubmitWithCommandsEnabled) {
19205 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19206 streamPtr += sizeof(uint32_t);
19207 }
19208 uint64_t cgen_var_0;
19209 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19210 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19211 *streamPtrPtr += 1 * 8;
19212 uint64_t cgen_var_1;
19213 *&cgen_var_1 = get_host_u64_VkDescriptorUpdateTemplate((*&local_descriptorUpdateTemplate));
19214 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
19215 *streamPtrPtr += 1 * 8;
19216 // WARNING PTR CHECK
19217 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
19218 memcpy((*streamPtrPtr), &cgen_var_2, 8);
19219 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
19220 *streamPtrPtr += 8;
19221 if (local_pAllocator) {
19222 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19223 (VkAllocationCallbacks*)(local_pAllocator),
19224 streamPtrPtr);
19225 }
19226 sResourceTracker->destroyMapping()->mapHandles_VkDescriptorUpdateTemplate(
19227 (VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate);
19228 stream->flush();
19229 ++encodeCount;
19230 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19231 pool->freeAll();
19232 stream->clearPool();
19233 }
19234 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19235 }
19236
vkUpdateDescriptorSetWithTemplateKHR(VkDevice device,VkDescriptorSet descriptorSet,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const void * pData,uint32_t doLock)19237 void VkEncoder::vkUpdateDescriptorSetWithTemplateKHR(
19238 VkDevice device, VkDescriptorSet descriptorSet,
19239 VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData, uint32_t doLock) {
19240 (void)doLock;
19241 bool queueSubmitWithCommandsEnabled =
19242 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19243 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19244 auto stream = mImpl->stream();
19245 auto pool = mImpl->pool();
19246 VkDevice local_device;
19247 VkDescriptorSet local_descriptorSet;
19248 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
19249 void* local_pData;
19250 local_device = device;
19251 local_descriptorSet = descriptorSet;
19252 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
19253 // Avoiding deepcopy for pData
19254 local_pData = (void*)pData;
19255 size_t count = 0;
19256 size_t* countPtr = &count;
19257 {
19258 uint64_t cgen_var_0;
19259 *countPtr += 1 * 8;
19260 uint64_t cgen_var_1;
19261 *countPtr += 1 * 8;
19262 uint64_t cgen_var_2;
19263 *countPtr += 1 * 8;
19264 // WARNING PTR CHECK
19265 *countPtr += 8;
19266 if (local_pData) {
19267 *countPtr += sizeof(uint8_t);
19268 }
19269 }
19270 uint32_t packetSize_vkUpdateDescriptorSetWithTemplateKHR =
19271 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19272 uint8_t* streamPtr = stream->reserve(packetSize_vkUpdateDescriptorSetWithTemplateKHR);
19273 uint8_t* packetBeginPtr = streamPtr;
19274 uint8_t** streamPtrPtr = &streamPtr;
19275 uint32_t opcode_vkUpdateDescriptorSetWithTemplateKHR = OP_vkUpdateDescriptorSetWithTemplateKHR;
19276 uint32_t seqno;
19277 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19278 memcpy(streamPtr, &opcode_vkUpdateDescriptorSetWithTemplateKHR, sizeof(uint32_t));
19279 streamPtr += sizeof(uint32_t);
19280 memcpy(streamPtr, &packetSize_vkUpdateDescriptorSetWithTemplateKHR, sizeof(uint32_t));
19281 streamPtr += sizeof(uint32_t);
19282 if (queueSubmitWithCommandsEnabled) {
19283 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19284 streamPtr += sizeof(uint32_t);
19285 }
19286 uint64_t cgen_var_0;
19287 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19288 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19289 *streamPtrPtr += 1 * 8;
19290 uint64_t cgen_var_1;
19291 *&cgen_var_1 = get_host_u64_VkDescriptorSet((*&local_descriptorSet));
19292 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
19293 *streamPtrPtr += 1 * 8;
19294 uint64_t cgen_var_2;
19295 *&cgen_var_2 = get_host_u64_VkDescriptorUpdateTemplate((*&local_descriptorUpdateTemplate));
19296 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
19297 *streamPtrPtr += 1 * 8;
19298 // WARNING PTR CHECK
19299 uint64_t cgen_var_3 = (uint64_t)(uintptr_t)local_pData;
19300 memcpy((*streamPtrPtr), &cgen_var_3, 8);
19301 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
19302 *streamPtrPtr += 8;
19303 if (local_pData) {
19304 memcpy(*streamPtrPtr, (void*)local_pData, sizeof(uint8_t));
19305 *streamPtrPtr += sizeof(uint8_t);
19306 }
19307 stream->flush();
19308 ++encodeCount;
19309 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19310 pool->freeAll();
19311 stream->clearPool();
19312 }
19313 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19314 }
19315
19316 #endif
19317 #ifdef VK_KHR_create_renderpass2
vkCreateRenderPass2KHR(VkDevice device,const VkRenderPassCreateInfo2 * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass,uint32_t doLock)19318 VkResult VkEncoder::vkCreateRenderPass2KHR(VkDevice device,
19319 const VkRenderPassCreateInfo2* pCreateInfo,
19320 const VkAllocationCallbacks* pAllocator,
19321 VkRenderPass* pRenderPass, uint32_t doLock) {
19322 (void)doLock;
19323 bool queueSubmitWithCommandsEnabled =
19324 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19325 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19326 auto stream = mImpl->stream();
19327 auto pool = mImpl->pool();
19328 VkDevice local_device;
19329 VkRenderPassCreateInfo2* local_pCreateInfo;
19330 VkAllocationCallbacks* local_pAllocator;
19331 local_device = device;
19332 local_pCreateInfo = nullptr;
19333 if (pCreateInfo) {
19334 local_pCreateInfo =
19335 (VkRenderPassCreateInfo2*)pool->alloc(sizeof(const VkRenderPassCreateInfo2));
19336 deepcopy_VkRenderPassCreateInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
19337 (VkRenderPassCreateInfo2*)(local_pCreateInfo));
19338 }
19339 local_pAllocator = nullptr;
19340 if (pAllocator) {
19341 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
19342 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
19343 (VkAllocationCallbacks*)(local_pAllocator));
19344 }
19345 local_pAllocator = nullptr;
19346 if (local_pCreateInfo) {
19347 transform_tohost_VkRenderPassCreateInfo2(sResourceTracker,
19348 (VkRenderPassCreateInfo2*)(local_pCreateInfo));
19349 }
19350 if (local_pAllocator) {
19351 transform_tohost_VkAllocationCallbacks(sResourceTracker,
19352 (VkAllocationCallbacks*)(local_pAllocator));
19353 }
19354 size_t count = 0;
19355 size_t* countPtr = &count;
19356 {
19357 uint64_t cgen_var_0;
19358 *countPtr += 1 * 8;
19359 count_VkRenderPassCreateInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19360 (VkRenderPassCreateInfo2*)(local_pCreateInfo), countPtr);
19361 // WARNING PTR CHECK
19362 *countPtr += 8;
19363 if (local_pAllocator) {
19364 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19365 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
19366 }
19367 uint64_t cgen_var_1;
19368 *countPtr += 8;
19369 }
19370 uint32_t packetSize_vkCreateRenderPass2KHR =
19371 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19372 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateRenderPass2KHR);
19373 uint8_t* packetBeginPtr = streamPtr;
19374 uint8_t** streamPtrPtr = &streamPtr;
19375 uint32_t opcode_vkCreateRenderPass2KHR = OP_vkCreateRenderPass2KHR;
19376 uint32_t seqno;
19377 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19378 memcpy(streamPtr, &opcode_vkCreateRenderPass2KHR, sizeof(uint32_t));
19379 streamPtr += sizeof(uint32_t);
19380 memcpy(streamPtr, &packetSize_vkCreateRenderPass2KHR, sizeof(uint32_t));
19381 streamPtr += sizeof(uint32_t);
19382 if (queueSubmitWithCommandsEnabled) {
19383 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19384 streamPtr += sizeof(uint32_t);
19385 }
19386 uint64_t cgen_var_0;
19387 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19388 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19389 *streamPtrPtr += 1 * 8;
19390 reservedmarshal_VkRenderPassCreateInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19391 (VkRenderPassCreateInfo2*)(local_pCreateInfo),
19392 streamPtrPtr);
19393 // WARNING PTR CHECK
19394 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
19395 memcpy((*streamPtrPtr), &cgen_var_1, 8);
19396 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
19397 *streamPtrPtr += 8;
19398 if (local_pAllocator) {
19399 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19400 (VkAllocationCallbacks*)(local_pAllocator),
19401 streamPtrPtr);
19402 }
19403 /* is handle, possibly out */;
19404 uint64_t cgen_var_2;
19405 *&cgen_var_2 = (uint64_t)((*pRenderPass));
19406 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
19407 *streamPtrPtr += 8;
19408 /* is handle, possibly out */;
19409 stream->setHandleMapping(sResourceTracker->createMapping());
19410 uint64_t cgen_var_3;
19411 stream->read((uint64_t*)&cgen_var_3, 8);
19412 stream->handleMapping()->mapHandles_u64_VkRenderPass(&cgen_var_3, (VkRenderPass*)pRenderPass,
19413 1);
19414 stream->unsetHandleMapping();
19415 VkResult vkCreateRenderPass2KHR_VkResult_return = (VkResult)0;
19416 stream->read(&vkCreateRenderPass2KHR_VkResult_return, sizeof(VkResult));
19417 ++encodeCount;
19418 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19419 pool->freeAll();
19420 stream->clearPool();
19421 }
19422 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19423 return vkCreateRenderPass2KHR_VkResult_return;
19424 }
19425
vkCmdBeginRenderPass2KHR(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,const VkSubpassBeginInfo * pSubpassBeginInfo,uint32_t doLock)19426 void VkEncoder::vkCmdBeginRenderPass2KHR(VkCommandBuffer commandBuffer,
19427 const VkRenderPassBeginInfo* pRenderPassBegin,
19428 const VkSubpassBeginInfo* pSubpassBeginInfo,
19429 uint32_t doLock) {
19430 (void)doLock;
19431 bool queueSubmitWithCommandsEnabled =
19432 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19433 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19434 auto stream = mImpl->stream();
19435 auto pool = mImpl->pool();
19436 VkCommandBuffer local_commandBuffer;
19437 VkRenderPassBeginInfo* local_pRenderPassBegin;
19438 VkSubpassBeginInfo* local_pSubpassBeginInfo;
19439 local_commandBuffer = commandBuffer;
19440 local_pRenderPassBegin = nullptr;
19441 if (pRenderPassBegin) {
19442 local_pRenderPassBegin =
19443 (VkRenderPassBeginInfo*)pool->alloc(sizeof(const VkRenderPassBeginInfo));
19444 deepcopy_VkRenderPassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderPassBegin,
19445 (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
19446 }
19447 local_pSubpassBeginInfo = nullptr;
19448 if (pSubpassBeginInfo) {
19449 local_pSubpassBeginInfo =
19450 (VkSubpassBeginInfo*)pool->alloc(sizeof(const VkSubpassBeginInfo));
19451 deepcopy_VkSubpassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassBeginInfo,
19452 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
19453 }
19454 if (local_pRenderPassBegin) {
19455 transform_tohost_VkRenderPassBeginInfo(sResourceTracker,
19456 (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
19457 }
19458 if (local_pSubpassBeginInfo) {
19459 transform_tohost_VkSubpassBeginInfo(sResourceTracker,
19460 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
19461 }
19462 size_t count = 0;
19463 size_t* countPtr = &count;
19464 {
19465 uint64_t cgen_var_0;
19466 *countPtr += 1 * 8;
19467 count_VkRenderPassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19468 (VkRenderPassBeginInfo*)(local_pRenderPassBegin), countPtr);
19469 count_VkSubpassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19470 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
19471 }
19472 uint32_t packetSize_vkCmdBeginRenderPass2KHR = 4 + 4 + count;
19473 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginRenderPass2KHR -= 8;
19474 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginRenderPass2KHR);
19475 uint8_t* packetBeginPtr = streamPtr;
19476 uint8_t** streamPtrPtr = &streamPtr;
19477 uint32_t opcode_vkCmdBeginRenderPass2KHR = OP_vkCmdBeginRenderPass2KHR;
19478 memcpy(streamPtr, &opcode_vkCmdBeginRenderPass2KHR, sizeof(uint32_t));
19479 streamPtr += sizeof(uint32_t);
19480 memcpy(streamPtr, &packetSize_vkCmdBeginRenderPass2KHR, sizeof(uint32_t));
19481 streamPtr += sizeof(uint32_t);
19482 if (!queueSubmitWithCommandsEnabled) {
19483 uint64_t cgen_var_0;
19484 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
19485 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19486 *streamPtrPtr += 1 * 8;
19487 }
19488 reservedmarshal_VkRenderPassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19489 (VkRenderPassBeginInfo*)(local_pRenderPassBegin),
19490 streamPtrPtr);
19491 reservedmarshal_VkSubpassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19492 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo),
19493 streamPtrPtr);
19494 ++encodeCount;
19495 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19496 pool->freeAll();
19497 stream->clearPool();
19498 }
19499 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19500 }
19501
vkCmdNextSubpass2KHR(VkCommandBuffer commandBuffer,const VkSubpassBeginInfo * pSubpassBeginInfo,const VkSubpassEndInfo * pSubpassEndInfo,uint32_t doLock)19502 void VkEncoder::vkCmdNextSubpass2KHR(VkCommandBuffer commandBuffer,
19503 const VkSubpassBeginInfo* pSubpassBeginInfo,
19504 const VkSubpassEndInfo* pSubpassEndInfo, uint32_t doLock) {
19505 (void)doLock;
19506 bool queueSubmitWithCommandsEnabled =
19507 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19508 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19509 auto stream = mImpl->stream();
19510 auto pool = mImpl->pool();
19511 VkCommandBuffer local_commandBuffer;
19512 VkSubpassBeginInfo* local_pSubpassBeginInfo;
19513 VkSubpassEndInfo* local_pSubpassEndInfo;
19514 local_commandBuffer = commandBuffer;
19515 local_pSubpassBeginInfo = nullptr;
19516 if (pSubpassBeginInfo) {
19517 local_pSubpassBeginInfo =
19518 (VkSubpassBeginInfo*)pool->alloc(sizeof(const VkSubpassBeginInfo));
19519 deepcopy_VkSubpassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassBeginInfo,
19520 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
19521 }
19522 local_pSubpassEndInfo = nullptr;
19523 if (pSubpassEndInfo) {
19524 local_pSubpassEndInfo = (VkSubpassEndInfo*)pool->alloc(sizeof(const VkSubpassEndInfo));
19525 deepcopy_VkSubpassEndInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassEndInfo,
19526 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
19527 }
19528 if (local_pSubpassBeginInfo) {
19529 transform_tohost_VkSubpassBeginInfo(sResourceTracker,
19530 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
19531 }
19532 if (local_pSubpassEndInfo) {
19533 transform_tohost_VkSubpassEndInfo(sResourceTracker,
19534 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
19535 }
19536 size_t count = 0;
19537 size_t* countPtr = &count;
19538 {
19539 uint64_t cgen_var_0;
19540 *countPtr += 1 * 8;
19541 count_VkSubpassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19542 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
19543 count_VkSubpassEndInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19544 (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
19545 }
19546 uint32_t packetSize_vkCmdNextSubpass2KHR = 4 + 4 + count;
19547 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdNextSubpass2KHR -= 8;
19548 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdNextSubpass2KHR);
19549 uint8_t* packetBeginPtr = streamPtr;
19550 uint8_t** streamPtrPtr = &streamPtr;
19551 uint32_t opcode_vkCmdNextSubpass2KHR = OP_vkCmdNextSubpass2KHR;
19552 memcpy(streamPtr, &opcode_vkCmdNextSubpass2KHR, sizeof(uint32_t));
19553 streamPtr += sizeof(uint32_t);
19554 memcpy(streamPtr, &packetSize_vkCmdNextSubpass2KHR, sizeof(uint32_t));
19555 streamPtr += sizeof(uint32_t);
19556 if (!queueSubmitWithCommandsEnabled) {
19557 uint64_t cgen_var_0;
19558 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
19559 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19560 *streamPtrPtr += 1 * 8;
19561 }
19562 reservedmarshal_VkSubpassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19563 (VkSubpassBeginInfo*)(local_pSubpassBeginInfo),
19564 streamPtrPtr);
19565 reservedmarshal_VkSubpassEndInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19566 (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
19567 ++encodeCount;
19568 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19569 pool->freeAll();
19570 stream->clearPool();
19571 }
19572 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19573 }
19574
vkCmdEndRenderPass2KHR(VkCommandBuffer commandBuffer,const VkSubpassEndInfo * pSubpassEndInfo,uint32_t doLock)19575 void VkEncoder::vkCmdEndRenderPass2KHR(VkCommandBuffer commandBuffer,
19576 const VkSubpassEndInfo* pSubpassEndInfo, uint32_t doLock) {
19577 (void)doLock;
19578 bool queueSubmitWithCommandsEnabled =
19579 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19580 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19581 auto stream = mImpl->stream();
19582 auto pool = mImpl->pool();
19583 VkCommandBuffer local_commandBuffer;
19584 VkSubpassEndInfo* local_pSubpassEndInfo;
19585 local_commandBuffer = commandBuffer;
19586 local_pSubpassEndInfo = nullptr;
19587 if (pSubpassEndInfo) {
19588 local_pSubpassEndInfo = (VkSubpassEndInfo*)pool->alloc(sizeof(const VkSubpassEndInfo));
19589 deepcopy_VkSubpassEndInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassEndInfo,
19590 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
19591 }
19592 if (local_pSubpassEndInfo) {
19593 transform_tohost_VkSubpassEndInfo(sResourceTracker,
19594 (VkSubpassEndInfo*)(local_pSubpassEndInfo));
19595 }
19596 size_t count = 0;
19597 size_t* countPtr = &count;
19598 {
19599 uint64_t cgen_var_0;
19600 *countPtr += 1 * 8;
19601 count_VkSubpassEndInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19602 (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
19603 }
19604 uint32_t packetSize_vkCmdEndRenderPass2KHR = 4 + 4 + count;
19605 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndRenderPass2KHR -= 8;
19606 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndRenderPass2KHR);
19607 uint8_t* packetBeginPtr = streamPtr;
19608 uint8_t** streamPtrPtr = &streamPtr;
19609 uint32_t opcode_vkCmdEndRenderPass2KHR = OP_vkCmdEndRenderPass2KHR;
19610 memcpy(streamPtr, &opcode_vkCmdEndRenderPass2KHR, sizeof(uint32_t));
19611 streamPtr += sizeof(uint32_t);
19612 memcpy(streamPtr, &packetSize_vkCmdEndRenderPass2KHR, sizeof(uint32_t));
19613 streamPtr += sizeof(uint32_t);
19614 if (!queueSubmitWithCommandsEnabled) {
19615 uint64_t cgen_var_0;
19616 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
19617 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19618 *streamPtrPtr += 1 * 8;
19619 }
19620 reservedmarshal_VkSubpassEndInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19621 (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
19622 ++encodeCount;
19623 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19624 pool->freeAll();
19625 stream->clearPool();
19626 }
19627 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19628 }
19629
19630 #endif
19631 #ifdef VK_KHR_external_fence_capabilities
vkGetPhysicalDeviceExternalFencePropertiesKHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo,VkExternalFenceProperties * pExternalFenceProperties,uint32_t doLock)19632 void VkEncoder::vkGetPhysicalDeviceExternalFencePropertiesKHR(
19633 VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
19634 VkExternalFenceProperties* pExternalFenceProperties, uint32_t doLock) {
19635 (void)doLock;
19636 bool queueSubmitWithCommandsEnabled =
19637 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19638 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19639 auto stream = mImpl->stream();
19640 auto pool = mImpl->pool();
19641 VkPhysicalDevice local_physicalDevice;
19642 VkPhysicalDeviceExternalFenceInfo* local_pExternalFenceInfo;
19643 local_physicalDevice = physicalDevice;
19644 local_pExternalFenceInfo = nullptr;
19645 if (pExternalFenceInfo) {
19646 local_pExternalFenceInfo = (VkPhysicalDeviceExternalFenceInfo*)pool->alloc(
19647 sizeof(const VkPhysicalDeviceExternalFenceInfo));
19648 deepcopy_VkPhysicalDeviceExternalFenceInfo(
19649 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalFenceInfo,
19650 (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
19651 }
19652 if (local_pExternalFenceInfo) {
19653 transform_tohost_VkPhysicalDeviceExternalFenceInfo(
19654 sResourceTracker, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
19655 }
19656 size_t count = 0;
19657 size_t* countPtr = &count;
19658 {
19659 uint64_t cgen_var_0;
19660 *countPtr += 1 * 8;
19661 count_VkPhysicalDeviceExternalFenceInfo(
19662 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19663 (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), countPtr);
19664 count_VkExternalFenceProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19665 (VkExternalFenceProperties*)(pExternalFenceProperties),
19666 countPtr);
19667 }
19668 uint32_t packetSize_vkGetPhysicalDeviceExternalFencePropertiesKHR =
19669 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19670 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalFencePropertiesKHR);
19671 uint8_t* packetBeginPtr = streamPtr;
19672 uint8_t** streamPtrPtr = &streamPtr;
19673 uint32_t opcode_vkGetPhysicalDeviceExternalFencePropertiesKHR =
19674 OP_vkGetPhysicalDeviceExternalFencePropertiesKHR;
19675 uint32_t seqno;
19676 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19677 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceExternalFencePropertiesKHR, sizeof(uint32_t));
19678 streamPtr += sizeof(uint32_t);
19679 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceExternalFencePropertiesKHR, sizeof(uint32_t));
19680 streamPtr += sizeof(uint32_t);
19681 if (queueSubmitWithCommandsEnabled) {
19682 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19683 streamPtr += sizeof(uint32_t);
19684 }
19685 uint64_t cgen_var_0;
19686 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
19687 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19688 *streamPtrPtr += 1 * 8;
19689 reservedmarshal_VkPhysicalDeviceExternalFenceInfo(
19690 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19691 (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), streamPtrPtr);
19692 reservedmarshal_VkExternalFenceProperties(
19693 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalFenceProperties*)(pExternalFenceProperties),
19694 streamPtrPtr);
19695 unmarshal_VkExternalFenceProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19696 (VkExternalFenceProperties*)(pExternalFenceProperties));
19697 if (pExternalFenceProperties) {
19698 transform_fromhost_VkExternalFenceProperties(
19699 sResourceTracker, (VkExternalFenceProperties*)(pExternalFenceProperties));
19700 }
19701 ++encodeCount;
19702 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19703 pool->freeAll();
19704 stream->clearPool();
19705 }
19706 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19707 }
19708
19709 #endif
19710 #ifdef VK_KHR_external_fence_fd
vkImportFenceFdKHR(VkDevice device,const VkImportFenceFdInfoKHR * pImportFenceFdInfo,uint32_t doLock)19711 VkResult VkEncoder::vkImportFenceFdKHR(VkDevice device,
19712 const VkImportFenceFdInfoKHR* pImportFenceFdInfo,
19713 uint32_t doLock) {
19714 (void)doLock;
19715 bool queueSubmitWithCommandsEnabled =
19716 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19717 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19718 auto stream = mImpl->stream();
19719 auto pool = mImpl->pool();
19720 VkDevice local_device;
19721 VkImportFenceFdInfoKHR* local_pImportFenceFdInfo;
19722 local_device = device;
19723 local_pImportFenceFdInfo = nullptr;
19724 if (pImportFenceFdInfo) {
19725 local_pImportFenceFdInfo =
19726 (VkImportFenceFdInfoKHR*)pool->alloc(sizeof(const VkImportFenceFdInfoKHR));
19727 deepcopy_VkImportFenceFdInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImportFenceFdInfo,
19728 (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
19729 }
19730 if (local_pImportFenceFdInfo) {
19731 transform_tohost_VkImportFenceFdInfoKHR(
19732 sResourceTracker, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
19733 }
19734 size_t count = 0;
19735 size_t* countPtr = &count;
19736 {
19737 uint64_t cgen_var_0;
19738 *countPtr += 1 * 8;
19739 count_VkImportFenceFdInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19740 (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo), countPtr);
19741 }
19742 uint32_t packetSize_vkImportFenceFdKHR =
19743 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19744 uint8_t* streamPtr = stream->reserve(packetSize_vkImportFenceFdKHR);
19745 uint8_t* packetBeginPtr = streamPtr;
19746 uint8_t** streamPtrPtr = &streamPtr;
19747 uint32_t opcode_vkImportFenceFdKHR = OP_vkImportFenceFdKHR;
19748 uint32_t seqno;
19749 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19750 memcpy(streamPtr, &opcode_vkImportFenceFdKHR, sizeof(uint32_t));
19751 streamPtr += sizeof(uint32_t);
19752 memcpy(streamPtr, &packetSize_vkImportFenceFdKHR, sizeof(uint32_t));
19753 streamPtr += sizeof(uint32_t);
19754 if (queueSubmitWithCommandsEnabled) {
19755 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19756 streamPtr += sizeof(uint32_t);
19757 }
19758 uint64_t cgen_var_0;
19759 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19760 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19761 *streamPtrPtr += 1 * 8;
19762 reservedmarshal_VkImportFenceFdInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19763 (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo),
19764 streamPtrPtr);
19765 VkResult vkImportFenceFdKHR_VkResult_return = (VkResult)0;
19766 stream->read(&vkImportFenceFdKHR_VkResult_return, sizeof(VkResult));
19767 ++encodeCount;
19768 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19769 pool->freeAll();
19770 stream->clearPool();
19771 }
19772 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19773 return vkImportFenceFdKHR_VkResult_return;
19774 }
19775
vkGetFenceFdKHR(VkDevice device,const VkFenceGetFdInfoKHR * pGetFdInfo,int * pFd,uint32_t doLock)19776 VkResult VkEncoder::vkGetFenceFdKHR(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo,
19777 int* pFd, uint32_t doLock) {
19778 (void)doLock;
19779 bool queueSubmitWithCommandsEnabled =
19780 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19781 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19782 auto stream = mImpl->stream();
19783 auto pool = mImpl->pool();
19784 VkDevice local_device;
19785 VkFenceGetFdInfoKHR* local_pGetFdInfo;
19786 local_device = device;
19787 local_pGetFdInfo = nullptr;
19788 if (pGetFdInfo) {
19789 local_pGetFdInfo = (VkFenceGetFdInfoKHR*)pool->alloc(sizeof(const VkFenceGetFdInfoKHR));
19790 deepcopy_VkFenceGetFdInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGetFdInfo,
19791 (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
19792 }
19793 if (local_pGetFdInfo) {
19794 transform_tohost_VkFenceGetFdInfoKHR(sResourceTracker,
19795 (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
19796 }
19797 size_t count = 0;
19798 size_t* countPtr = &count;
19799 {
19800 uint64_t cgen_var_0;
19801 *countPtr += 1 * 8;
19802 count_VkFenceGetFdInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19803 (VkFenceGetFdInfoKHR*)(local_pGetFdInfo), countPtr);
19804 *countPtr += sizeof(int);
19805 }
19806 uint32_t packetSize_vkGetFenceFdKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19807 uint8_t* streamPtr = stream->reserve(packetSize_vkGetFenceFdKHR);
19808 uint8_t* packetBeginPtr = streamPtr;
19809 uint8_t** streamPtrPtr = &streamPtr;
19810 uint32_t opcode_vkGetFenceFdKHR = OP_vkGetFenceFdKHR;
19811 uint32_t seqno;
19812 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19813 memcpy(streamPtr, &opcode_vkGetFenceFdKHR, sizeof(uint32_t));
19814 streamPtr += sizeof(uint32_t);
19815 memcpy(streamPtr, &packetSize_vkGetFenceFdKHR, sizeof(uint32_t));
19816 streamPtr += sizeof(uint32_t);
19817 if (queueSubmitWithCommandsEnabled) {
19818 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19819 streamPtr += sizeof(uint32_t);
19820 }
19821 uint64_t cgen_var_0;
19822 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19823 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19824 *streamPtrPtr += 1 * 8;
19825 reservedmarshal_VkFenceGetFdInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19826 (VkFenceGetFdInfoKHR*)(local_pGetFdInfo), streamPtrPtr);
19827 memcpy(*streamPtrPtr, (int*)pFd, sizeof(int));
19828 *streamPtrPtr += sizeof(int);
19829 stream->read((int*)pFd, sizeof(int));
19830 VkResult vkGetFenceFdKHR_VkResult_return = (VkResult)0;
19831 stream->read(&vkGetFenceFdKHR_VkResult_return, sizeof(VkResult));
19832 ++encodeCount;
19833 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19834 pool->freeAll();
19835 stream->clearPool();
19836 }
19837 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19838 return vkGetFenceFdKHR_VkResult_return;
19839 }
19840
19841 #endif
19842 #ifdef VK_KHR_get_memory_requirements2
vkGetImageMemoryRequirements2KHR(VkDevice device,const VkImageMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)19843 void VkEncoder::vkGetImageMemoryRequirements2KHR(VkDevice device,
19844 const VkImageMemoryRequirementsInfo2* pInfo,
19845 VkMemoryRequirements2* pMemoryRequirements,
19846 uint32_t doLock) {
19847 (void)doLock;
19848 bool queueSubmitWithCommandsEnabled =
19849 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19850 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19851 auto stream = mImpl->stream();
19852 auto pool = mImpl->pool();
19853 VkDevice local_device;
19854 VkImageMemoryRequirementsInfo2* local_pInfo;
19855 local_device = device;
19856 local_pInfo = nullptr;
19857 if (pInfo) {
19858 local_pInfo = (VkImageMemoryRequirementsInfo2*)pool->alloc(
19859 sizeof(const VkImageMemoryRequirementsInfo2));
19860 deepcopy_VkImageMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
19861 (VkImageMemoryRequirementsInfo2*)(local_pInfo));
19862 }
19863 if (local_pInfo) {
19864 transform_tohost_VkImageMemoryRequirementsInfo2(
19865 sResourceTracker, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
19866 }
19867 size_t count = 0;
19868 size_t* countPtr = &count;
19869 {
19870 uint64_t cgen_var_0;
19871 *countPtr += 1 * 8;
19872 count_VkImageMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19873 (VkImageMemoryRequirementsInfo2*)(local_pInfo),
19874 countPtr);
19875 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19876 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
19877 }
19878 uint32_t packetSize_vkGetImageMemoryRequirements2KHR =
19879 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19880 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageMemoryRequirements2KHR);
19881 uint8_t* packetBeginPtr = streamPtr;
19882 uint8_t** streamPtrPtr = &streamPtr;
19883 uint32_t opcode_vkGetImageMemoryRequirements2KHR = OP_vkGetImageMemoryRequirements2KHR;
19884 uint32_t seqno;
19885 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19886 memcpy(streamPtr, &opcode_vkGetImageMemoryRequirements2KHR, sizeof(uint32_t));
19887 streamPtr += sizeof(uint32_t);
19888 memcpy(streamPtr, &packetSize_vkGetImageMemoryRequirements2KHR, sizeof(uint32_t));
19889 streamPtr += sizeof(uint32_t);
19890 if (queueSubmitWithCommandsEnabled) {
19891 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19892 streamPtr += sizeof(uint32_t);
19893 }
19894 uint64_t cgen_var_0;
19895 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19896 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19897 *streamPtrPtr += 1 * 8;
19898 reservedmarshal_VkImageMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19899 (VkImageMemoryRequirementsInfo2*)(local_pInfo),
19900 streamPtrPtr);
19901 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19902 (VkMemoryRequirements2*)(pMemoryRequirements),
19903 streamPtrPtr);
19904 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19905 (VkMemoryRequirements2*)(pMemoryRequirements));
19906 if (pMemoryRequirements) {
19907 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
19908 (VkMemoryRequirements2*)(pMemoryRequirements));
19909 }
19910 ++encodeCount;
19911 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19912 pool->freeAll();
19913 stream->clearPool();
19914 }
19915 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19916 }
19917
vkGetBufferMemoryRequirements2KHR(VkDevice device,const VkBufferMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)19918 void VkEncoder::vkGetBufferMemoryRequirements2KHR(VkDevice device,
19919 const VkBufferMemoryRequirementsInfo2* pInfo,
19920 VkMemoryRequirements2* pMemoryRequirements,
19921 uint32_t doLock) {
19922 (void)doLock;
19923 bool queueSubmitWithCommandsEnabled =
19924 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
19925 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
19926 auto stream = mImpl->stream();
19927 auto pool = mImpl->pool();
19928 VkDevice local_device;
19929 VkBufferMemoryRequirementsInfo2* local_pInfo;
19930 local_device = device;
19931 local_pInfo = nullptr;
19932 if (pInfo) {
19933 local_pInfo = (VkBufferMemoryRequirementsInfo2*)pool->alloc(
19934 sizeof(const VkBufferMemoryRequirementsInfo2));
19935 deepcopy_VkBufferMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
19936 (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
19937 }
19938 if (local_pInfo) {
19939 transform_tohost_VkBufferMemoryRequirementsInfo2(
19940 sResourceTracker, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
19941 }
19942 size_t count = 0;
19943 size_t* countPtr = &count;
19944 {
19945 uint64_t cgen_var_0;
19946 *countPtr += 1 * 8;
19947 count_VkBufferMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19948 (VkBufferMemoryRequirementsInfo2*)(local_pInfo),
19949 countPtr);
19950 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
19951 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
19952 }
19953 uint32_t packetSize_vkGetBufferMemoryRequirements2KHR =
19954 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
19955 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferMemoryRequirements2KHR);
19956 uint8_t* packetBeginPtr = streamPtr;
19957 uint8_t** streamPtrPtr = &streamPtr;
19958 uint32_t opcode_vkGetBufferMemoryRequirements2KHR = OP_vkGetBufferMemoryRequirements2KHR;
19959 uint32_t seqno;
19960 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
19961 memcpy(streamPtr, &opcode_vkGetBufferMemoryRequirements2KHR, sizeof(uint32_t));
19962 streamPtr += sizeof(uint32_t);
19963 memcpy(streamPtr, &packetSize_vkGetBufferMemoryRequirements2KHR, sizeof(uint32_t));
19964 streamPtr += sizeof(uint32_t);
19965 if (queueSubmitWithCommandsEnabled) {
19966 memcpy(streamPtr, &seqno, sizeof(uint32_t));
19967 streamPtr += sizeof(uint32_t);
19968 }
19969 uint64_t cgen_var_0;
19970 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
19971 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
19972 *streamPtrPtr += 1 * 8;
19973 reservedmarshal_VkBufferMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19974 (VkBufferMemoryRequirementsInfo2*)(local_pInfo),
19975 streamPtrPtr);
19976 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19977 (VkMemoryRequirements2*)(pMemoryRequirements),
19978 streamPtrPtr);
19979 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
19980 (VkMemoryRequirements2*)(pMemoryRequirements));
19981 if (pMemoryRequirements) {
19982 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
19983 (VkMemoryRequirements2*)(pMemoryRequirements));
19984 }
19985 ++encodeCount;
19986 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
19987 pool->freeAll();
19988 stream->clearPool();
19989 }
19990 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
19991 }
19992
vkGetImageSparseMemoryRequirements2KHR(VkDevice device,const VkImageSparseMemoryRequirementsInfo2 * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements,uint32_t doLock)19993 void VkEncoder::vkGetImageSparseMemoryRequirements2KHR(
19994 VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo,
19995 uint32_t* pSparseMemoryRequirementCount,
19996 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements, uint32_t doLock) {
19997 (void)doLock;
19998 bool queueSubmitWithCommandsEnabled =
19999 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20000 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20001 auto stream = mImpl->stream();
20002 auto pool = mImpl->pool();
20003 VkDevice local_device;
20004 VkImageSparseMemoryRequirementsInfo2* local_pInfo;
20005 local_device = device;
20006 local_pInfo = nullptr;
20007 if (pInfo) {
20008 local_pInfo = (VkImageSparseMemoryRequirementsInfo2*)pool->alloc(
20009 sizeof(const VkImageSparseMemoryRequirementsInfo2));
20010 deepcopy_VkImageSparseMemoryRequirementsInfo2(
20011 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
20012 (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
20013 }
20014 if (local_pInfo) {
20015 transform_tohost_VkImageSparseMemoryRequirementsInfo2(
20016 sResourceTracker, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
20017 }
20018 size_t count = 0;
20019 size_t* countPtr = &count;
20020 {
20021 uint64_t cgen_var_0;
20022 *countPtr += 1 * 8;
20023 count_VkImageSparseMemoryRequirementsInfo2(
20024 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20025 (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo), countPtr);
20026 // WARNING PTR CHECK
20027 *countPtr += 8;
20028 if (pSparseMemoryRequirementCount) {
20029 *countPtr += sizeof(uint32_t);
20030 }
20031 // WARNING PTR CHECK
20032 *countPtr += 8;
20033 if (pSparseMemoryRequirements) {
20034 if (pSparseMemoryRequirementCount) {
20035 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
20036 count_VkSparseImageMemoryRequirements2(
20037 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20038 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i),
20039 countPtr);
20040 }
20041 }
20042 }
20043 }
20044 uint32_t packetSize_vkGetImageSparseMemoryRequirements2KHR =
20045 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20046 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageSparseMemoryRequirements2KHR);
20047 uint8_t* packetBeginPtr = streamPtr;
20048 uint8_t** streamPtrPtr = &streamPtr;
20049 uint32_t opcode_vkGetImageSparseMemoryRequirements2KHR =
20050 OP_vkGetImageSparseMemoryRequirements2KHR;
20051 uint32_t seqno;
20052 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20053 memcpy(streamPtr, &opcode_vkGetImageSparseMemoryRequirements2KHR, sizeof(uint32_t));
20054 streamPtr += sizeof(uint32_t);
20055 memcpy(streamPtr, &packetSize_vkGetImageSparseMemoryRequirements2KHR, sizeof(uint32_t));
20056 streamPtr += sizeof(uint32_t);
20057 if (queueSubmitWithCommandsEnabled) {
20058 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20059 streamPtr += sizeof(uint32_t);
20060 }
20061 uint64_t cgen_var_0;
20062 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20063 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20064 *streamPtrPtr += 1 * 8;
20065 reservedmarshal_VkImageSparseMemoryRequirementsInfo2(
20066 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo),
20067 streamPtrPtr);
20068 // WARNING PTR CHECK
20069 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
20070 memcpy((*streamPtrPtr), &cgen_var_1, 8);
20071 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
20072 *streamPtrPtr += 8;
20073 if (pSparseMemoryRequirementCount) {
20074 memcpy(*streamPtrPtr, (uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
20075 *streamPtrPtr += sizeof(uint32_t);
20076 }
20077 // WARNING PTR CHECK
20078 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
20079 memcpy((*streamPtrPtr), &cgen_var_2, 8);
20080 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
20081 *streamPtrPtr += 8;
20082 if (pSparseMemoryRequirements) {
20083 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
20084 reservedmarshal_VkSparseImageMemoryRequirements2(
20085 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20086 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), streamPtrPtr);
20087 }
20088 }
20089 // WARNING PTR CHECK
20090 uint32_t* check_pSparseMemoryRequirementCount;
20091 check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
20092 if (pSparseMemoryRequirementCount) {
20093 if (!(check_pSparseMemoryRequirementCount)) {
20094 fprintf(stderr,
20095 "fatal: pSparseMemoryRequirementCount inconsistent between guest and host\n");
20096 }
20097 stream->read((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
20098 }
20099 // WARNING PTR CHECK
20100 VkSparseImageMemoryRequirements2* check_pSparseMemoryRequirements;
20101 check_pSparseMemoryRequirements =
20102 (VkSparseImageMemoryRequirements2*)(uintptr_t)stream->getBe64();
20103 if (pSparseMemoryRequirements) {
20104 if (!(check_pSparseMemoryRequirements)) {
20105 fprintf(stderr,
20106 "fatal: pSparseMemoryRequirements inconsistent between guest and host\n");
20107 }
20108 if (pSparseMemoryRequirementCount) {
20109 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
20110 unmarshal_VkSparseImageMemoryRequirements2(
20111 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20112 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
20113 }
20114 }
20115 }
20116 if (pSparseMemoryRequirementCount) {
20117 if (pSparseMemoryRequirements) {
20118 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
20119 transform_fromhost_VkSparseImageMemoryRequirements2(
20120 sResourceTracker,
20121 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
20122 }
20123 }
20124 }
20125 ++encodeCount;
20126 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20127 pool->freeAll();
20128 stream->clearPool();
20129 }
20130 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20131 }
20132
20133 #endif
20134 #ifdef VK_KHR_sampler_ycbcr_conversion
vkCreateSamplerYcbcrConversionKHR(VkDevice device,const VkSamplerYcbcrConversionCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSamplerYcbcrConversion * pYcbcrConversion,uint32_t doLock)20135 VkResult VkEncoder::vkCreateSamplerYcbcrConversionKHR(
20136 VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
20137 const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion,
20138 uint32_t doLock) {
20139 (void)doLock;
20140 bool queueSubmitWithCommandsEnabled =
20141 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20142 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20143 auto stream = mImpl->stream();
20144 auto pool = mImpl->pool();
20145 VkDevice local_device;
20146 VkSamplerYcbcrConversionCreateInfo* local_pCreateInfo;
20147 VkAllocationCallbacks* local_pAllocator;
20148 local_device = device;
20149 local_pCreateInfo = nullptr;
20150 if (pCreateInfo) {
20151 local_pCreateInfo = (VkSamplerYcbcrConversionCreateInfo*)pool->alloc(
20152 sizeof(const VkSamplerYcbcrConversionCreateInfo));
20153 deepcopy_VkSamplerYcbcrConversionCreateInfo(
20154 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
20155 (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
20156 }
20157 local_pAllocator = nullptr;
20158 if (pAllocator) {
20159 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
20160 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
20161 (VkAllocationCallbacks*)(local_pAllocator));
20162 }
20163 local_pAllocator = nullptr;
20164 if (local_pCreateInfo) {
20165 transform_tohost_VkSamplerYcbcrConversionCreateInfo(
20166 sResourceTracker, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
20167 }
20168 if (local_pAllocator) {
20169 transform_tohost_VkAllocationCallbacks(sResourceTracker,
20170 (VkAllocationCallbacks*)(local_pAllocator));
20171 }
20172 size_t count = 0;
20173 size_t* countPtr = &count;
20174 {
20175 uint64_t cgen_var_0;
20176 *countPtr += 1 * 8;
20177 count_VkSamplerYcbcrConversionCreateInfo(
20178 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20179 (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), countPtr);
20180 // WARNING PTR CHECK
20181 *countPtr += 8;
20182 if (local_pAllocator) {
20183 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20184 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
20185 }
20186 uint64_t cgen_var_1;
20187 *countPtr += 8;
20188 }
20189 uint32_t packetSize_vkCreateSamplerYcbcrConversionKHR =
20190 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20191 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateSamplerYcbcrConversionKHR);
20192 uint8_t* packetBeginPtr = streamPtr;
20193 uint8_t** streamPtrPtr = &streamPtr;
20194 uint32_t opcode_vkCreateSamplerYcbcrConversionKHR = OP_vkCreateSamplerYcbcrConversionKHR;
20195 uint32_t seqno;
20196 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20197 memcpy(streamPtr, &opcode_vkCreateSamplerYcbcrConversionKHR, sizeof(uint32_t));
20198 streamPtr += sizeof(uint32_t);
20199 memcpy(streamPtr, &packetSize_vkCreateSamplerYcbcrConversionKHR, sizeof(uint32_t));
20200 streamPtr += sizeof(uint32_t);
20201 if (queueSubmitWithCommandsEnabled) {
20202 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20203 streamPtr += sizeof(uint32_t);
20204 }
20205 uint64_t cgen_var_0;
20206 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20207 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20208 *streamPtrPtr += 1 * 8;
20209 reservedmarshal_VkSamplerYcbcrConversionCreateInfo(
20210 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20211 (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), streamPtrPtr);
20212 // WARNING PTR CHECK
20213 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
20214 memcpy((*streamPtrPtr), &cgen_var_1, 8);
20215 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
20216 *streamPtrPtr += 8;
20217 if (local_pAllocator) {
20218 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20219 (VkAllocationCallbacks*)(local_pAllocator),
20220 streamPtrPtr);
20221 }
20222 /* is handle, possibly out */;
20223 uint64_t cgen_var_2;
20224 *&cgen_var_2 = (uint64_t)((*pYcbcrConversion));
20225 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
20226 *streamPtrPtr += 8;
20227 /* is handle, possibly out */;
20228 stream->setHandleMapping(sResourceTracker->createMapping());
20229 uint64_t cgen_var_3;
20230 stream->read((uint64_t*)&cgen_var_3, 8);
20231 stream->handleMapping()->mapHandles_u64_VkSamplerYcbcrConversion(
20232 &cgen_var_3, (VkSamplerYcbcrConversion*)pYcbcrConversion, 1);
20233 stream->unsetHandleMapping();
20234 VkResult vkCreateSamplerYcbcrConversionKHR_VkResult_return = (VkResult)0;
20235 stream->read(&vkCreateSamplerYcbcrConversionKHR_VkResult_return, sizeof(VkResult));
20236 ++encodeCount;
20237 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20238 pool->freeAll();
20239 stream->clearPool();
20240 }
20241 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20242 return vkCreateSamplerYcbcrConversionKHR_VkResult_return;
20243 }
20244
vkDestroySamplerYcbcrConversionKHR(VkDevice device,VkSamplerYcbcrConversion ycbcrConversion,const VkAllocationCallbacks * pAllocator,uint32_t doLock)20245 void VkEncoder::vkDestroySamplerYcbcrConversionKHR(VkDevice device,
20246 VkSamplerYcbcrConversion ycbcrConversion,
20247 const VkAllocationCallbacks* pAllocator,
20248 uint32_t doLock) {
20249 (void)doLock;
20250 bool queueSubmitWithCommandsEnabled =
20251 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20252 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20253 auto stream = mImpl->stream();
20254 auto pool = mImpl->pool();
20255 VkDevice local_device;
20256 VkSamplerYcbcrConversion local_ycbcrConversion;
20257 VkAllocationCallbacks* local_pAllocator;
20258 local_device = device;
20259 local_ycbcrConversion = ycbcrConversion;
20260 local_pAllocator = nullptr;
20261 if (pAllocator) {
20262 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
20263 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
20264 (VkAllocationCallbacks*)(local_pAllocator));
20265 }
20266 local_pAllocator = nullptr;
20267 if (local_pAllocator) {
20268 transform_tohost_VkAllocationCallbacks(sResourceTracker,
20269 (VkAllocationCallbacks*)(local_pAllocator));
20270 }
20271 size_t count = 0;
20272 size_t* countPtr = &count;
20273 {
20274 uint64_t cgen_var_0;
20275 *countPtr += 1 * 8;
20276 uint64_t cgen_var_1;
20277 *countPtr += 1 * 8;
20278 // WARNING PTR CHECK
20279 *countPtr += 8;
20280 if (local_pAllocator) {
20281 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20282 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
20283 }
20284 }
20285 uint32_t packetSize_vkDestroySamplerYcbcrConversionKHR =
20286 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20287 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroySamplerYcbcrConversionKHR);
20288 uint8_t* packetBeginPtr = streamPtr;
20289 uint8_t** streamPtrPtr = &streamPtr;
20290 uint32_t opcode_vkDestroySamplerYcbcrConversionKHR = OP_vkDestroySamplerYcbcrConversionKHR;
20291 uint32_t seqno;
20292 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20293 memcpy(streamPtr, &opcode_vkDestroySamplerYcbcrConversionKHR, sizeof(uint32_t));
20294 streamPtr += sizeof(uint32_t);
20295 memcpy(streamPtr, &packetSize_vkDestroySamplerYcbcrConversionKHR, sizeof(uint32_t));
20296 streamPtr += sizeof(uint32_t);
20297 if (queueSubmitWithCommandsEnabled) {
20298 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20299 streamPtr += sizeof(uint32_t);
20300 }
20301 uint64_t cgen_var_0;
20302 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20303 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20304 *streamPtrPtr += 1 * 8;
20305 uint64_t cgen_var_1;
20306 *&cgen_var_1 = get_host_u64_VkSamplerYcbcrConversion((*&local_ycbcrConversion));
20307 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
20308 *streamPtrPtr += 1 * 8;
20309 // WARNING PTR CHECK
20310 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
20311 memcpy((*streamPtrPtr), &cgen_var_2, 8);
20312 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
20313 *streamPtrPtr += 8;
20314 if (local_pAllocator) {
20315 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20316 (VkAllocationCallbacks*)(local_pAllocator),
20317 streamPtrPtr);
20318 }
20319 sResourceTracker->destroyMapping()->mapHandles_VkSamplerYcbcrConversion(
20320 (VkSamplerYcbcrConversion*)&ycbcrConversion);
20321 stream->flush();
20322 ++encodeCount;
20323 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20324 pool->freeAll();
20325 stream->clearPool();
20326 }
20327 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20328 }
20329
20330 #endif
20331 #ifdef VK_KHR_bind_memory2
vkBindBufferMemory2KHR(VkDevice device,uint32_t bindInfoCount,const VkBindBufferMemoryInfo * pBindInfos,uint32_t doLock)20332 VkResult VkEncoder::vkBindBufferMemory2KHR(VkDevice device, uint32_t bindInfoCount,
20333 const VkBindBufferMemoryInfo* pBindInfos,
20334 uint32_t doLock) {
20335 (void)doLock;
20336 bool queueSubmitWithCommandsEnabled =
20337 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20338 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20339 auto stream = mImpl->stream();
20340 auto pool = mImpl->pool();
20341 VkDevice local_device;
20342 uint32_t local_bindInfoCount;
20343 VkBindBufferMemoryInfo* local_pBindInfos;
20344 local_device = device;
20345 local_bindInfoCount = bindInfoCount;
20346 local_pBindInfos = nullptr;
20347 if (pBindInfos) {
20348 local_pBindInfos = (VkBindBufferMemoryInfo*)pool->alloc(
20349 ((bindInfoCount)) * sizeof(const VkBindBufferMemoryInfo));
20350 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
20351 deepcopy_VkBindBufferMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfos + i,
20352 (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
20353 }
20354 }
20355 if (local_pBindInfos) {
20356 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
20357 transform_tohost_VkBindBufferMemoryInfo(
20358 sResourceTracker, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
20359 }
20360 }
20361 size_t count = 0;
20362 size_t* countPtr = &count;
20363 {
20364 uint64_t cgen_var_0;
20365 *countPtr += 1 * 8;
20366 *countPtr += sizeof(uint32_t);
20367 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
20368 count_VkBindBufferMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20369 (VkBindBufferMemoryInfo*)(local_pBindInfos + i), countPtr);
20370 }
20371 }
20372 uint32_t packetSize_vkBindBufferMemory2KHR =
20373 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20374 uint8_t* streamPtr = stream->reserve(packetSize_vkBindBufferMemory2KHR);
20375 uint8_t* packetBeginPtr = streamPtr;
20376 uint8_t** streamPtrPtr = &streamPtr;
20377 uint32_t opcode_vkBindBufferMemory2KHR = OP_vkBindBufferMemory2KHR;
20378 uint32_t seqno;
20379 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20380 memcpy(streamPtr, &opcode_vkBindBufferMemory2KHR, sizeof(uint32_t));
20381 streamPtr += sizeof(uint32_t);
20382 memcpy(streamPtr, &packetSize_vkBindBufferMemory2KHR, sizeof(uint32_t));
20383 streamPtr += sizeof(uint32_t);
20384 if (queueSubmitWithCommandsEnabled) {
20385 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20386 streamPtr += sizeof(uint32_t);
20387 }
20388 uint64_t cgen_var_0;
20389 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20390 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20391 *streamPtrPtr += 1 * 8;
20392 memcpy(*streamPtrPtr, (uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
20393 *streamPtrPtr += sizeof(uint32_t);
20394 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
20395 reservedmarshal_VkBindBufferMemoryInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20396 (VkBindBufferMemoryInfo*)(local_pBindInfos + i),
20397 streamPtrPtr);
20398 }
20399 VkResult vkBindBufferMemory2KHR_VkResult_return = (VkResult)0;
20400 stream->read(&vkBindBufferMemory2KHR_VkResult_return, sizeof(VkResult));
20401 ++encodeCount;
20402 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20403 pool->freeAll();
20404 stream->clearPool();
20405 }
20406 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20407 return vkBindBufferMemory2KHR_VkResult_return;
20408 }
20409
vkBindImageMemory2KHR(VkDevice device,uint32_t bindInfoCount,const VkBindImageMemoryInfo * pBindInfos,uint32_t doLock)20410 VkResult VkEncoder::vkBindImageMemory2KHR(VkDevice device, uint32_t bindInfoCount,
20411 const VkBindImageMemoryInfo* pBindInfos,
20412 uint32_t doLock) {
20413 (void)doLock;
20414 bool queueSubmitWithCommandsEnabled =
20415 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20416 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20417 auto stream = mImpl->stream();
20418 auto pool = mImpl->pool();
20419 VkDevice local_device;
20420 uint32_t local_bindInfoCount;
20421 VkBindImageMemoryInfo* local_pBindInfos;
20422 local_device = device;
20423 local_bindInfoCount = bindInfoCount;
20424 local_pBindInfos = nullptr;
20425 if (pBindInfos) {
20426 local_pBindInfos = (VkBindImageMemoryInfo*)pool->alloc(((bindInfoCount)) *
20427 sizeof(const VkBindImageMemoryInfo));
20428 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
20429 deepcopy_VkBindImageMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfos + i,
20430 (VkBindImageMemoryInfo*)(local_pBindInfos + i));
20431 }
20432 }
20433 if (local_pBindInfos) {
20434 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
20435 transform_tohost_VkBindImageMemoryInfo(sResourceTracker,
20436 (VkBindImageMemoryInfo*)(local_pBindInfos + i));
20437 }
20438 }
20439 size_t count = 0;
20440 size_t* countPtr = &count;
20441 {
20442 uint64_t cgen_var_0;
20443 *countPtr += 1 * 8;
20444 *countPtr += sizeof(uint32_t);
20445 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
20446 count_VkBindImageMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20447 (VkBindImageMemoryInfo*)(local_pBindInfos + i), countPtr);
20448 }
20449 }
20450 uint32_t packetSize_vkBindImageMemory2KHR =
20451 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20452 uint8_t* streamPtr = stream->reserve(packetSize_vkBindImageMemory2KHR);
20453 uint8_t* packetBeginPtr = streamPtr;
20454 uint8_t** streamPtrPtr = &streamPtr;
20455 uint32_t opcode_vkBindImageMemory2KHR = OP_vkBindImageMemory2KHR;
20456 uint32_t seqno;
20457 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20458 memcpy(streamPtr, &opcode_vkBindImageMemory2KHR, sizeof(uint32_t));
20459 streamPtr += sizeof(uint32_t);
20460 memcpy(streamPtr, &packetSize_vkBindImageMemory2KHR, sizeof(uint32_t));
20461 streamPtr += sizeof(uint32_t);
20462 if (queueSubmitWithCommandsEnabled) {
20463 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20464 streamPtr += sizeof(uint32_t);
20465 }
20466 uint64_t cgen_var_0;
20467 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20468 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20469 *streamPtrPtr += 1 * 8;
20470 memcpy(*streamPtrPtr, (uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
20471 *streamPtrPtr += sizeof(uint32_t);
20472 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
20473 reservedmarshal_VkBindImageMemoryInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20474 (VkBindImageMemoryInfo*)(local_pBindInfos + i),
20475 streamPtrPtr);
20476 }
20477 VkResult vkBindImageMemory2KHR_VkResult_return = (VkResult)0;
20478 stream->read(&vkBindImageMemory2KHR_VkResult_return, sizeof(VkResult));
20479 ++encodeCount;
20480 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20481 pool->freeAll();
20482 stream->clearPool();
20483 }
20484 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20485 return vkBindImageMemory2KHR_VkResult_return;
20486 }
20487
20488 #endif
20489 #ifdef VK_KHR_maintenance3
vkGetDescriptorSetLayoutSupportKHR(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,VkDescriptorSetLayoutSupport * pSupport,uint32_t doLock)20490 void VkEncoder::vkGetDescriptorSetLayoutSupportKHR(
20491 VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
20492 VkDescriptorSetLayoutSupport* pSupport, uint32_t doLock) {
20493 (void)doLock;
20494 bool queueSubmitWithCommandsEnabled =
20495 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20496 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20497 auto stream = mImpl->stream();
20498 auto pool = mImpl->pool();
20499 VkDevice local_device;
20500 VkDescriptorSetLayoutCreateInfo* local_pCreateInfo;
20501 local_device = device;
20502 local_pCreateInfo = nullptr;
20503 if (pCreateInfo) {
20504 local_pCreateInfo = (VkDescriptorSetLayoutCreateInfo*)pool->alloc(
20505 sizeof(const VkDescriptorSetLayoutCreateInfo));
20506 deepcopy_VkDescriptorSetLayoutCreateInfo(
20507 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
20508 (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
20509 }
20510 if (local_pCreateInfo) {
20511 transform_tohost_VkDescriptorSetLayoutCreateInfo(
20512 sResourceTracker, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
20513 }
20514 size_t count = 0;
20515 size_t* countPtr = &count;
20516 {
20517 uint64_t cgen_var_0;
20518 *countPtr += 1 * 8;
20519 count_VkDescriptorSetLayoutCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20520 (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo),
20521 countPtr);
20522 count_VkDescriptorSetLayoutSupport(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20523 (VkDescriptorSetLayoutSupport*)(pSupport), countPtr);
20524 }
20525 uint32_t packetSize_vkGetDescriptorSetLayoutSupportKHR =
20526 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20527 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDescriptorSetLayoutSupportKHR);
20528 uint8_t* packetBeginPtr = streamPtr;
20529 uint8_t** streamPtrPtr = &streamPtr;
20530 uint32_t opcode_vkGetDescriptorSetLayoutSupportKHR = OP_vkGetDescriptorSetLayoutSupportKHR;
20531 uint32_t seqno;
20532 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20533 memcpy(streamPtr, &opcode_vkGetDescriptorSetLayoutSupportKHR, sizeof(uint32_t));
20534 streamPtr += sizeof(uint32_t);
20535 memcpy(streamPtr, &packetSize_vkGetDescriptorSetLayoutSupportKHR, sizeof(uint32_t));
20536 streamPtr += sizeof(uint32_t);
20537 if (queueSubmitWithCommandsEnabled) {
20538 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20539 streamPtr += sizeof(uint32_t);
20540 }
20541 uint64_t cgen_var_0;
20542 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20543 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20544 *streamPtrPtr += 1 * 8;
20545 reservedmarshal_VkDescriptorSetLayoutCreateInfo(
20546 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo),
20547 streamPtrPtr);
20548 reservedmarshal_VkDescriptorSetLayoutSupport(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20549 (VkDescriptorSetLayoutSupport*)(pSupport),
20550 streamPtrPtr);
20551 unmarshal_VkDescriptorSetLayoutSupport(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20552 (VkDescriptorSetLayoutSupport*)(pSupport));
20553 if (pSupport) {
20554 transform_fromhost_VkDescriptorSetLayoutSupport(sResourceTracker,
20555 (VkDescriptorSetLayoutSupport*)(pSupport));
20556 }
20557 ++encodeCount;
20558 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20559 pool->freeAll();
20560 stream->clearPool();
20561 }
20562 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20563 }
20564
20565 #endif
20566 #ifdef VK_KHR_buffer_device_address
vkGetBufferDeviceAddressKHR(VkDevice device,const VkBufferDeviceAddressInfo * pInfo,uint32_t doLock)20567 VkDeviceAddress VkEncoder::vkGetBufferDeviceAddressKHR(VkDevice device,
20568 const VkBufferDeviceAddressInfo* pInfo,
20569 uint32_t doLock) {
20570 (void)doLock;
20571 bool queueSubmitWithCommandsEnabled =
20572 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20573 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20574 auto stream = mImpl->stream();
20575 auto pool = mImpl->pool();
20576 VkDevice local_device;
20577 VkBufferDeviceAddressInfo* local_pInfo;
20578 local_device = device;
20579 local_pInfo = nullptr;
20580 if (pInfo) {
20581 local_pInfo =
20582 (VkBufferDeviceAddressInfo*)pool->alloc(sizeof(const VkBufferDeviceAddressInfo));
20583 deepcopy_VkBufferDeviceAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
20584 (VkBufferDeviceAddressInfo*)(local_pInfo));
20585 }
20586 if (local_pInfo) {
20587 transform_tohost_VkBufferDeviceAddressInfo(sResourceTracker,
20588 (VkBufferDeviceAddressInfo*)(local_pInfo));
20589 }
20590 size_t count = 0;
20591 size_t* countPtr = &count;
20592 {
20593 uint64_t cgen_var_0;
20594 *countPtr += 1 * 8;
20595 count_VkBufferDeviceAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20596 (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
20597 }
20598 uint32_t packetSize_vkGetBufferDeviceAddressKHR =
20599 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20600 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferDeviceAddressKHR);
20601 uint8_t* packetBeginPtr = streamPtr;
20602 uint8_t** streamPtrPtr = &streamPtr;
20603 uint32_t opcode_vkGetBufferDeviceAddressKHR = OP_vkGetBufferDeviceAddressKHR;
20604 uint32_t seqno;
20605 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20606 memcpy(streamPtr, &opcode_vkGetBufferDeviceAddressKHR, sizeof(uint32_t));
20607 streamPtr += sizeof(uint32_t);
20608 memcpy(streamPtr, &packetSize_vkGetBufferDeviceAddressKHR, sizeof(uint32_t));
20609 streamPtr += sizeof(uint32_t);
20610 if (queueSubmitWithCommandsEnabled) {
20611 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20612 streamPtr += sizeof(uint32_t);
20613 }
20614 uint64_t cgen_var_0;
20615 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20616 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20617 *streamPtrPtr += 1 * 8;
20618 reservedmarshal_VkBufferDeviceAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20619 (VkBufferDeviceAddressInfo*)(local_pInfo),
20620 streamPtrPtr);
20621 VkDeviceAddress vkGetBufferDeviceAddressKHR_VkDeviceAddress_return = (VkDeviceAddress)0;
20622 stream->read(&vkGetBufferDeviceAddressKHR_VkDeviceAddress_return, sizeof(VkDeviceAddress));
20623 ++encodeCount;
20624 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20625 pool->freeAll();
20626 stream->clearPool();
20627 }
20628 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20629 return vkGetBufferDeviceAddressKHR_VkDeviceAddress_return;
20630 }
20631
vkGetBufferOpaqueCaptureAddressKHR(VkDevice device,const VkBufferDeviceAddressInfo * pInfo,uint32_t doLock)20632 uint64_t VkEncoder::vkGetBufferOpaqueCaptureAddressKHR(VkDevice device,
20633 const VkBufferDeviceAddressInfo* pInfo,
20634 uint32_t doLock) {
20635 (void)doLock;
20636 bool queueSubmitWithCommandsEnabled =
20637 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20638 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20639 auto stream = mImpl->stream();
20640 auto pool = mImpl->pool();
20641 VkDevice local_device;
20642 VkBufferDeviceAddressInfo* local_pInfo;
20643 local_device = device;
20644 local_pInfo = nullptr;
20645 if (pInfo) {
20646 local_pInfo =
20647 (VkBufferDeviceAddressInfo*)pool->alloc(sizeof(const VkBufferDeviceAddressInfo));
20648 deepcopy_VkBufferDeviceAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
20649 (VkBufferDeviceAddressInfo*)(local_pInfo));
20650 }
20651 if (local_pInfo) {
20652 transform_tohost_VkBufferDeviceAddressInfo(sResourceTracker,
20653 (VkBufferDeviceAddressInfo*)(local_pInfo));
20654 }
20655 size_t count = 0;
20656 size_t* countPtr = &count;
20657 {
20658 uint64_t cgen_var_0;
20659 *countPtr += 1 * 8;
20660 count_VkBufferDeviceAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20661 (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
20662 }
20663 uint32_t packetSize_vkGetBufferOpaqueCaptureAddressKHR =
20664 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20665 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferOpaqueCaptureAddressKHR);
20666 uint8_t* packetBeginPtr = streamPtr;
20667 uint8_t** streamPtrPtr = &streamPtr;
20668 uint32_t opcode_vkGetBufferOpaqueCaptureAddressKHR = OP_vkGetBufferOpaqueCaptureAddressKHR;
20669 uint32_t seqno;
20670 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20671 memcpy(streamPtr, &opcode_vkGetBufferOpaqueCaptureAddressKHR, sizeof(uint32_t));
20672 streamPtr += sizeof(uint32_t);
20673 memcpy(streamPtr, &packetSize_vkGetBufferOpaqueCaptureAddressKHR, sizeof(uint32_t));
20674 streamPtr += sizeof(uint32_t);
20675 if (queueSubmitWithCommandsEnabled) {
20676 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20677 streamPtr += sizeof(uint32_t);
20678 }
20679 uint64_t cgen_var_0;
20680 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20681 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20682 *streamPtrPtr += 1 * 8;
20683 reservedmarshal_VkBufferDeviceAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20684 (VkBufferDeviceAddressInfo*)(local_pInfo),
20685 streamPtrPtr);
20686 uint64_t vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return = (uint64_t)0;
20687 stream->read(&vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return, sizeof(uint64_t));
20688 ++encodeCount;
20689 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20690 pool->freeAll();
20691 stream->clearPool();
20692 }
20693 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20694 return vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return;
20695 }
20696
vkGetDeviceMemoryOpaqueCaptureAddressKHR(VkDevice device,const VkDeviceMemoryOpaqueCaptureAddressInfo * pInfo,uint32_t doLock)20697 uint64_t VkEncoder::vkGetDeviceMemoryOpaqueCaptureAddressKHR(
20698 VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo, uint32_t doLock) {
20699 (void)doLock;
20700 bool queueSubmitWithCommandsEnabled =
20701 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20702 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20703 auto stream = mImpl->stream();
20704 auto pool = mImpl->pool();
20705 VkDevice local_device;
20706 VkDeviceMemoryOpaqueCaptureAddressInfo* local_pInfo;
20707 local_device = device;
20708 local_pInfo = nullptr;
20709 if (pInfo) {
20710 local_pInfo = (VkDeviceMemoryOpaqueCaptureAddressInfo*)pool->alloc(
20711 sizeof(const VkDeviceMemoryOpaqueCaptureAddressInfo));
20712 deepcopy_VkDeviceMemoryOpaqueCaptureAddressInfo(
20713 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
20714 (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo));
20715 }
20716 if (local_pInfo) {
20717 transform_tohost_VkDeviceMemoryOpaqueCaptureAddressInfo(
20718 sResourceTracker, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo));
20719 }
20720 size_t count = 0;
20721 size_t* countPtr = &count;
20722 {
20723 uint64_t cgen_var_0;
20724 *countPtr += 1 * 8;
20725 count_VkDeviceMemoryOpaqueCaptureAddressInfo(
20726 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20727 (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo), countPtr);
20728 }
20729 uint32_t packetSize_vkGetDeviceMemoryOpaqueCaptureAddressKHR =
20730 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20731 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceMemoryOpaqueCaptureAddressKHR);
20732 uint8_t* packetBeginPtr = streamPtr;
20733 uint8_t** streamPtrPtr = &streamPtr;
20734 uint32_t opcode_vkGetDeviceMemoryOpaqueCaptureAddressKHR =
20735 OP_vkGetDeviceMemoryOpaqueCaptureAddressKHR;
20736 uint32_t seqno;
20737 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20738 memcpy(streamPtr, &opcode_vkGetDeviceMemoryOpaqueCaptureAddressKHR, sizeof(uint32_t));
20739 streamPtr += sizeof(uint32_t);
20740 memcpy(streamPtr, &packetSize_vkGetDeviceMemoryOpaqueCaptureAddressKHR, sizeof(uint32_t));
20741 streamPtr += sizeof(uint32_t);
20742 if (queueSubmitWithCommandsEnabled) {
20743 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20744 streamPtr += sizeof(uint32_t);
20745 }
20746 uint64_t cgen_var_0;
20747 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20748 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20749 *streamPtrPtr += 1 * 8;
20750 reservedmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(
20751 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo),
20752 streamPtrPtr);
20753 uint64_t vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return = (uint64_t)0;
20754 stream->read(&vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return, sizeof(uint64_t));
20755 ++encodeCount;
20756 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20757 pool->freeAll();
20758 stream->clearPool();
20759 }
20760 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20761 return vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return;
20762 }
20763
20764 #endif
20765 #ifdef VK_KHR_pipeline_executable_properties
vkGetPipelineExecutablePropertiesKHR(VkDevice device,const VkPipelineInfoKHR * pPipelineInfo,uint32_t * pExecutableCount,VkPipelineExecutablePropertiesKHR * pProperties,uint32_t doLock)20766 VkResult VkEncoder::vkGetPipelineExecutablePropertiesKHR(
20767 VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, uint32_t* pExecutableCount,
20768 VkPipelineExecutablePropertiesKHR* pProperties, uint32_t doLock) {
20769 (void)doLock;
20770 bool queueSubmitWithCommandsEnabled =
20771 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20772 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20773 auto stream = mImpl->stream();
20774 auto pool = mImpl->pool();
20775 VkDevice local_device;
20776 VkPipelineInfoKHR* local_pPipelineInfo;
20777 local_device = device;
20778 local_pPipelineInfo = nullptr;
20779 if (pPipelineInfo) {
20780 local_pPipelineInfo = (VkPipelineInfoKHR*)pool->alloc(sizeof(const VkPipelineInfoKHR));
20781 deepcopy_VkPipelineInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pPipelineInfo,
20782 (VkPipelineInfoKHR*)(local_pPipelineInfo));
20783 }
20784 if (local_pPipelineInfo) {
20785 transform_tohost_VkPipelineInfoKHR(sResourceTracker,
20786 (VkPipelineInfoKHR*)(local_pPipelineInfo));
20787 }
20788 size_t count = 0;
20789 size_t* countPtr = &count;
20790 {
20791 uint64_t cgen_var_0;
20792 *countPtr += 1 * 8;
20793 count_VkPipelineInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20794 (VkPipelineInfoKHR*)(local_pPipelineInfo), countPtr);
20795 // WARNING PTR CHECK
20796 *countPtr += 8;
20797 if (pExecutableCount) {
20798 *countPtr += sizeof(uint32_t);
20799 }
20800 // WARNING PTR CHECK
20801 *countPtr += 8;
20802 if (pProperties) {
20803 if (pExecutableCount) {
20804 for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
20805 count_VkPipelineExecutablePropertiesKHR(
20806 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20807 (VkPipelineExecutablePropertiesKHR*)(pProperties + i), countPtr);
20808 }
20809 }
20810 }
20811 }
20812 uint32_t packetSize_vkGetPipelineExecutablePropertiesKHR =
20813 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20814 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPipelineExecutablePropertiesKHR);
20815 uint8_t* packetBeginPtr = streamPtr;
20816 uint8_t** streamPtrPtr = &streamPtr;
20817 uint32_t opcode_vkGetPipelineExecutablePropertiesKHR = OP_vkGetPipelineExecutablePropertiesKHR;
20818 uint32_t seqno;
20819 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20820 memcpy(streamPtr, &opcode_vkGetPipelineExecutablePropertiesKHR, sizeof(uint32_t));
20821 streamPtr += sizeof(uint32_t);
20822 memcpy(streamPtr, &packetSize_vkGetPipelineExecutablePropertiesKHR, sizeof(uint32_t));
20823 streamPtr += sizeof(uint32_t);
20824 if (queueSubmitWithCommandsEnabled) {
20825 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20826 streamPtr += sizeof(uint32_t);
20827 }
20828 uint64_t cgen_var_0;
20829 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20830 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20831 *streamPtrPtr += 1 * 8;
20832 reservedmarshal_VkPipelineInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20833 (VkPipelineInfoKHR*)(local_pPipelineInfo), streamPtrPtr);
20834 // WARNING PTR CHECK
20835 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pExecutableCount;
20836 memcpy((*streamPtrPtr), &cgen_var_1, 8);
20837 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
20838 *streamPtrPtr += 8;
20839 if (pExecutableCount) {
20840 memcpy(*streamPtrPtr, (uint32_t*)pExecutableCount, sizeof(uint32_t));
20841 *streamPtrPtr += sizeof(uint32_t);
20842 }
20843 // WARNING PTR CHECK
20844 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pProperties;
20845 memcpy((*streamPtrPtr), &cgen_var_2, 8);
20846 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
20847 *streamPtrPtr += 8;
20848 if (pProperties) {
20849 for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
20850 reservedmarshal_VkPipelineExecutablePropertiesKHR(
20851 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20852 (VkPipelineExecutablePropertiesKHR*)(pProperties + i), streamPtrPtr);
20853 }
20854 }
20855 // WARNING PTR CHECK
20856 uint32_t* check_pExecutableCount;
20857 check_pExecutableCount = (uint32_t*)(uintptr_t)stream->getBe64();
20858 if (pExecutableCount) {
20859 if (!(check_pExecutableCount)) {
20860 fprintf(stderr, "fatal: pExecutableCount inconsistent between guest and host\n");
20861 }
20862 stream->read((uint32_t*)pExecutableCount, sizeof(uint32_t));
20863 }
20864 // WARNING PTR CHECK
20865 VkPipelineExecutablePropertiesKHR* check_pProperties;
20866 check_pProperties = (VkPipelineExecutablePropertiesKHR*)(uintptr_t)stream->getBe64();
20867 if (pProperties) {
20868 if (!(check_pProperties)) {
20869 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
20870 }
20871 if (pExecutableCount) {
20872 for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
20873 unmarshal_VkPipelineExecutablePropertiesKHR(
20874 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20875 (VkPipelineExecutablePropertiesKHR*)(pProperties + i));
20876 }
20877 }
20878 }
20879 if (pExecutableCount) {
20880 if (pProperties) {
20881 for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i) {
20882 transform_fromhost_VkPipelineExecutablePropertiesKHR(
20883 sResourceTracker, (VkPipelineExecutablePropertiesKHR*)(pProperties + i));
20884 }
20885 }
20886 }
20887 VkResult vkGetPipelineExecutablePropertiesKHR_VkResult_return = (VkResult)0;
20888 stream->read(&vkGetPipelineExecutablePropertiesKHR_VkResult_return, sizeof(VkResult));
20889 ++encodeCount;
20890 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
20891 pool->freeAll();
20892 stream->clearPool();
20893 }
20894 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
20895 return vkGetPipelineExecutablePropertiesKHR_VkResult_return;
20896 }
20897
vkGetPipelineExecutableStatisticsKHR(VkDevice device,const VkPipelineExecutableInfoKHR * pExecutableInfo,uint32_t * pStatisticCount,VkPipelineExecutableStatisticKHR * pStatistics,uint32_t doLock)20898 VkResult VkEncoder::vkGetPipelineExecutableStatisticsKHR(
20899 VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pStatisticCount,
20900 VkPipelineExecutableStatisticKHR* pStatistics, uint32_t doLock) {
20901 (void)doLock;
20902 bool queueSubmitWithCommandsEnabled =
20903 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
20904 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
20905 auto stream = mImpl->stream();
20906 auto pool = mImpl->pool();
20907 VkDevice local_device;
20908 VkPipelineExecutableInfoKHR* local_pExecutableInfo;
20909 local_device = device;
20910 local_pExecutableInfo = nullptr;
20911 if (pExecutableInfo) {
20912 local_pExecutableInfo =
20913 (VkPipelineExecutableInfoKHR*)pool->alloc(sizeof(const VkPipelineExecutableInfoKHR));
20914 deepcopy_VkPipelineExecutableInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExecutableInfo,
20915 (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
20916 }
20917 if (local_pExecutableInfo) {
20918 transform_tohost_VkPipelineExecutableInfoKHR(
20919 sResourceTracker, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
20920 }
20921 size_t count = 0;
20922 size_t* countPtr = &count;
20923 {
20924 uint64_t cgen_var_0;
20925 *countPtr += 1 * 8;
20926 count_VkPipelineExecutableInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20927 (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo),
20928 countPtr);
20929 // WARNING PTR CHECK
20930 *countPtr += 8;
20931 if (pStatisticCount) {
20932 *countPtr += sizeof(uint32_t);
20933 }
20934 // WARNING PTR CHECK
20935 *countPtr += 8;
20936 if (pStatistics) {
20937 if (pStatisticCount) {
20938 for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
20939 count_VkPipelineExecutableStatisticKHR(
20940 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
20941 (VkPipelineExecutableStatisticKHR*)(pStatistics + i), countPtr);
20942 }
20943 }
20944 }
20945 }
20946 uint32_t packetSize_vkGetPipelineExecutableStatisticsKHR =
20947 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
20948 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPipelineExecutableStatisticsKHR);
20949 uint8_t* packetBeginPtr = streamPtr;
20950 uint8_t** streamPtrPtr = &streamPtr;
20951 uint32_t opcode_vkGetPipelineExecutableStatisticsKHR = OP_vkGetPipelineExecutableStatisticsKHR;
20952 uint32_t seqno;
20953 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
20954 memcpy(streamPtr, &opcode_vkGetPipelineExecutableStatisticsKHR, sizeof(uint32_t));
20955 streamPtr += sizeof(uint32_t);
20956 memcpy(streamPtr, &packetSize_vkGetPipelineExecutableStatisticsKHR, sizeof(uint32_t));
20957 streamPtr += sizeof(uint32_t);
20958 if (queueSubmitWithCommandsEnabled) {
20959 memcpy(streamPtr, &seqno, sizeof(uint32_t));
20960 streamPtr += sizeof(uint32_t);
20961 }
20962 uint64_t cgen_var_0;
20963 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
20964 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
20965 *streamPtrPtr += 1 * 8;
20966 reservedmarshal_VkPipelineExecutableInfoKHR(
20967 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo),
20968 streamPtrPtr);
20969 // WARNING PTR CHECK
20970 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pStatisticCount;
20971 memcpy((*streamPtrPtr), &cgen_var_1, 8);
20972 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
20973 *streamPtrPtr += 8;
20974 if (pStatisticCount) {
20975 memcpy(*streamPtrPtr, (uint32_t*)pStatisticCount, sizeof(uint32_t));
20976 *streamPtrPtr += sizeof(uint32_t);
20977 }
20978 // WARNING PTR CHECK
20979 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pStatistics;
20980 memcpy((*streamPtrPtr), &cgen_var_2, 8);
20981 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
20982 *streamPtrPtr += 8;
20983 if (pStatistics) {
20984 for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
20985 reservedmarshal_VkPipelineExecutableStatisticKHR(
20986 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
20987 (VkPipelineExecutableStatisticKHR*)(pStatistics + i), streamPtrPtr);
20988 }
20989 }
20990 // WARNING PTR CHECK
20991 uint32_t* check_pStatisticCount;
20992 check_pStatisticCount = (uint32_t*)(uintptr_t)stream->getBe64();
20993 if (pStatisticCount) {
20994 if (!(check_pStatisticCount)) {
20995 fprintf(stderr, "fatal: pStatisticCount inconsistent between guest and host\n");
20996 }
20997 stream->read((uint32_t*)pStatisticCount, sizeof(uint32_t));
20998 }
20999 // WARNING PTR CHECK
21000 VkPipelineExecutableStatisticKHR* check_pStatistics;
21001 check_pStatistics = (VkPipelineExecutableStatisticKHR*)(uintptr_t)stream->getBe64();
21002 if (pStatistics) {
21003 if (!(check_pStatistics)) {
21004 fprintf(stderr, "fatal: pStatistics inconsistent between guest and host\n");
21005 }
21006 if (pStatisticCount) {
21007 for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
21008 unmarshal_VkPipelineExecutableStatisticKHR(
21009 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21010 (VkPipelineExecutableStatisticKHR*)(pStatistics + i));
21011 }
21012 }
21013 }
21014 if (pStatisticCount) {
21015 if (pStatistics) {
21016 for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i) {
21017 transform_fromhost_VkPipelineExecutableStatisticKHR(
21018 sResourceTracker, (VkPipelineExecutableStatisticKHR*)(pStatistics + i));
21019 }
21020 }
21021 }
21022 VkResult vkGetPipelineExecutableStatisticsKHR_VkResult_return = (VkResult)0;
21023 stream->read(&vkGetPipelineExecutableStatisticsKHR_VkResult_return, sizeof(VkResult));
21024 ++encodeCount;
21025 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21026 pool->freeAll();
21027 stream->clearPool();
21028 }
21029 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21030 return vkGetPipelineExecutableStatisticsKHR_VkResult_return;
21031 }
21032
vkGetPipelineExecutableInternalRepresentationsKHR(VkDevice device,const VkPipelineExecutableInfoKHR * pExecutableInfo,uint32_t * pInternalRepresentationCount,VkPipelineExecutableInternalRepresentationKHR * pInternalRepresentations,uint32_t doLock)21033 VkResult VkEncoder::vkGetPipelineExecutableInternalRepresentationsKHR(
21034 VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo,
21035 uint32_t* pInternalRepresentationCount,
21036 VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations, uint32_t doLock) {
21037 (void)doLock;
21038 bool queueSubmitWithCommandsEnabled =
21039 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21040 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21041 auto stream = mImpl->stream();
21042 auto pool = mImpl->pool();
21043 VkDevice local_device;
21044 VkPipelineExecutableInfoKHR* local_pExecutableInfo;
21045 local_device = device;
21046 local_pExecutableInfo = nullptr;
21047 if (pExecutableInfo) {
21048 local_pExecutableInfo =
21049 (VkPipelineExecutableInfoKHR*)pool->alloc(sizeof(const VkPipelineExecutableInfoKHR));
21050 deepcopy_VkPipelineExecutableInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExecutableInfo,
21051 (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
21052 }
21053 if (local_pExecutableInfo) {
21054 transform_tohost_VkPipelineExecutableInfoKHR(
21055 sResourceTracker, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
21056 }
21057 size_t count = 0;
21058 size_t* countPtr = &count;
21059 {
21060 uint64_t cgen_var_0;
21061 *countPtr += 1 * 8;
21062 count_VkPipelineExecutableInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21063 (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo),
21064 countPtr);
21065 // WARNING PTR CHECK
21066 *countPtr += 8;
21067 if (pInternalRepresentationCount) {
21068 *countPtr += sizeof(uint32_t);
21069 }
21070 // WARNING PTR CHECK
21071 *countPtr += 8;
21072 if (pInternalRepresentations) {
21073 if (pInternalRepresentationCount) {
21074 for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
21075 count_VkPipelineExecutableInternalRepresentationKHR(
21076 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21077 (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations +
21078 i),
21079 countPtr);
21080 }
21081 }
21082 }
21083 }
21084 uint32_t packetSize_vkGetPipelineExecutableInternalRepresentationsKHR =
21085 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
21086 uint8_t* streamPtr =
21087 stream->reserve(packetSize_vkGetPipelineExecutableInternalRepresentationsKHR);
21088 uint8_t* packetBeginPtr = streamPtr;
21089 uint8_t** streamPtrPtr = &streamPtr;
21090 uint32_t opcode_vkGetPipelineExecutableInternalRepresentationsKHR =
21091 OP_vkGetPipelineExecutableInternalRepresentationsKHR;
21092 uint32_t seqno;
21093 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
21094 memcpy(streamPtr, &opcode_vkGetPipelineExecutableInternalRepresentationsKHR, sizeof(uint32_t));
21095 streamPtr += sizeof(uint32_t);
21096 memcpy(streamPtr, &packetSize_vkGetPipelineExecutableInternalRepresentationsKHR,
21097 sizeof(uint32_t));
21098 streamPtr += sizeof(uint32_t);
21099 if (queueSubmitWithCommandsEnabled) {
21100 memcpy(streamPtr, &seqno, sizeof(uint32_t));
21101 streamPtr += sizeof(uint32_t);
21102 }
21103 uint64_t cgen_var_0;
21104 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
21105 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21106 *streamPtrPtr += 1 * 8;
21107 reservedmarshal_VkPipelineExecutableInfoKHR(
21108 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo),
21109 streamPtrPtr);
21110 // WARNING PTR CHECK
21111 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pInternalRepresentationCount;
21112 memcpy((*streamPtrPtr), &cgen_var_1, 8);
21113 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
21114 *streamPtrPtr += 8;
21115 if (pInternalRepresentationCount) {
21116 memcpy(*streamPtrPtr, (uint32_t*)pInternalRepresentationCount, sizeof(uint32_t));
21117 *streamPtrPtr += sizeof(uint32_t);
21118 }
21119 // WARNING PTR CHECK
21120 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pInternalRepresentations;
21121 memcpy((*streamPtrPtr), &cgen_var_2, 8);
21122 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
21123 *streamPtrPtr += 8;
21124 if (pInternalRepresentations) {
21125 for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
21126 reservedmarshal_VkPipelineExecutableInternalRepresentationKHR(
21127 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21128 (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i),
21129 streamPtrPtr);
21130 }
21131 }
21132 // WARNING PTR CHECK
21133 uint32_t* check_pInternalRepresentationCount;
21134 check_pInternalRepresentationCount = (uint32_t*)(uintptr_t)stream->getBe64();
21135 if (pInternalRepresentationCount) {
21136 if (!(check_pInternalRepresentationCount)) {
21137 fprintf(stderr,
21138 "fatal: pInternalRepresentationCount inconsistent between guest and host\n");
21139 }
21140 stream->read((uint32_t*)pInternalRepresentationCount, sizeof(uint32_t));
21141 }
21142 // WARNING PTR CHECK
21143 VkPipelineExecutableInternalRepresentationKHR* check_pInternalRepresentations;
21144 check_pInternalRepresentations =
21145 (VkPipelineExecutableInternalRepresentationKHR*)(uintptr_t)stream->getBe64();
21146 if (pInternalRepresentations) {
21147 if (!(check_pInternalRepresentations)) {
21148 fprintf(stderr,
21149 "fatal: pInternalRepresentations inconsistent between guest and host\n");
21150 }
21151 if (pInternalRepresentationCount) {
21152 for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
21153 unmarshal_VkPipelineExecutableInternalRepresentationKHR(
21154 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21155 (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i));
21156 }
21157 }
21158 }
21159 if (pInternalRepresentationCount) {
21160 if (pInternalRepresentations) {
21161 for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i) {
21162 transform_fromhost_VkPipelineExecutableInternalRepresentationKHR(
21163 sResourceTracker,
21164 (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i));
21165 }
21166 }
21167 }
21168 VkResult vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return = (VkResult)0;
21169 stream->read(&vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return,
21170 sizeof(VkResult));
21171 ++encodeCount;
21172 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21173 pool->freeAll();
21174 stream->clearPool();
21175 }
21176 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21177 return vkGetPipelineExecutableInternalRepresentationsKHR_VkResult_return;
21178 }
21179
21180 #endif
21181 #ifdef VK_KHR_synchronization2
vkCmdSetEvent2KHR(VkCommandBuffer commandBuffer,VkEvent event,const VkDependencyInfo * pDependencyInfo,uint32_t doLock)21182 void VkEncoder::vkCmdSetEvent2KHR(VkCommandBuffer commandBuffer, VkEvent event,
21183 const VkDependencyInfo* pDependencyInfo, uint32_t doLock) {
21184 (void)doLock;
21185 bool queueSubmitWithCommandsEnabled =
21186 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21187 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21188 auto stream = mImpl->stream();
21189 auto pool = mImpl->pool();
21190 VkCommandBuffer local_commandBuffer;
21191 VkEvent local_event;
21192 VkDependencyInfo* local_pDependencyInfo;
21193 local_commandBuffer = commandBuffer;
21194 local_event = event;
21195 local_pDependencyInfo = nullptr;
21196 if (pDependencyInfo) {
21197 local_pDependencyInfo = (VkDependencyInfo*)pool->alloc(sizeof(const VkDependencyInfo));
21198 deepcopy_VkDependencyInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDependencyInfo,
21199 (VkDependencyInfo*)(local_pDependencyInfo));
21200 }
21201 if (local_pDependencyInfo) {
21202 transform_tohost_VkDependencyInfo(sResourceTracker,
21203 (VkDependencyInfo*)(local_pDependencyInfo));
21204 }
21205 size_t count = 0;
21206 size_t* countPtr = &count;
21207 {
21208 uint64_t cgen_var_0;
21209 *countPtr += 1 * 8;
21210 uint64_t cgen_var_1;
21211 *countPtr += 1 * 8;
21212 count_VkDependencyInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21213 (VkDependencyInfo*)(local_pDependencyInfo), countPtr);
21214 }
21215 uint32_t packetSize_vkCmdSetEvent2KHR = 4 + 4 + count;
21216 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetEvent2KHR -= 8;
21217 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetEvent2KHR);
21218 uint8_t* packetBeginPtr = streamPtr;
21219 uint8_t** streamPtrPtr = &streamPtr;
21220 uint32_t opcode_vkCmdSetEvent2KHR = OP_vkCmdSetEvent2KHR;
21221 memcpy(streamPtr, &opcode_vkCmdSetEvent2KHR, sizeof(uint32_t));
21222 streamPtr += sizeof(uint32_t);
21223 memcpy(streamPtr, &packetSize_vkCmdSetEvent2KHR, sizeof(uint32_t));
21224 streamPtr += sizeof(uint32_t);
21225 if (!queueSubmitWithCommandsEnabled) {
21226 uint64_t cgen_var_0;
21227 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21228 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21229 *streamPtrPtr += 1 * 8;
21230 }
21231 uint64_t cgen_var_0;
21232 *&cgen_var_0 = get_host_u64_VkEvent((*&local_event));
21233 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21234 *streamPtrPtr += 1 * 8;
21235 reservedmarshal_VkDependencyInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21236 (VkDependencyInfo*)(local_pDependencyInfo), streamPtrPtr);
21237 ++encodeCount;
21238 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21239 pool->freeAll();
21240 stream->clearPool();
21241 }
21242 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21243 }
21244
vkCmdResetEvent2KHR(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags2 stageMask,uint32_t doLock)21245 void VkEncoder::vkCmdResetEvent2KHR(VkCommandBuffer commandBuffer, VkEvent event,
21246 VkPipelineStageFlags2 stageMask, uint32_t doLock) {
21247 (void)doLock;
21248 bool queueSubmitWithCommandsEnabled =
21249 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21250 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21251 auto stream = mImpl->stream();
21252 auto pool = mImpl->pool();
21253 VkCommandBuffer local_commandBuffer;
21254 VkEvent local_event;
21255 VkPipelineStageFlags2 local_stageMask;
21256 local_commandBuffer = commandBuffer;
21257 local_event = event;
21258 local_stageMask = stageMask;
21259 size_t count = 0;
21260 size_t* countPtr = &count;
21261 {
21262 uint64_t cgen_var_0;
21263 *countPtr += 1 * 8;
21264 uint64_t cgen_var_1;
21265 *countPtr += 1 * 8;
21266 *countPtr += sizeof(VkPipelineStageFlags2);
21267 }
21268 uint32_t packetSize_vkCmdResetEvent2KHR = 4 + 4 + count;
21269 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdResetEvent2KHR -= 8;
21270 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdResetEvent2KHR);
21271 uint8_t* packetBeginPtr = streamPtr;
21272 uint8_t** streamPtrPtr = &streamPtr;
21273 uint32_t opcode_vkCmdResetEvent2KHR = OP_vkCmdResetEvent2KHR;
21274 memcpy(streamPtr, &opcode_vkCmdResetEvent2KHR, sizeof(uint32_t));
21275 streamPtr += sizeof(uint32_t);
21276 memcpy(streamPtr, &packetSize_vkCmdResetEvent2KHR, sizeof(uint32_t));
21277 streamPtr += sizeof(uint32_t);
21278 if (!queueSubmitWithCommandsEnabled) {
21279 uint64_t cgen_var_0;
21280 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21281 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21282 *streamPtrPtr += 1 * 8;
21283 }
21284 uint64_t cgen_var_0;
21285 *&cgen_var_0 = get_host_u64_VkEvent((*&local_event));
21286 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21287 *streamPtrPtr += 1 * 8;
21288 memcpy(*streamPtrPtr, (VkPipelineStageFlags2*)&local_stageMask, sizeof(VkPipelineStageFlags2));
21289 *streamPtrPtr += sizeof(VkPipelineStageFlags2);
21290 ++encodeCount;
21291 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21292 pool->freeAll();
21293 stream->clearPool();
21294 }
21295 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21296 }
21297
vkCmdWaitEvents2KHR(VkCommandBuffer commandBuffer,uint32_t eventCount,const VkEvent * pEvents,const VkDependencyInfo * pDependencyInfos,uint32_t doLock)21298 void VkEncoder::vkCmdWaitEvents2KHR(VkCommandBuffer commandBuffer, uint32_t eventCount,
21299 const VkEvent* pEvents,
21300 const VkDependencyInfo* pDependencyInfos, uint32_t doLock) {
21301 (void)doLock;
21302 bool queueSubmitWithCommandsEnabled =
21303 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21304 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21305 auto stream = mImpl->stream();
21306 auto pool = mImpl->pool();
21307 VkCommandBuffer local_commandBuffer;
21308 uint32_t local_eventCount;
21309 VkEvent* local_pEvents;
21310 VkDependencyInfo* local_pDependencyInfos;
21311 local_commandBuffer = commandBuffer;
21312 local_eventCount = eventCount;
21313 // Avoiding deepcopy for pEvents
21314 local_pEvents = (VkEvent*)pEvents;
21315 local_pDependencyInfos = nullptr;
21316 if (pDependencyInfos) {
21317 local_pDependencyInfos =
21318 (VkDependencyInfo*)pool->alloc(((eventCount)) * sizeof(const VkDependencyInfo));
21319 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
21320 deepcopy_VkDependencyInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDependencyInfos + i,
21321 (VkDependencyInfo*)(local_pDependencyInfos + i));
21322 }
21323 }
21324 if (local_pDependencyInfos) {
21325 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
21326 transform_tohost_VkDependencyInfo(sResourceTracker,
21327 (VkDependencyInfo*)(local_pDependencyInfos + i));
21328 }
21329 }
21330 size_t count = 0;
21331 size_t* countPtr = &count;
21332 {
21333 uint64_t cgen_var_0;
21334 *countPtr += 1 * 8;
21335 *countPtr += sizeof(uint32_t);
21336 if (((eventCount))) {
21337 *countPtr += ((eventCount)) * 8;
21338 }
21339 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
21340 count_VkDependencyInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21341 (VkDependencyInfo*)(local_pDependencyInfos + i), countPtr);
21342 }
21343 }
21344 uint32_t packetSize_vkCmdWaitEvents2KHR = 4 + 4 + count;
21345 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdWaitEvents2KHR -= 8;
21346 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdWaitEvents2KHR);
21347 uint8_t* packetBeginPtr = streamPtr;
21348 uint8_t** streamPtrPtr = &streamPtr;
21349 uint32_t opcode_vkCmdWaitEvents2KHR = OP_vkCmdWaitEvents2KHR;
21350 memcpy(streamPtr, &opcode_vkCmdWaitEvents2KHR, sizeof(uint32_t));
21351 streamPtr += sizeof(uint32_t);
21352 memcpy(streamPtr, &packetSize_vkCmdWaitEvents2KHR, sizeof(uint32_t));
21353 streamPtr += sizeof(uint32_t);
21354 if (!queueSubmitWithCommandsEnabled) {
21355 uint64_t cgen_var_0;
21356 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21357 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21358 *streamPtrPtr += 1 * 8;
21359 }
21360 memcpy(*streamPtrPtr, (uint32_t*)&local_eventCount, sizeof(uint32_t));
21361 *streamPtrPtr += sizeof(uint32_t);
21362 if (((eventCount))) {
21363 uint8_t* cgen_var_0_ptr = (uint8_t*)(*streamPtrPtr);
21364 for (uint32_t k = 0; k < ((eventCount)); ++k) {
21365 uint64_t tmpval = get_host_u64_VkEvent(local_pEvents[k]);
21366 memcpy(cgen_var_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
21367 }
21368 *streamPtrPtr += 8 * ((eventCount));
21369 }
21370 for (uint32_t i = 0; i < (uint32_t)((eventCount)); ++i) {
21371 reservedmarshal_VkDependencyInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21372 (VkDependencyInfo*)(local_pDependencyInfos + i),
21373 streamPtrPtr);
21374 }
21375 ++encodeCount;
21376 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21377 pool->freeAll();
21378 stream->clearPool();
21379 }
21380 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21381 }
21382
vkCmdPipelineBarrier2KHR(VkCommandBuffer commandBuffer,const VkDependencyInfo * pDependencyInfo,uint32_t doLock)21383 void VkEncoder::vkCmdPipelineBarrier2KHR(VkCommandBuffer commandBuffer,
21384 const VkDependencyInfo* pDependencyInfo, uint32_t doLock) {
21385 (void)doLock;
21386 bool queueSubmitWithCommandsEnabled =
21387 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21388 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21389 auto stream = mImpl->stream();
21390 auto pool = mImpl->pool();
21391 VkCommandBuffer local_commandBuffer;
21392 VkDependencyInfo* local_pDependencyInfo;
21393 local_commandBuffer = commandBuffer;
21394 local_pDependencyInfo = nullptr;
21395 if (pDependencyInfo) {
21396 local_pDependencyInfo = (VkDependencyInfo*)pool->alloc(sizeof(const VkDependencyInfo));
21397 deepcopy_VkDependencyInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDependencyInfo,
21398 (VkDependencyInfo*)(local_pDependencyInfo));
21399 }
21400 if (local_pDependencyInfo) {
21401 transform_tohost_VkDependencyInfo(sResourceTracker,
21402 (VkDependencyInfo*)(local_pDependencyInfo));
21403 }
21404 size_t count = 0;
21405 size_t* countPtr = &count;
21406 {
21407 uint64_t cgen_var_0;
21408 *countPtr += 1 * 8;
21409 count_VkDependencyInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21410 (VkDependencyInfo*)(local_pDependencyInfo), countPtr);
21411 }
21412 uint32_t packetSize_vkCmdPipelineBarrier2KHR = 4 + 4 + count;
21413 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdPipelineBarrier2KHR -= 8;
21414 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdPipelineBarrier2KHR);
21415 uint8_t* packetBeginPtr = streamPtr;
21416 uint8_t** streamPtrPtr = &streamPtr;
21417 uint32_t opcode_vkCmdPipelineBarrier2KHR = OP_vkCmdPipelineBarrier2KHR;
21418 memcpy(streamPtr, &opcode_vkCmdPipelineBarrier2KHR, sizeof(uint32_t));
21419 streamPtr += sizeof(uint32_t);
21420 memcpy(streamPtr, &packetSize_vkCmdPipelineBarrier2KHR, sizeof(uint32_t));
21421 streamPtr += sizeof(uint32_t);
21422 if (!queueSubmitWithCommandsEnabled) {
21423 uint64_t cgen_var_0;
21424 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21425 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21426 *streamPtrPtr += 1 * 8;
21427 }
21428 reservedmarshal_VkDependencyInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21429 (VkDependencyInfo*)(local_pDependencyInfo), streamPtrPtr);
21430 ++encodeCount;
21431 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21432 pool->freeAll();
21433 stream->clearPool();
21434 }
21435 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21436 }
21437
vkCmdWriteTimestamp2KHR(VkCommandBuffer commandBuffer,VkPipelineStageFlags2 stage,VkQueryPool queryPool,uint32_t query,uint32_t doLock)21438 void VkEncoder::vkCmdWriteTimestamp2KHR(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage,
21439 VkQueryPool queryPool, uint32_t query, uint32_t doLock) {
21440 (void)doLock;
21441 bool queueSubmitWithCommandsEnabled =
21442 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21443 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21444 auto stream = mImpl->stream();
21445 auto pool = mImpl->pool();
21446 VkCommandBuffer local_commandBuffer;
21447 VkPipelineStageFlags2 local_stage;
21448 VkQueryPool local_queryPool;
21449 uint32_t local_query;
21450 local_commandBuffer = commandBuffer;
21451 local_stage = stage;
21452 local_queryPool = queryPool;
21453 local_query = query;
21454 size_t count = 0;
21455 size_t* countPtr = &count;
21456 {
21457 uint64_t cgen_var_0;
21458 *countPtr += 1 * 8;
21459 *countPtr += sizeof(VkPipelineStageFlags2);
21460 uint64_t cgen_var_1;
21461 *countPtr += 1 * 8;
21462 *countPtr += sizeof(uint32_t);
21463 }
21464 uint32_t packetSize_vkCmdWriteTimestamp2KHR = 4 + 4 + count;
21465 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdWriteTimestamp2KHR -= 8;
21466 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdWriteTimestamp2KHR);
21467 uint8_t* packetBeginPtr = streamPtr;
21468 uint8_t** streamPtrPtr = &streamPtr;
21469 uint32_t opcode_vkCmdWriteTimestamp2KHR = OP_vkCmdWriteTimestamp2KHR;
21470 memcpy(streamPtr, &opcode_vkCmdWriteTimestamp2KHR, sizeof(uint32_t));
21471 streamPtr += sizeof(uint32_t);
21472 memcpy(streamPtr, &packetSize_vkCmdWriteTimestamp2KHR, sizeof(uint32_t));
21473 streamPtr += sizeof(uint32_t);
21474 if (!queueSubmitWithCommandsEnabled) {
21475 uint64_t cgen_var_0;
21476 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21477 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21478 *streamPtrPtr += 1 * 8;
21479 }
21480 memcpy(*streamPtrPtr, (VkPipelineStageFlags2*)&local_stage, sizeof(VkPipelineStageFlags2));
21481 *streamPtrPtr += sizeof(VkPipelineStageFlags2);
21482 uint64_t cgen_var_0;
21483 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
21484 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21485 *streamPtrPtr += 1 * 8;
21486 memcpy(*streamPtrPtr, (uint32_t*)&local_query, sizeof(uint32_t));
21487 *streamPtrPtr += sizeof(uint32_t);
21488 ++encodeCount;
21489 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21490 pool->freeAll();
21491 stream->clearPool();
21492 }
21493 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21494 }
21495
vkQueueSubmit2KHR(VkQueue queue,uint32_t submitCount,const VkSubmitInfo2 * pSubmits,VkFence fence,uint32_t doLock)21496 VkResult VkEncoder::vkQueueSubmit2KHR(VkQueue queue, uint32_t submitCount,
21497 const VkSubmitInfo2* pSubmits, VkFence fence,
21498 uint32_t doLock) {
21499 (void)doLock;
21500 bool queueSubmitWithCommandsEnabled =
21501 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21502 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21503 auto stream = mImpl->stream();
21504 auto pool = mImpl->pool();
21505 VkQueue local_queue;
21506 uint32_t local_submitCount;
21507 VkSubmitInfo2* local_pSubmits;
21508 VkFence local_fence;
21509 local_queue = queue;
21510 local_submitCount = submitCount;
21511 local_pSubmits = nullptr;
21512 if (pSubmits) {
21513 local_pSubmits = (VkSubmitInfo2*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo2));
21514 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
21515 deepcopy_VkSubmitInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubmits + i,
21516 (VkSubmitInfo2*)(local_pSubmits + i));
21517 }
21518 }
21519 local_fence = fence;
21520 if (local_pSubmits) {
21521 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
21522 transform_tohost_VkSubmitInfo2(sResourceTracker, (VkSubmitInfo2*)(local_pSubmits + i));
21523 }
21524 }
21525 size_t count = 0;
21526 size_t* countPtr = &count;
21527 {
21528 uint64_t cgen_var_0;
21529 *countPtr += 1 * 8;
21530 *countPtr += sizeof(uint32_t);
21531 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
21532 count_VkSubmitInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21533 (VkSubmitInfo2*)(local_pSubmits + i), countPtr);
21534 }
21535 uint64_t cgen_var_1;
21536 *countPtr += 1 * 8;
21537 }
21538 uint32_t packetSize_vkQueueSubmit2KHR =
21539 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
21540 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSubmit2KHR);
21541 uint8_t* packetBeginPtr = streamPtr;
21542 uint8_t** streamPtrPtr = &streamPtr;
21543 uint32_t opcode_vkQueueSubmit2KHR = OP_vkQueueSubmit2KHR;
21544 uint32_t seqno;
21545 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
21546 memcpy(streamPtr, &opcode_vkQueueSubmit2KHR, sizeof(uint32_t));
21547 streamPtr += sizeof(uint32_t);
21548 memcpy(streamPtr, &packetSize_vkQueueSubmit2KHR, 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_VkQueue((*&local_queue));
21556 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21557 *streamPtrPtr += 1 * 8;
21558 memcpy(*streamPtrPtr, (uint32_t*)&local_submitCount, sizeof(uint32_t));
21559 *streamPtrPtr += sizeof(uint32_t);
21560 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
21561 reservedmarshal_VkSubmitInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21562 (VkSubmitInfo2*)(local_pSubmits + i), streamPtrPtr);
21563 }
21564 uint64_t cgen_var_1;
21565 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
21566 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
21567 *streamPtrPtr += 1 * 8;
21568 VkResult vkQueueSubmit2KHR_VkResult_return = (VkResult)0;
21569 stream->read(&vkQueueSubmit2KHR_VkResult_return, sizeof(VkResult));
21570 ++encodeCount;
21571 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21572 pool->freeAll();
21573 stream->clearPool();
21574 }
21575 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21576 return vkQueueSubmit2KHR_VkResult_return;
21577 }
21578
21579 #endif
21580 #ifdef VK_KHR_copy_commands2
vkCmdCopyBuffer2KHR(VkCommandBuffer commandBuffer,const VkCopyBufferInfo2 * pCopyBufferInfo,uint32_t doLock)21581 void VkEncoder::vkCmdCopyBuffer2KHR(VkCommandBuffer commandBuffer,
21582 const VkCopyBufferInfo2* pCopyBufferInfo, uint32_t doLock) {
21583 (void)doLock;
21584 bool queueSubmitWithCommandsEnabled =
21585 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21586 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21587 auto stream = mImpl->stream();
21588 auto pool = mImpl->pool();
21589 VkCommandBuffer local_commandBuffer;
21590 VkCopyBufferInfo2* local_pCopyBufferInfo;
21591 local_commandBuffer = commandBuffer;
21592 local_pCopyBufferInfo = nullptr;
21593 if (pCopyBufferInfo) {
21594 local_pCopyBufferInfo = (VkCopyBufferInfo2*)pool->alloc(sizeof(const VkCopyBufferInfo2));
21595 deepcopy_VkCopyBufferInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyBufferInfo,
21596 (VkCopyBufferInfo2*)(local_pCopyBufferInfo));
21597 }
21598 if (local_pCopyBufferInfo) {
21599 transform_tohost_VkCopyBufferInfo2(sResourceTracker,
21600 (VkCopyBufferInfo2*)(local_pCopyBufferInfo));
21601 }
21602 size_t count = 0;
21603 size_t* countPtr = &count;
21604 {
21605 uint64_t cgen_var_0;
21606 *countPtr += 1 * 8;
21607 count_VkCopyBufferInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21608 (VkCopyBufferInfo2*)(local_pCopyBufferInfo), countPtr);
21609 }
21610 uint32_t packetSize_vkCmdCopyBuffer2KHR = 4 + 4 + count;
21611 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyBuffer2KHR -= 8;
21612 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyBuffer2KHR);
21613 uint8_t* packetBeginPtr = streamPtr;
21614 uint8_t** streamPtrPtr = &streamPtr;
21615 uint32_t opcode_vkCmdCopyBuffer2KHR = OP_vkCmdCopyBuffer2KHR;
21616 memcpy(streamPtr, &opcode_vkCmdCopyBuffer2KHR, sizeof(uint32_t));
21617 streamPtr += sizeof(uint32_t);
21618 memcpy(streamPtr, &packetSize_vkCmdCopyBuffer2KHR, sizeof(uint32_t));
21619 streamPtr += sizeof(uint32_t);
21620 if (!queueSubmitWithCommandsEnabled) {
21621 uint64_t cgen_var_0;
21622 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21623 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21624 *streamPtrPtr += 1 * 8;
21625 }
21626 reservedmarshal_VkCopyBufferInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21627 (VkCopyBufferInfo2*)(local_pCopyBufferInfo), streamPtrPtr);
21628 ++encodeCount;
21629 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21630 pool->freeAll();
21631 stream->clearPool();
21632 }
21633 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21634 }
21635
vkCmdCopyImage2KHR(VkCommandBuffer commandBuffer,const VkCopyImageInfo2 * pCopyImageInfo,uint32_t doLock)21636 void VkEncoder::vkCmdCopyImage2KHR(VkCommandBuffer commandBuffer,
21637 const VkCopyImageInfo2* pCopyImageInfo, uint32_t doLock) {
21638 (void)doLock;
21639 bool queueSubmitWithCommandsEnabled =
21640 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21641 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21642 auto stream = mImpl->stream();
21643 auto pool = mImpl->pool();
21644 VkCommandBuffer local_commandBuffer;
21645 VkCopyImageInfo2* local_pCopyImageInfo;
21646 local_commandBuffer = commandBuffer;
21647 local_pCopyImageInfo = nullptr;
21648 if (pCopyImageInfo) {
21649 local_pCopyImageInfo = (VkCopyImageInfo2*)pool->alloc(sizeof(const VkCopyImageInfo2));
21650 deepcopy_VkCopyImageInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageInfo,
21651 (VkCopyImageInfo2*)(local_pCopyImageInfo));
21652 }
21653 if (local_pCopyImageInfo) {
21654 transform_tohost_VkCopyImageInfo2(sResourceTracker,
21655 (VkCopyImageInfo2*)(local_pCopyImageInfo));
21656 }
21657 size_t count = 0;
21658 size_t* countPtr = &count;
21659 {
21660 uint64_t cgen_var_0;
21661 *countPtr += 1 * 8;
21662 count_VkCopyImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21663 (VkCopyImageInfo2*)(local_pCopyImageInfo), countPtr);
21664 }
21665 uint32_t packetSize_vkCmdCopyImage2KHR = 4 + 4 + count;
21666 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyImage2KHR -= 8;
21667 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyImage2KHR);
21668 uint8_t* packetBeginPtr = streamPtr;
21669 uint8_t** streamPtrPtr = &streamPtr;
21670 uint32_t opcode_vkCmdCopyImage2KHR = OP_vkCmdCopyImage2KHR;
21671 memcpy(streamPtr, &opcode_vkCmdCopyImage2KHR, sizeof(uint32_t));
21672 streamPtr += sizeof(uint32_t);
21673 memcpy(streamPtr, &packetSize_vkCmdCopyImage2KHR, sizeof(uint32_t));
21674 streamPtr += sizeof(uint32_t);
21675 if (!queueSubmitWithCommandsEnabled) {
21676 uint64_t cgen_var_0;
21677 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21678 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21679 *streamPtrPtr += 1 * 8;
21680 }
21681 reservedmarshal_VkCopyImageInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21682 (VkCopyImageInfo2*)(local_pCopyImageInfo), streamPtrPtr);
21683 ++encodeCount;
21684 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21685 pool->freeAll();
21686 stream->clearPool();
21687 }
21688 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21689 }
21690
vkCmdCopyBufferToImage2KHR(VkCommandBuffer commandBuffer,const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo,uint32_t doLock)21691 void VkEncoder::vkCmdCopyBufferToImage2KHR(VkCommandBuffer commandBuffer,
21692 const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo,
21693 uint32_t doLock) {
21694 (void)doLock;
21695 bool queueSubmitWithCommandsEnabled =
21696 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21697 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21698 auto stream = mImpl->stream();
21699 auto pool = mImpl->pool();
21700 VkCommandBuffer local_commandBuffer;
21701 VkCopyBufferToImageInfo2* local_pCopyBufferToImageInfo;
21702 local_commandBuffer = commandBuffer;
21703 local_pCopyBufferToImageInfo = nullptr;
21704 if (pCopyBufferToImageInfo) {
21705 local_pCopyBufferToImageInfo =
21706 (VkCopyBufferToImageInfo2*)pool->alloc(sizeof(const VkCopyBufferToImageInfo2));
21707 deepcopy_VkCopyBufferToImageInfo2(
21708 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyBufferToImageInfo,
21709 (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo));
21710 }
21711 if (local_pCopyBufferToImageInfo) {
21712 transform_tohost_VkCopyBufferToImageInfo2(
21713 sResourceTracker, (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo));
21714 }
21715 size_t count = 0;
21716 size_t* countPtr = &count;
21717 {
21718 uint64_t cgen_var_0;
21719 *countPtr += 1 * 8;
21720 count_VkCopyBufferToImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21721 (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo),
21722 countPtr);
21723 }
21724 uint32_t packetSize_vkCmdCopyBufferToImage2KHR = 4 + 4 + count;
21725 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyBufferToImage2KHR -= 8;
21726 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyBufferToImage2KHR);
21727 uint8_t* packetBeginPtr = streamPtr;
21728 uint8_t** streamPtrPtr = &streamPtr;
21729 uint32_t opcode_vkCmdCopyBufferToImage2KHR = OP_vkCmdCopyBufferToImage2KHR;
21730 memcpy(streamPtr, &opcode_vkCmdCopyBufferToImage2KHR, sizeof(uint32_t));
21731 streamPtr += sizeof(uint32_t);
21732 memcpy(streamPtr, &packetSize_vkCmdCopyBufferToImage2KHR, sizeof(uint32_t));
21733 streamPtr += sizeof(uint32_t);
21734 if (!queueSubmitWithCommandsEnabled) {
21735 uint64_t cgen_var_0;
21736 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21737 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21738 *streamPtrPtr += 1 * 8;
21739 }
21740 reservedmarshal_VkCopyBufferToImageInfo2(
21741 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21742 (VkCopyBufferToImageInfo2*)(local_pCopyBufferToImageInfo), streamPtrPtr);
21743 ++encodeCount;
21744 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21745 pool->freeAll();
21746 stream->clearPool();
21747 }
21748 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21749 }
21750
vkCmdCopyImageToBuffer2KHR(VkCommandBuffer commandBuffer,const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo,uint32_t doLock)21751 void VkEncoder::vkCmdCopyImageToBuffer2KHR(VkCommandBuffer commandBuffer,
21752 const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo,
21753 uint32_t doLock) {
21754 (void)doLock;
21755 bool queueSubmitWithCommandsEnabled =
21756 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21757 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21758 auto stream = mImpl->stream();
21759 auto pool = mImpl->pool();
21760 VkCommandBuffer local_commandBuffer;
21761 VkCopyImageToBufferInfo2* local_pCopyImageToBufferInfo;
21762 local_commandBuffer = commandBuffer;
21763 local_pCopyImageToBufferInfo = nullptr;
21764 if (pCopyImageToBufferInfo) {
21765 local_pCopyImageToBufferInfo =
21766 (VkCopyImageToBufferInfo2*)pool->alloc(sizeof(const VkCopyImageToBufferInfo2));
21767 deepcopy_VkCopyImageToBufferInfo2(
21768 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageToBufferInfo,
21769 (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo));
21770 }
21771 if (local_pCopyImageToBufferInfo) {
21772 transform_tohost_VkCopyImageToBufferInfo2(
21773 sResourceTracker, (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo));
21774 }
21775 size_t count = 0;
21776 size_t* countPtr = &count;
21777 {
21778 uint64_t cgen_var_0;
21779 *countPtr += 1 * 8;
21780 count_VkCopyImageToBufferInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21781 (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo),
21782 countPtr);
21783 }
21784 uint32_t packetSize_vkCmdCopyImageToBuffer2KHR = 4 + 4 + count;
21785 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyImageToBuffer2KHR -= 8;
21786 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdCopyImageToBuffer2KHR);
21787 uint8_t* packetBeginPtr = streamPtr;
21788 uint8_t** streamPtrPtr = &streamPtr;
21789 uint32_t opcode_vkCmdCopyImageToBuffer2KHR = OP_vkCmdCopyImageToBuffer2KHR;
21790 memcpy(streamPtr, &opcode_vkCmdCopyImageToBuffer2KHR, sizeof(uint32_t));
21791 streamPtr += sizeof(uint32_t);
21792 memcpy(streamPtr, &packetSize_vkCmdCopyImageToBuffer2KHR, sizeof(uint32_t));
21793 streamPtr += sizeof(uint32_t);
21794 if (!queueSubmitWithCommandsEnabled) {
21795 uint64_t cgen_var_0;
21796 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21797 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21798 *streamPtrPtr += 1 * 8;
21799 }
21800 reservedmarshal_VkCopyImageToBufferInfo2(
21801 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21802 (VkCopyImageToBufferInfo2*)(local_pCopyImageToBufferInfo), streamPtrPtr);
21803 ++encodeCount;
21804 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21805 pool->freeAll();
21806 stream->clearPool();
21807 }
21808 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21809 }
21810
vkCmdBlitImage2KHR(VkCommandBuffer commandBuffer,const VkBlitImageInfo2 * pBlitImageInfo,uint32_t doLock)21811 void VkEncoder::vkCmdBlitImage2KHR(VkCommandBuffer commandBuffer,
21812 const VkBlitImageInfo2* pBlitImageInfo, uint32_t doLock) {
21813 (void)doLock;
21814 bool queueSubmitWithCommandsEnabled =
21815 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21816 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21817 auto stream = mImpl->stream();
21818 auto pool = mImpl->pool();
21819 VkCommandBuffer local_commandBuffer;
21820 VkBlitImageInfo2* local_pBlitImageInfo;
21821 local_commandBuffer = commandBuffer;
21822 local_pBlitImageInfo = nullptr;
21823 if (pBlitImageInfo) {
21824 local_pBlitImageInfo = (VkBlitImageInfo2*)pool->alloc(sizeof(const VkBlitImageInfo2));
21825 deepcopy_VkBlitImageInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBlitImageInfo,
21826 (VkBlitImageInfo2*)(local_pBlitImageInfo));
21827 }
21828 if (local_pBlitImageInfo) {
21829 transform_tohost_VkBlitImageInfo2(sResourceTracker,
21830 (VkBlitImageInfo2*)(local_pBlitImageInfo));
21831 }
21832 size_t count = 0;
21833 size_t* countPtr = &count;
21834 {
21835 uint64_t cgen_var_0;
21836 *countPtr += 1 * 8;
21837 count_VkBlitImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21838 (VkBlitImageInfo2*)(local_pBlitImageInfo), countPtr);
21839 }
21840 uint32_t packetSize_vkCmdBlitImage2KHR = 4 + 4 + count;
21841 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBlitImage2KHR -= 8;
21842 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBlitImage2KHR);
21843 uint8_t* packetBeginPtr = streamPtr;
21844 uint8_t** streamPtrPtr = &streamPtr;
21845 uint32_t opcode_vkCmdBlitImage2KHR = OP_vkCmdBlitImage2KHR;
21846 memcpy(streamPtr, &opcode_vkCmdBlitImage2KHR, sizeof(uint32_t));
21847 streamPtr += sizeof(uint32_t);
21848 memcpy(streamPtr, &packetSize_vkCmdBlitImage2KHR, sizeof(uint32_t));
21849 streamPtr += sizeof(uint32_t);
21850 if (!queueSubmitWithCommandsEnabled) {
21851 uint64_t cgen_var_0;
21852 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21853 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21854 *streamPtrPtr += 1 * 8;
21855 }
21856 reservedmarshal_VkBlitImageInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21857 (VkBlitImageInfo2*)(local_pBlitImageInfo), streamPtrPtr);
21858 ++encodeCount;
21859 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21860 pool->freeAll();
21861 stream->clearPool();
21862 }
21863 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21864 }
21865
vkCmdResolveImage2KHR(VkCommandBuffer commandBuffer,const VkResolveImageInfo2 * pResolveImageInfo,uint32_t doLock)21866 void VkEncoder::vkCmdResolveImage2KHR(VkCommandBuffer commandBuffer,
21867 const VkResolveImageInfo2* pResolveImageInfo,
21868 uint32_t doLock) {
21869 (void)doLock;
21870 bool queueSubmitWithCommandsEnabled =
21871 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21872 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21873 auto stream = mImpl->stream();
21874 auto pool = mImpl->pool();
21875 VkCommandBuffer local_commandBuffer;
21876 VkResolveImageInfo2* local_pResolveImageInfo;
21877 local_commandBuffer = commandBuffer;
21878 local_pResolveImageInfo = nullptr;
21879 if (pResolveImageInfo) {
21880 local_pResolveImageInfo =
21881 (VkResolveImageInfo2*)pool->alloc(sizeof(const VkResolveImageInfo2));
21882 deepcopy_VkResolveImageInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pResolveImageInfo,
21883 (VkResolveImageInfo2*)(local_pResolveImageInfo));
21884 }
21885 if (local_pResolveImageInfo) {
21886 transform_tohost_VkResolveImageInfo2(sResourceTracker,
21887 (VkResolveImageInfo2*)(local_pResolveImageInfo));
21888 }
21889 size_t count = 0;
21890 size_t* countPtr = &count;
21891 {
21892 uint64_t cgen_var_0;
21893 *countPtr += 1 * 8;
21894 count_VkResolveImageInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21895 (VkResolveImageInfo2*)(local_pResolveImageInfo), countPtr);
21896 }
21897 uint32_t packetSize_vkCmdResolveImage2KHR = 4 + 4 + count;
21898 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdResolveImage2KHR -= 8;
21899 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdResolveImage2KHR);
21900 uint8_t* packetBeginPtr = streamPtr;
21901 uint8_t** streamPtrPtr = &streamPtr;
21902 uint32_t opcode_vkCmdResolveImage2KHR = OP_vkCmdResolveImage2KHR;
21903 memcpy(streamPtr, &opcode_vkCmdResolveImage2KHR, sizeof(uint32_t));
21904 streamPtr += sizeof(uint32_t);
21905 memcpy(streamPtr, &packetSize_vkCmdResolveImage2KHR, sizeof(uint32_t));
21906 streamPtr += sizeof(uint32_t);
21907 if (!queueSubmitWithCommandsEnabled) {
21908 uint64_t cgen_var_0;
21909 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
21910 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21911 *streamPtrPtr += 1 * 8;
21912 }
21913 reservedmarshal_VkResolveImageInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21914 (VkResolveImageInfo2*)(local_pResolveImageInfo),
21915 streamPtrPtr);
21916 ++encodeCount;
21917 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21918 pool->freeAll();
21919 stream->clearPool();
21920 }
21921 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21922 }
21923
21924 #endif
21925 #ifdef VK_KHR_maintenance4
vkGetDeviceBufferMemoryRequirementsKHR(VkDevice device,const VkDeviceBufferMemoryRequirements * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)21926 void VkEncoder::vkGetDeviceBufferMemoryRequirementsKHR(
21927 VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo,
21928 VkMemoryRequirements2* pMemoryRequirements, uint32_t doLock) {
21929 (void)doLock;
21930 bool queueSubmitWithCommandsEnabled =
21931 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
21932 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
21933 auto stream = mImpl->stream();
21934 auto pool = mImpl->pool();
21935 VkDevice local_device;
21936 VkDeviceBufferMemoryRequirements* local_pInfo;
21937 local_device = device;
21938 local_pInfo = nullptr;
21939 if (pInfo) {
21940 local_pInfo = (VkDeviceBufferMemoryRequirements*)pool->alloc(
21941 sizeof(const VkDeviceBufferMemoryRequirements));
21942 deepcopy_VkDeviceBufferMemoryRequirements(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
21943 (VkDeviceBufferMemoryRequirements*)(local_pInfo));
21944 }
21945 if (local_pInfo) {
21946 transform_tohost_VkDeviceBufferMemoryRequirements(
21947 sResourceTracker, (VkDeviceBufferMemoryRequirements*)(local_pInfo));
21948 }
21949 size_t count = 0;
21950 size_t* countPtr = &count;
21951 {
21952 uint64_t cgen_var_0;
21953 *countPtr += 1 * 8;
21954 count_VkDeviceBufferMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21955 (VkDeviceBufferMemoryRequirements*)(local_pInfo),
21956 countPtr);
21957 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
21958 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
21959 }
21960 uint32_t packetSize_vkGetDeviceBufferMemoryRequirementsKHR =
21961 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
21962 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceBufferMemoryRequirementsKHR);
21963 uint8_t* packetBeginPtr = streamPtr;
21964 uint8_t** streamPtrPtr = &streamPtr;
21965 uint32_t opcode_vkGetDeviceBufferMemoryRequirementsKHR =
21966 OP_vkGetDeviceBufferMemoryRequirementsKHR;
21967 uint32_t seqno;
21968 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
21969 memcpy(streamPtr, &opcode_vkGetDeviceBufferMemoryRequirementsKHR, sizeof(uint32_t));
21970 streamPtr += sizeof(uint32_t);
21971 memcpy(streamPtr, &packetSize_vkGetDeviceBufferMemoryRequirementsKHR, sizeof(uint32_t));
21972 streamPtr += sizeof(uint32_t);
21973 if (queueSubmitWithCommandsEnabled) {
21974 memcpy(streamPtr, &seqno, sizeof(uint32_t));
21975 streamPtr += sizeof(uint32_t);
21976 }
21977 uint64_t cgen_var_0;
21978 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
21979 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
21980 *streamPtrPtr += 1 * 8;
21981 reservedmarshal_VkDeviceBufferMemoryRequirements(
21982 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceBufferMemoryRequirements*)(local_pInfo),
21983 streamPtrPtr);
21984 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21985 (VkMemoryRequirements2*)(pMemoryRequirements),
21986 streamPtrPtr);
21987 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
21988 (VkMemoryRequirements2*)(pMemoryRequirements));
21989 if (pMemoryRequirements) {
21990 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
21991 (VkMemoryRequirements2*)(pMemoryRequirements));
21992 }
21993 ++encodeCount;
21994 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
21995 pool->freeAll();
21996 stream->clearPool();
21997 }
21998 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
21999 }
22000
vkGetDeviceImageMemoryRequirementsKHR(VkDevice device,const VkDeviceImageMemoryRequirements * pInfo,VkMemoryRequirements2 * pMemoryRequirements,uint32_t doLock)22001 void VkEncoder::vkGetDeviceImageMemoryRequirementsKHR(VkDevice device,
22002 const VkDeviceImageMemoryRequirements* pInfo,
22003 VkMemoryRequirements2* pMemoryRequirements,
22004 uint32_t doLock) {
22005 (void)doLock;
22006 bool queueSubmitWithCommandsEnabled =
22007 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22008 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22009 auto stream = mImpl->stream();
22010 auto pool = mImpl->pool();
22011 VkDevice local_device;
22012 VkDeviceImageMemoryRequirements* local_pInfo;
22013 local_device = device;
22014 local_pInfo = nullptr;
22015 if (pInfo) {
22016 local_pInfo = (VkDeviceImageMemoryRequirements*)pool->alloc(
22017 sizeof(const VkDeviceImageMemoryRequirements));
22018 deepcopy_VkDeviceImageMemoryRequirements(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
22019 (VkDeviceImageMemoryRequirements*)(local_pInfo));
22020 }
22021 if (local_pInfo) {
22022 transform_tohost_VkDeviceImageMemoryRequirements(
22023 sResourceTracker, (VkDeviceImageMemoryRequirements*)(local_pInfo));
22024 }
22025 size_t count = 0;
22026 size_t* countPtr = &count;
22027 {
22028 uint64_t cgen_var_0;
22029 *countPtr += 1 * 8;
22030 count_VkDeviceImageMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22031 (VkDeviceImageMemoryRequirements*)(local_pInfo),
22032 countPtr);
22033 count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22034 (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
22035 }
22036 uint32_t packetSize_vkGetDeviceImageMemoryRequirementsKHR =
22037 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
22038 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceImageMemoryRequirementsKHR);
22039 uint8_t* packetBeginPtr = streamPtr;
22040 uint8_t** streamPtrPtr = &streamPtr;
22041 uint32_t opcode_vkGetDeviceImageMemoryRequirementsKHR =
22042 OP_vkGetDeviceImageMemoryRequirementsKHR;
22043 uint32_t seqno;
22044 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
22045 memcpy(streamPtr, &opcode_vkGetDeviceImageMemoryRequirementsKHR, sizeof(uint32_t));
22046 streamPtr += sizeof(uint32_t);
22047 memcpy(streamPtr, &packetSize_vkGetDeviceImageMemoryRequirementsKHR, sizeof(uint32_t));
22048 streamPtr += sizeof(uint32_t);
22049 if (queueSubmitWithCommandsEnabled) {
22050 memcpy(streamPtr, &seqno, sizeof(uint32_t));
22051 streamPtr += sizeof(uint32_t);
22052 }
22053 uint64_t cgen_var_0;
22054 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
22055 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22056 *streamPtrPtr += 1 * 8;
22057 reservedmarshal_VkDeviceImageMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22058 (VkDeviceImageMemoryRequirements*)(local_pInfo),
22059 streamPtrPtr);
22060 reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22061 (VkMemoryRequirements2*)(pMemoryRequirements),
22062 streamPtrPtr);
22063 unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22064 (VkMemoryRequirements2*)(pMemoryRequirements));
22065 if (pMemoryRequirements) {
22066 transform_fromhost_VkMemoryRequirements2(sResourceTracker,
22067 (VkMemoryRequirements2*)(pMemoryRequirements));
22068 }
22069 ++encodeCount;
22070 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22071 pool->freeAll();
22072 stream->clearPool();
22073 }
22074 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22075 }
22076
vkGetDeviceImageSparseMemoryRequirementsKHR(VkDevice device,const VkDeviceImageMemoryRequirements * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements,uint32_t doLock)22077 void VkEncoder::vkGetDeviceImageSparseMemoryRequirementsKHR(
22078 VkDevice device, const VkDeviceImageMemoryRequirements* pInfo,
22079 uint32_t* pSparseMemoryRequirementCount,
22080 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements, uint32_t doLock) {
22081 (void)doLock;
22082 bool queueSubmitWithCommandsEnabled =
22083 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22084 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22085 auto stream = mImpl->stream();
22086 auto pool = mImpl->pool();
22087 VkDevice local_device;
22088 VkDeviceImageMemoryRequirements* local_pInfo;
22089 local_device = device;
22090 local_pInfo = nullptr;
22091 if (pInfo) {
22092 local_pInfo = (VkDeviceImageMemoryRequirements*)pool->alloc(
22093 sizeof(const VkDeviceImageMemoryRequirements));
22094 deepcopy_VkDeviceImageMemoryRequirements(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
22095 (VkDeviceImageMemoryRequirements*)(local_pInfo));
22096 }
22097 if (local_pInfo) {
22098 transform_tohost_VkDeviceImageMemoryRequirements(
22099 sResourceTracker, (VkDeviceImageMemoryRequirements*)(local_pInfo));
22100 }
22101 size_t count = 0;
22102 size_t* countPtr = &count;
22103 {
22104 uint64_t cgen_var_0;
22105 *countPtr += 1 * 8;
22106 count_VkDeviceImageMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22107 (VkDeviceImageMemoryRequirements*)(local_pInfo),
22108 countPtr);
22109 // WARNING PTR CHECK
22110 *countPtr += 8;
22111 if (pSparseMemoryRequirementCount) {
22112 *countPtr += sizeof(uint32_t);
22113 }
22114 // WARNING PTR CHECK
22115 *countPtr += 8;
22116 if (pSparseMemoryRequirements) {
22117 if (pSparseMemoryRequirementCount) {
22118 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
22119 count_VkSparseImageMemoryRequirements2(
22120 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22121 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i),
22122 countPtr);
22123 }
22124 }
22125 }
22126 }
22127 uint32_t packetSize_vkGetDeviceImageSparseMemoryRequirementsKHR =
22128 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
22129 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceImageSparseMemoryRequirementsKHR);
22130 uint8_t* packetBeginPtr = streamPtr;
22131 uint8_t** streamPtrPtr = &streamPtr;
22132 uint32_t opcode_vkGetDeviceImageSparseMemoryRequirementsKHR =
22133 OP_vkGetDeviceImageSparseMemoryRequirementsKHR;
22134 uint32_t seqno;
22135 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
22136 memcpy(streamPtr, &opcode_vkGetDeviceImageSparseMemoryRequirementsKHR, sizeof(uint32_t));
22137 streamPtr += sizeof(uint32_t);
22138 memcpy(streamPtr, &packetSize_vkGetDeviceImageSparseMemoryRequirementsKHR, sizeof(uint32_t));
22139 streamPtr += sizeof(uint32_t);
22140 if (queueSubmitWithCommandsEnabled) {
22141 memcpy(streamPtr, &seqno, sizeof(uint32_t));
22142 streamPtr += sizeof(uint32_t);
22143 }
22144 uint64_t cgen_var_0;
22145 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
22146 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22147 *streamPtrPtr += 1 * 8;
22148 reservedmarshal_VkDeviceImageMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22149 (VkDeviceImageMemoryRequirements*)(local_pInfo),
22150 streamPtrPtr);
22151 // WARNING PTR CHECK
22152 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
22153 memcpy((*streamPtrPtr), &cgen_var_1, 8);
22154 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
22155 *streamPtrPtr += 8;
22156 if (pSparseMemoryRequirementCount) {
22157 memcpy(*streamPtrPtr, (uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
22158 *streamPtrPtr += sizeof(uint32_t);
22159 }
22160 // WARNING PTR CHECK
22161 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
22162 memcpy((*streamPtrPtr), &cgen_var_2, 8);
22163 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
22164 *streamPtrPtr += 8;
22165 if (pSparseMemoryRequirements) {
22166 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
22167 reservedmarshal_VkSparseImageMemoryRequirements2(
22168 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22169 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), streamPtrPtr);
22170 }
22171 }
22172 // WARNING PTR CHECK
22173 uint32_t* check_pSparseMemoryRequirementCount;
22174 check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
22175 if (pSparseMemoryRequirementCount) {
22176 if (!(check_pSparseMemoryRequirementCount)) {
22177 fprintf(stderr,
22178 "fatal: pSparseMemoryRequirementCount inconsistent between guest and host\n");
22179 }
22180 stream->read((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
22181 }
22182 // WARNING PTR CHECK
22183 VkSparseImageMemoryRequirements2* check_pSparseMemoryRequirements;
22184 check_pSparseMemoryRequirements =
22185 (VkSparseImageMemoryRequirements2*)(uintptr_t)stream->getBe64();
22186 if (pSparseMemoryRequirements) {
22187 if (!(check_pSparseMemoryRequirements)) {
22188 fprintf(stderr,
22189 "fatal: pSparseMemoryRequirements inconsistent between guest and host\n");
22190 }
22191 if (pSparseMemoryRequirementCount) {
22192 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
22193 unmarshal_VkSparseImageMemoryRequirements2(
22194 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22195 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
22196 }
22197 }
22198 }
22199 if (pSparseMemoryRequirementCount) {
22200 if (pSparseMemoryRequirements) {
22201 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i) {
22202 transform_fromhost_VkSparseImageMemoryRequirements2(
22203 sResourceTracker,
22204 (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
22205 }
22206 }
22207 }
22208 ++encodeCount;
22209 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22210 pool->freeAll();
22211 stream->clearPool();
22212 }
22213 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22214 }
22215
22216 #endif
22217 #ifdef VK_KHR_maintenance5
vkCmdBindIndexBuffer2KHR(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkDeviceSize size,VkIndexType indexType,uint32_t doLock)22218 void VkEncoder::vkCmdBindIndexBuffer2KHR(VkCommandBuffer commandBuffer, VkBuffer buffer,
22219 VkDeviceSize offset, VkDeviceSize size,
22220 VkIndexType indexType, uint32_t doLock) {
22221 (void)doLock;
22222 bool queueSubmitWithCommandsEnabled =
22223 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22224 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22225 auto stream = mImpl->stream();
22226 auto pool = mImpl->pool();
22227 VkCommandBuffer local_commandBuffer;
22228 VkBuffer local_buffer;
22229 VkDeviceSize local_offset;
22230 VkDeviceSize local_size;
22231 VkIndexType local_indexType;
22232 local_commandBuffer = commandBuffer;
22233 local_buffer = buffer;
22234 local_offset = offset;
22235 local_size = size;
22236 local_indexType = indexType;
22237 size_t count = 0;
22238 size_t* countPtr = &count;
22239 {
22240 uint64_t cgen_var_0;
22241 *countPtr += 1 * 8;
22242 uint64_t cgen_var_1;
22243 *countPtr += 1 * 8;
22244 *countPtr += sizeof(VkDeviceSize);
22245 *countPtr += sizeof(VkDeviceSize);
22246 *countPtr += sizeof(VkIndexType);
22247 }
22248 uint32_t packetSize_vkCmdBindIndexBuffer2KHR = 4 + 4 + count;
22249 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindIndexBuffer2KHR -= 8;
22250 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindIndexBuffer2KHR);
22251 uint8_t* packetBeginPtr = streamPtr;
22252 uint8_t** streamPtrPtr = &streamPtr;
22253 uint32_t opcode_vkCmdBindIndexBuffer2KHR = OP_vkCmdBindIndexBuffer2KHR;
22254 memcpy(streamPtr, &opcode_vkCmdBindIndexBuffer2KHR, sizeof(uint32_t));
22255 streamPtr += sizeof(uint32_t);
22256 memcpy(streamPtr, &packetSize_vkCmdBindIndexBuffer2KHR, sizeof(uint32_t));
22257 streamPtr += sizeof(uint32_t);
22258 if (!queueSubmitWithCommandsEnabled) {
22259 uint64_t cgen_var_0;
22260 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22261 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22262 *streamPtrPtr += 1 * 8;
22263 }
22264 uint64_t cgen_var_0;
22265 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_buffer));
22266 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22267 *streamPtrPtr += 1 * 8;
22268 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
22269 *streamPtrPtr += sizeof(VkDeviceSize);
22270 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_size, sizeof(VkDeviceSize));
22271 *streamPtrPtr += sizeof(VkDeviceSize);
22272 memcpy(*streamPtrPtr, (VkIndexType*)&local_indexType, sizeof(VkIndexType));
22273 *streamPtrPtr += sizeof(VkIndexType);
22274 ++encodeCount;
22275 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22276 pool->freeAll();
22277 stream->clearPool();
22278 }
22279 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22280 }
22281
vkGetRenderingAreaGranularityKHR(VkDevice device,const VkRenderingAreaInfo * pRenderingAreaInfo,VkExtent2D * pGranularity,uint32_t doLock)22282 void VkEncoder::vkGetRenderingAreaGranularityKHR(VkDevice device,
22283 const VkRenderingAreaInfo* pRenderingAreaInfo,
22284 VkExtent2D* pGranularity, uint32_t doLock) {
22285 (void)doLock;
22286 bool queueSubmitWithCommandsEnabled =
22287 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22288 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22289 auto stream = mImpl->stream();
22290 auto pool = mImpl->pool();
22291 VkDevice local_device;
22292 VkRenderingAreaInfo* local_pRenderingAreaInfo;
22293 local_device = device;
22294 local_pRenderingAreaInfo = nullptr;
22295 if (pRenderingAreaInfo) {
22296 local_pRenderingAreaInfo =
22297 (VkRenderingAreaInfo*)pool->alloc(sizeof(const VkRenderingAreaInfo));
22298 deepcopy_VkRenderingAreaInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderingAreaInfo,
22299 (VkRenderingAreaInfo*)(local_pRenderingAreaInfo));
22300 }
22301 if (local_pRenderingAreaInfo) {
22302 transform_tohost_VkRenderingAreaInfo(sResourceTracker,
22303 (VkRenderingAreaInfo*)(local_pRenderingAreaInfo));
22304 }
22305 size_t count = 0;
22306 size_t* countPtr = &count;
22307 {
22308 uint64_t cgen_var_0;
22309 *countPtr += 1 * 8;
22310 count_VkRenderingAreaInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22311 (VkRenderingAreaInfo*)(local_pRenderingAreaInfo), countPtr);
22312 count_VkExtent2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity),
22313 countPtr);
22314 }
22315 uint32_t packetSize_vkGetRenderingAreaGranularityKHR =
22316 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
22317 uint8_t* streamPtr = stream->reserve(packetSize_vkGetRenderingAreaGranularityKHR);
22318 uint8_t* packetBeginPtr = streamPtr;
22319 uint8_t** streamPtrPtr = &streamPtr;
22320 uint32_t opcode_vkGetRenderingAreaGranularityKHR = OP_vkGetRenderingAreaGranularityKHR;
22321 uint32_t seqno;
22322 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
22323 memcpy(streamPtr, &opcode_vkGetRenderingAreaGranularityKHR, sizeof(uint32_t));
22324 streamPtr += sizeof(uint32_t);
22325 memcpy(streamPtr, &packetSize_vkGetRenderingAreaGranularityKHR, sizeof(uint32_t));
22326 streamPtr += sizeof(uint32_t);
22327 if (queueSubmitWithCommandsEnabled) {
22328 memcpy(streamPtr, &seqno, sizeof(uint32_t));
22329 streamPtr += sizeof(uint32_t);
22330 }
22331 uint64_t cgen_var_0;
22332 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
22333 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22334 *streamPtrPtr += 1 * 8;
22335 reservedmarshal_VkRenderingAreaInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22336 (VkRenderingAreaInfo*)(local_pRenderingAreaInfo),
22337 streamPtrPtr);
22338 reservedmarshal_VkExtent2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity),
22339 streamPtrPtr);
22340 unmarshal_VkExtent2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity));
22341 if (pGranularity) {
22342 transform_fromhost_VkExtent2D(sResourceTracker, (VkExtent2D*)(pGranularity));
22343 }
22344 ++encodeCount;
22345 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22346 pool->freeAll();
22347 stream->clearPool();
22348 }
22349 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22350 }
22351
vkGetDeviceImageSubresourceLayoutKHR(VkDevice device,const VkDeviceImageSubresourceInfo * pInfo,VkSubresourceLayout2 * pLayout,uint32_t doLock)22352 void VkEncoder::vkGetDeviceImageSubresourceLayoutKHR(VkDevice device,
22353 const VkDeviceImageSubresourceInfo* pInfo,
22354 VkSubresourceLayout2* pLayout,
22355 uint32_t doLock) {
22356 (void)doLock;
22357 bool queueSubmitWithCommandsEnabled =
22358 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22359 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22360 auto stream = mImpl->stream();
22361 auto pool = mImpl->pool();
22362 VkDevice local_device;
22363 VkDeviceImageSubresourceInfo* local_pInfo;
22364 local_device = device;
22365 local_pInfo = nullptr;
22366 if (pInfo) {
22367 local_pInfo =
22368 (VkDeviceImageSubresourceInfo*)pool->alloc(sizeof(const VkDeviceImageSubresourceInfo));
22369 deepcopy_VkDeviceImageSubresourceInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo,
22370 (VkDeviceImageSubresourceInfo*)(local_pInfo));
22371 }
22372 if (local_pInfo) {
22373 transform_tohost_VkDeviceImageSubresourceInfo(sResourceTracker,
22374 (VkDeviceImageSubresourceInfo*)(local_pInfo));
22375 }
22376 size_t count = 0;
22377 size_t* countPtr = &count;
22378 {
22379 uint64_t cgen_var_0;
22380 *countPtr += 1 * 8;
22381 count_VkDeviceImageSubresourceInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22382 (VkDeviceImageSubresourceInfo*)(local_pInfo), countPtr);
22383 count_VkSubresourceLayout2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22384 (VkSubresourceLayout2*)(pLayout), countPtr);
22385 }
22386 uint32_t packetSize_vkGetDeviceImageSubresourceLayoutKHR =
22387 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
22388 uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceImageSubresourceLayoutKHR);
22389 uint8_t* packetBeginPtr = streamPtr;
22390 uint8_t** streamPtrPtr = &streamPtr;
22391 uint32_t opcode_vkGetDeviceImageSubresourceLayoutKHR = OP_vkGetDeviceImageSubresourceLayoutKHR;
22392 uint32_t seqno;
22393 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
22394 memcpy(streamPtr, &opcode_vkGetDeviceImageSubresourceLayoutKHR, sizeof(uint32_t));
22395 streamPtr += sizeof(uint32_t);
22396 memcpy(streamPtr, &packetSize_vkGetDeviceImageSubresourceLayoutKHR, sizeof(uint32_t));
22397 streamPtr += sizeof(uint32_t);
22398 if (queueSubmitWithCommandsEnabled) {
22399 memcpy(streamPtr, &seqno, sizeof(uint32_t));
22400 streamPtr += sizeof(uint32_t);
22401 }
22402 uint64_t cgen_var_0;
22403 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
22404 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22405 *streamPtrPtr += 1 * 8;
22406 reservedmarshal_VkDeviceImageSubresourceInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22407 (VkDeviceImageSubresourceInfo*)(local_pInfo),
22408 streamPtrPtr);
22409 reservedmarshal_VkSubresourceLayout2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22410 (VkSubresourceLayout2*)(pLayout), streamPtrPtr);
22411 unmarshal_VkSubresourceLayout2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22412 (VkSubresourceLayout2*)(pLayout));
22413 if (pLayout) {
22414 transform_fromhost_VkSubresourceLayout2(sResourceTracker, (VkSubresourceLayout2*)(pLayout));
22415 }
22416 ++encodeCount;
22417 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22418 pool->freeAll();
22419 stream->clearPool();
22420 }
22421 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22422 }
22423
vkGetImageSubresourceLayout2KHR(VkDevice device,VkImage image,const VkImageSubresource2 * pSubresource,VkSubresourceLayout2 * pLayout,uint32_t doLock)22424 void VkEncoder::vkGetImageSubresourceLayout2KHR(VkDevice device, VkImage image,
22425 const VkImageSubresource2* pSubresource,
22426 VkSubresourceLayout2* pLayout, uint32_t doLock) {
22427 (void)doLock;
22428 bool queueSubmitWithCommandsEnabled =
22429 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22430 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22431 auto stream = mImpl->stream();
22432 auto pool = mImpl->pool();
22433 VkDevice local_device;
22434 VkImage local_image;
22435 VkImageSubresource2* local_pSubresource;
22436 local_device = device;
22437 local_image = image;
22438 local_pSubresource = nullptr;
22439 if (pSubresource) {
22440 local_pSubresource = (VkImageSubresource2*)pool->alloc(sizeof(const VkImageSubresource2));
22441 deepcopy_VkImageSubresource2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubresource,
22442 (VkImageSubresource2*)(local_pSubresource));
22443 }
22444 if (local_pSubresource) {
22445 transform_tohost_VkImageSubresource2(sResourceTracker,
22446 (VkImageSubresource2*)(local_pSubresource));
22447 }
22448 size_t count = 0;
22449 size_t* countPtr = &count;
22450 {
22451 uint64_t cgen_var_0;
22452 *countPtr += 1 * 8;
22453 uint64_t cgen_var_1;
22454 *countPtr += 1 * 8;
22455 count_VkImageSubresource2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22456 (VkImageSubresource2*)(local_pSubresource), countPtr);
22457 count_VkSubresourceLayout2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
22458 (VkSubresourceLayout2*)(pLayout), countPtr);
22459 }
22460 uint32_t packetSize_vkGetImageSubresourceLayout2KHR =
22461 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
22462 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageSubresourceLayout2KHR);
22463 uint8_t* packetBeginPtr = streamPtr;
22464 uint8_t** streamPtrPtr = &streamPtr;
22465 uint32_t opcode_vkGetImageSubresourceLayout2KHR = OP_vkGetImageSubresourceLayout2KHR;
22466 uint32_t seqno;
22467 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
22468 memcpy(streamPtr, &opcode_vkGetImageSubresourceLayout2KHR, sizeof(uint32_t));
22469 streamPtr += sizeof(uint32_t);
22470 memcpy(streamPtr, &packetSize_vkGetImageSubresourceLayout2KHR, sizeof(uint32_t));
22471 streamPtr += sizeof(uint32_t);
22472 if (queueSubmitWithCommandsEnabled) {
22473 memcpy(streamPtr, &seqno, sizeof(uint32_t));
22474 streamPtr += sizeof(uint32_t);
22475 }
22476 uint64_t cgen_var_0;
22477 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
22478 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22479 *streamPtrPtr += 1 * 8;
22480 uint64_t cgen_var_1;
22481 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
22482 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
22483 *streamPtrPtr += 1 * 8;
22484 reservedmarshal_VkImageSubresource2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22485 (VkImageSubresource2*)(local_pSubresource), streamPtrPtr);
22486 reservedmarshal_VkSubresourceLayout2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22487 (VkSubresourceLayout2*)(pLayout), streamPtrPtr);
22488 unmarshal_VkSubresourceLayout2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
22489 (VkSubresourceLayout2*)(pLayout));
22490 if (pLayout) {
22491 transform_fromhost_VkSubresourceLayout2(sResourceTracker, (VkSubresourceLayout2*)(pLayout));
22492 }
22493 ++encodeCount;
22494 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22495 pool->freeAll();
22496 stream->clearPool();
22497 }
22498 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22499 }
22500
22501 #endif
22502 #ifdef VK_KHR_line_rasterization
vkCmdSetLineStippleKHR(VkCommandBuffer commandBuffer,uint32_t lineStippleFactor,uint16_t lineStipplePattern,uint32_t doLock)22503 void VkEncoder::vkCmdSetLineStippleKHR(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor,
22504 uint16_t lineStipplePattern, uint32_t doLock) {
22505 (void)doLock;
22506 bool queueSubmitWithCommandsEnabled =
22507 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22508 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22509 auto stream = mImpl->stream();
22510 auto pool = mImpl->pool();
22511 VkCommandBuffer local_commandBuffer;
22512 uint32_t local_lineStippleFactor;
22513 uint16_t local_lineStipplePattern;
22514 local_commandBuffer = commandBuffer;
22515 local_lineStippleFactor = lineStippleFactor;
22516 local_lineStipplePattern = lineStipplePattern;
22517 size_t count = 0;
22518 size_t* countPtr = &count;
22519 {
22520 uint64_t cgen_var_0;
22521 *countPtr += 1 * 8;
22522 *countPtr += sizeof(uint32_t);
22523 *countPtr += sizeof(uint16_t);
22524 }
22525 uint32_t packetSize_vkCmdSetLineStippleKHR = 4 + 4 + count;
22526 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetLineStippleKHR -= 8;
22527 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetLineStippleKHR);
22528 uint8_t* packetBeginPtr = streamPtr;
22529 uint8_t** streamPtrPtr = &streamPtr;
22530 uint32_t opcode_vkCmdSetLineStippleKHR = OP_vkCmdSetLineStippleKHR;
22531 memcpy(streamPtr, &opcode_vkCmdSetLineStippleKHR, sizeof(uint32_t));
22532 streamPtr += sizeof(uint32_t);
22533 memcpy(streamPtr, &packetSize_vkCmdSetLineStippleKHR, sizeof(uint32_t));
22534 streamPtr += sizeof(uint32_t);
22535 if (!queueSubmitWithCommandsEnabled) {
22536 uint64_t cgen_var_0;
22537 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22538 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22539 *streamPtrPtr += 1 * 8;
22540 }
22541 memcpy(*streamPtrPtr, (uint32_t*)&local_lineStippleFactor, sizeof(uint32_t));
22542 *streamPtrPtr += sizeof(uint32_t);
22543 memcpy(*streamPtrPtr, (uint16_t*)&local_lineStipplePattern, sizeof(uint16_t));
22544 *streamPtrPtr += sizeof(uint16_t);
22545 ++encodeCount;
22546 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22547 pool->freeAll();
22548 stream->clearPool();
22549 }
22550 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22551 }
22552
22553 #endif
22554 #ifdef VK_ANDROID_native_buffer
vkGetSwapchainGrallocUsageANDROID(VkDevice device,VkFormat format,VkImageUsageFlags imageUsage,int * grallocUsage,uint32_t doLock)22555 VkResult VkEncoder::vkGetSwapchainGrallocUsageANDROID(VkDevice device, VkFormat format,
22556 VkImageUsageFlags imageUsage,
22557 int* grallocUsage, uint32_t doLock) {
22558 (void)doLock;
22559 bool queueSubmitWithCommandsEnabled =
22560 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22561 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22562 auto stream = mImpl->stream();
22563 auto pool = mImpl->pool();
22564 VkDevice local_device;
22565 VkFormat local_format;
22566 VkImageUsageFlags local_imageUsage;
22567 local_device = device;
22568 local_format = format;
22569 local_imageUsage = imageUsage;
22570 size_t count = 0;
22571 size_t* countPtr = &count;
22572 {
22573 uint64_t cgen_var_0;
22574 *countPtr += 1 * 8;
22575 *countPtr += sizeof(VkFormat);
22576 *countPtr += sizeof(VkImageUsageFlags);
22577 *countPtr += sizeof(int);
22578 }
22579 uint32_t packetSize_vkGetSwapchainGrallocUsageANDROID =
22580 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
22581 uint8_t* streamPtr = stream->reserve(packetSize_vkGetSwapchainGrallocUsageANDROID);
22582 uint8_t* packetBeginPtr = streamPtr;
22583 uint8_t** streamPtrPtr = &streamPtr;
22584 uint32_t opcode_vkGetSwapchainGrallocUsageANDROID = OP_vkGetSwapchainGrallocUsageANDROID;
22585 uint32_t seqno;
22586 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
22587 memcpy(streamPtr, &opcode_vkGetSwapchainGrallocUsageANDROID, sizeof(uint32_t));
22588 streamPtr += sizeof(uint32_t);
22589 memcpy(streamPtr, &packetSize_vkGetSwapchainGrallocUsageANDROID, sizeof(uint32_t));
22590 streamPtr += sizeof(uint32_t);
22591 if (queueSubmitWithCommandsEnabled) {
22592 memcpy(streamPtr, &seqno, sizeof(uint32_t));
22593 streamPtr += sizeof(uint32_t);
22594 }
22595 uint64_t cgen_var_0;
22596 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
22597 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22598 *streamPtrPtr += 1 * 8;
22599 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
22600 *streamPtrPtr += sizeof(VkFormat);
22601 memcpy(*streamPtrPtr, (VkImageUsageFlags*)&local_imageUsage, sizeof(VkImageUsageFlags));
22602 *streamPtrPtr += sizeof(VkImageUsageFlags);
22603 memcpy(*streamPtrPtr, (int*)grallocUsage, sizeof(int));
22604 *streamPtrPtr += sizeof(int);
22605 stream->read((int*)grallocUsage, sizeof(int));
22606 VkResult vkGetSwapchainGrallocUsageANDROID_VkResult_return = (VkResult)0;
22607 stream->read(&vkGetSwapchainGrallocUsageANDROID_VkResult_return, sizeof(VkResult));
22608 ++encodeCount;
22609 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22610 pool->freeAll();
22611 stream->clearPool();
22612 }
22613 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22614 return vkGetSwapchainGrallocUsageANDROID_VkResult_return;
22615 }
22616
vkAcquireImageANDROID(VkDevice device,VkImage image,int nativeFenceFd,VkSemaphore semaphore,VkFence fence,uint32_t doLock)22617 VkResult VkEncoder::vkAcquireImageANDROID(VkDevice device, VkImage image, int nativeFenceFd,
22618 VkSemaphore semaphore, VkFence fence, uint32_t doLock) {
22619 (void)doLock;
22620 bool queueSubmitWithCommandsEnabled =
22621 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22622 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22623 auto stream = mImpl->stream();
22624 auto pool = mImpl->pool();
22625 VkDevice local_device;
22626 VkImage local_image;
22627 int local_nativeFenceFd;
22628 VkSemaphore local_semaphore;
22629 VkFence local_fence;
22630 local_device = device;
22631 local_image = image;
22632 local_nativeFenceFd = nativeFenceFd;
22633 local_semaphore = semaphore;
22634 local_fence = fence;
22635 sResourceTracker->unwrap_vkAcquireImageANDROID_nativeFenceFd(nativeFenceFd,
22636 &local_nativeFenceFd);
22637 size_t count = 0;
22638 size_t* countPtr = &count;
22639 {
22640 uint64_t cgen_var_0;
22641 *countPtr += 1 * 8;
22642 uint64_t cgen_var_1;
22643 *countPtr += 1 * 8;
22644 *countPtr += sizeof(int);
22645 uint64_t cgen_var_2;
22646 *countPtr += 1 * 8;
22647 uint64_t cgen_var_3;
22648 *countPtr += 1 * 8;
22649 }
22650 uint32_t packetSize_vkAcquireImageANDROID =
22651 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
22652 uint8_t* streamPtr = stream->reserve(packetSize_vkAcquireImageANDROID);
22653 uint8_t* packetBeginPtr = streamPtr;
22654 uint8_t** streamPtrPtr = &streamPtr;
22655 uint32_t opcode_vkAcquireImageANDROID = OP_vkAcquireImageANDROID;
22656 uint32_t seqno;
22657 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
22658 memcpy(streamPtr, &opcode_vkAcquireImageANDROID, sizeof(uint32_t));
22659 streamPtr += sizeof(uint32_t);
22660 memcpy(streamPtr, &packetSize_vkAcquireImageANDROID, sizeof(uint32_t));
22661 streamPtr += sizeof(uint32_t);
22662 if (queueSubmitWithCommandsEnabled) {
22663 memcpy(streamPtr, &seqno, sizeof(uint32_t));
22664 streamPtr += sizeof(uint32_t);
22665 }
22666 uint64_t cgen_var_0;
22667 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
22668 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22669 *streamPtrPtr += 1 * 8;
22670 uint64_t cgen_var_1;
22671 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
22672 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
22673 *streamPtrPtr += 1 * 8;
22674 memcpy(*streamPtrPtr, (int*)&local_nativeFenceFd, sizeof(int));
22675 *streamPtrPtr += sizeof(int);
22676 uint64_t cgen_var_2;
22677 *&cgen_var_2 = get_host_u64_VkSemaphore((*&local_semaphore));
22678 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
22679 *streamPtrPtr += 1 * 8;
22680 uint64_t cgen_var_3;
22681 *&cgen_var_3 = get_host_u64_VkFence((*&local_fence));
22682 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_3, 1 * 8);
22683 *streamPtrPtr += 1 * 8;
22684 VkResult vkAcquireImageANDROID_VkResult_return = (VkResult)0;
22685 stream->read(&vkAcquireImageANDROID_VkResult_return, sizeof(VkResult));
22686 ++encodeCount;
22687 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22688 pool->freeAll();
22689 stream->clearPool();
22690 }
22691 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22692 return vkAcquireImageANDROID_VkResult_return;
22693 }
22694
vkQueueSignalReleaseImageANDROID(VkQueue queue,uint32_t waitSemaphoreCount,const VkSemaphore * pWaitSemaphores,VkImage image,int * pNativeFenceFd,uint32_t doLock)22695 VkResult VkEncoder::vkQueueSignalReleaseImageANDROID(VkQueue queue, uint32_t waitSemaphoreCount,
22696 const VkSemaphore* pWaitSemaphores,
22697 VkImage image, int* pNativeFenceFd,
22698 uint32_t doLock) {
22699 (void)doLock;
22700 bool queueSubmitWithCommandsEnabled =
22701 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22702 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22703 auto stream = mImpl->stream();
22704 auto pool = mImpl->pool();
22705 VkQueue local_queue;
22706 uint32_t local_waitSemaphoreCount;
22707 VkSemaphore* local_pWaitSemaphores;
22708 VkImage local_image;
22709 local_queue = queue;
22710 local_waitSemaphoreCount = waitSemaphoreCount;
22711 // Avoiding deepcopy for pWaitSemaphores
22712 local_pWaitSemaphores = (VkSemaphore*)pWaitSemaphores;
22713 local_image = image;
22714 size_t count = 0;
22715 size_t* countPtr = &count;
22716 {
22717 uint64_t cgen_var_0;
22718 *countPtr += 1 * 8;
22719 *countPtr += sizeof(uint32_t);
22720 // WARNING PTR CHECK
22721 *countPtr += 8;
22722 if (local_pWaitSemaphores) {
22723 if (((waitSemaphoreCount))) {
22724 *countPtr += ((waitSemaphoreCount)) * 8;
22725 }
22726 }
22727 uint64_t cgen_var_1;
22728 *countPtr += 1 * 8;
22729 *countPtr += sizeof(int);
22730 }
22731 uint32_t packetSize_vkQueueSignalReleaseImageANDROID =
22732 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
22733 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSignalReleaseImageANDROID);
22734 uint8_t* packetBeginPtr = streamPtr;
22735 uint8_t** streamPtrPtr = &streamPtr;
22736 uint32_t opcode_vkQueueSignalReleaseImageANDROID = OP_vkQueueSignalReleaseImageANDROID;
22737 uint32_t seqno;
22738 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
22739 memcpy(streamPtr, &opcode_vkQueueSignalReleaseImageANDROID, sizeof(uint32_t));
22740 streamPtr += sizeof(uint32_t);
22741 memcpy(streamPtr, &packetSize_vkQueueSignalReleaseImageANDROID, sizeof(uint32_t));
22742 streamPtr += sizeof(uint32_t);
22743 if (queueSubmitWithCommandsEnabled) {
22744 memcpy(streamPtr, &seqno, sizeof(uint32_t));
22745 streamPtr += sizeof(uint32_t);
22746 }
22747 uint64_t cgen_var_0;
22748 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
22749 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22750 *streamPtrPtr += 1 * 8;
22751 memcpy(*streamPtrPtr, (uint32_t*)&local_waitSemaphoreCount, sizeof(uint32_t));
22752 *streamPtrPtr += sizeof(uint32_t);
22753 // WARNING PTR CHECK
22754 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pWaitSemaphores;
22755 memcpy((*streamPtrPtr), &cgen_var_1, 8);
22756 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
22757 *streamPtrPtr += 8;
22758 if (local_pWaitSemaphores) {
22759 if (((waitSemaphoreCount))) {
22760 uint8_t* cgen_var_1_0_ptr = (uint8_t*)(*streamPtrPtr);
22761 for (uint32_t k = 0; k < ((waitSemaphoreCount)); ++k) {
22762 uint64_t tmpval = get_host_u64_VkSemaphore(local_pWaitSemaphores[k]);
22763 memcpy(cgen_var_1_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
22764 }
22765 *streamPtrPtr += 8 * ((waitSemaphoreCount));
22766 }
22767 }
22768 uint64_t cgen_var_2;
22769 *&cgen_var_2 = get_host_u64_VkImage((*&local_image));
22770 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
22771 *streamPtrPtr += 1 * 8;
22772 memcpy(*streamPtrPtr, (int*)pNativeFenceFd, sizeof(int));
22773 *streamPtrPtr += sizeof(int);
22774 stream->read((int*)pNativeFenceFd, sizeof(int));
22775 VkResult vkQueueSignalReleaseImageANDROID_VkResult_return = (VkResult)0;
22776 stream->read(&vkQueueSignalReleaseImageANDROID_VkResult_return, sizeof(VkResult));
22777 stream->flush();
22778 ++encodeCount;
22779 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22780 pool->freeAll();
22781 stream->clearPool();
22782 }
22783 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22784 return vkQueueSignalReleaseImageANDROID_VkResult_return;
22785 }
22786
vkGetSwapchainGrallocUsage2ANDROID(VkDevice device,VkFormat format,VkImageUsageFlags imageUsage,VkSwapchainImageUsageFlagsANDROID swapchainImageUsage,uint64_t * grallocConsumerUsage,uint64_t * grallocProducerUsage,uint32_t doLock)22787 VkResult VkEncoder::vkGetSwapchainGrallocUsage2ANDROID(
22788 VkDevice device, VkFormat format, VkImageUsageFlags imageUsage,
22789 VkSwapchainImageUsageFlagsANDROID swapchainImageUsage, uint64_t* grallocConsumerUsage,
22790 uint64_t* grallocProducerUsage, uint32_t doLock) {
22791 (void)doLock;
22792 bool queueSubmitWithCommandsEnabled =
22793 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22794 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22795 auto stream = mImpl->stream();
22796 auto pool = mImpl->pool();
22797 VkDevice local_device;
22798 VkFormat local_format;
22799 VkImageUsageFlags local_imageUsage;
22800 VkSwapchainImageUsageFlagsANDROID local_swapchainImageUsage;
22801 local_device = device;
22802 local_format = format;
22803 local_imageUsage = imageUsage;
22804 local_swapchainImageUsage = swapchainImageUsage;
22805 size_t count = 0;
22806 size_t* countPtr = &count;
22807 {
22808 uint64_t cgen_var_0;
22809 *countPtr += 1 * 8;
22810 *countPtr += sizeof(VkFormat);
22811 *countPtr += sizeof(VkImageUsageFlags);
22812 *countPtr += sizeof(VkSwapchainImageUsageFlagsANDROID);
22813 *countPtr += sizeof(uint64_t);
22814 *countPtr += sizeof(uint64_t);
22815 }
22816 uint32_t packetSize_vkGetSwapchainGrallocUsage2ANDROID =
22817 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
22818 uint8_t* streamPtr = stream->reserve(packetSize_vkGetSwapchainGrallocUsage2ANDROID);
22819 uint8_t* packetBeginPtr = streamPtr;
22820 uint8_t** streamPtrPtr = &streamPtr;
22821 uint32_t opcode_vkGetSwapchainGrallocUsage2ANDROID = OP_vkGetSwapchainGrallocUsage2ANDROID;
22822 uint32_t seqno;
22823 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
22824 memcpy(streamPtr, &opcode_vkGetSwapchainGrallocUsage2ANDROID, sizeof(uint32_t));
22825 streamPtr += sizeof(uint32_t);
22826 memcpy(streamPtr, &packetSize_vkGetSwapchainGrallocUsage2ANDROID, sizeof(uint32_t));
22827 streamPtr += sizeof(uint32_t);
22828 if (queueSubmitWithCommandsEnabled) {
22829 memcpy(streamPtr, &seqno, sizeof(uint32_t));
22830 streamPtr += sizeof(uint32_t);
22831 }
22832 uint64_t cgen_var_0;
22833 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
22834 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22835 *streamPtrPtr += 1 * 8;
22836 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
22837 *streamPtrPtr += sizeof(VkFormat);
22838 memcpy(*streamPtrPtr, (VkImageUsageFlags*)&local_imageUsage, sizeof(VkImageUsageFlags));
22839 *streamPtrPtr += sizeof(VkImageUsageFlags);
22840 memcpy(*streamPtrPtr, (VkSwapchainImageUsageFlagsANDROID*)&local_swapchainImageUsage,
22841 sizeof(VkSwapchainImageUsageFlagsANDROID));
22842 *streamPtrPtr += sizeof(VkSwapchainImageUsageFlagsANDROID);
22843 memcpy(*streamPtrPtr, (uint64_t*)grallocConsumerUsage, sizeof(uint64_t));
22844 *streamPtrPtr += sizeof(uint64_t);
22845 memcpy(*streamPtrPtr, (uint64_t*)grallocProducerUsage, sizeof(uint64_t));
22846 *streamPtrPtr += sizeof(uint64_t);
22847 stream->read((uint64_t*)grallocConsumerUsage, sizeof(uint64_t));
22848 stream->read((uint64_t*)grallocProducerUsage, sizeof(uint64_t));
22849 VkResult vkGetSwapchainGrallocUsage2ANDROID_VkResult_return = (VkResult)0;
22850 stream->read(&vkGetSwapchainGrallocUsage2ANDROID_VkResult_return, sizeof(VkResult));
22851 ++encodeCount;
22852 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22853 pool->freeAll();
22854 stream->clearPool();
22855 }
22856 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22857 return vkGetSwapchainGrallocUsage2ANDROID_VkResult_return;
22858 }
22859
22860 #endif
22861 #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)22862 void VkEncoder::vkCmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer,
22863 uint32_t firstBinding, uint32_t bindingCount,
22864 const VkBuffer* pBuffers,
22865 const VkDeviceSize* pOffsets,
22866 const VkDeviceSize* pSizes, uint32_t doLock) {
22867 (void)doLock;
22868 bool queueSubmitWithCommandsEnabled =
22869 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22870 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22871 auto stream = mImpl->stream();
22872 auto pool = mImpl->pool();
22873 VkCommandBuffer local_commandBuffer;
22874 uint32_t local_firstBinding;
22875 uint32_t local_bindingCount;
22876 VkBuffer* local_pBuffers;
22877 VkDeviceSize* local_pOffsets;
22878 VkDeviceSize* local_pSizes;
22879 local_commandBuffer = commandBuffer;
22880 local_firstBinding = firstBinding;
22881 local_bindingCount = bindingCount;
22882 // Avoiding deepcopy for pBuffers
22883 local_pBuffers = (VkBuffer*)pBuffers;
22884 // Avoiding deepcopy for pOffsets
22885 local_pOffsets = (VkDeviceSize*)pOffsets;
22886 // Avoiding deepcopy for pSizes
22887 local_pSizes = (VkDeviceSize*)pSizes;
22888 size_t count = 0;
22889 size_t* countPtr = &count;
22890 {
22891 uint64_t cgen_var_0;
22892 *countPtr += 1 * 8;
22893 *countPtr += sizeof(uint32_t);
22894 *countPtr += sizeof(uint32_t);
22895 if (((bindingCount))) {
22896 *countPtr += ((bindingCount)) * 8;
22897 }
22898 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
22899 // WARNING PTR CHECK
22900 *countPtr += 8;
22901 if (local_pSizes) {
22902 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
22903 }
22904 }
22905 uint32_t packetSize_vkCmdBindTransformFeedbackBuffersEXT = 4 + 4 + count;
22906 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindTransformFeedbackBuffersEXT -= 8;
22907 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindTransformFeedbackBuffersEXT);
22908 uint8_t* packetBeginPtr = streamPtr;
22909 uint8_t** streamPtrPtr = &streamPtr;
22910 uint32_t opcode_vkCmdBindTransformFeedbackBuffersEXT = OP_vkCmdBindTransformFeedbackBuffersEXT;
22911 memcpy(streamPtr, &opcode_vkCmdBindTransformFeedbackBuffersEXT, sizeof(uint32_t));
22912 streamPtr += sizeof(uint32_t);
22913 memcpy(streamPtr, &packetSize_vkCmdBindTransformFeedbackBuffersEXT, sizeof(uint32_t));
22914 streamPtr += sizeof(uint32_t);
22915 if (!queueSubmitWithCommandsEnabled) {
22916 uint64_t cgen_var_0;
22917 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
22918 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
22919 *streamPtrPtr += 1 * 8;
22920 }
22921 memcpy(*streamPtrPtr, (uint32_t*)&local_firstBinding, sizeof(uint32_t));
22922 *streamPtrPtr += sizeof(uint32_t);
22923 memcpy(*streamPtrPtr, (uint32_t*)&local_bindingCount, sizeof(uint32_t));
22924 *streamPtrPtr += sizeof(uint32_t);
22925 if (((bindingCount))) {
22926 uint8_t* cgen_var_0_ptr = (uint8_t*)(*streamPtrPtr);
22927 for (uint32_t k = 0; k < ((bindingCount)); ++k) {
22928 uint64_t tmpval = get_host_u64_VkBuffer(local_pBuffers[k]);
22929 memcpy(cgen_var_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
22930 }
22931 *streamPtrPtr += 8 * ((bindingCount));
22932 }
22933 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pOffsets, ((bindingCount)) * sizeof(VkDeviceSize));
22934 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
22935 // WARNING PTR CHECK
22936 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pSizes;
22937 memcpy((*streamPtrPtr), &cgen_var_1, 8);
22938 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
22939 *streamPtrPtr += 8;
22940 if (local_pSizes) {
22941 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pSizes, ((bindingCount)) * sizeof(VkDeviceSize));
22942 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
22943 }
22944 ++encodeCount;
22945 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
22946 pool->freeAll();
22947 stream->clearPool();
22948 }
22949 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
22950 }
22951
vkCmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer,uint32_t firstCounterBuffer,uint32_t counterBufferCount,const VkBuffer * pCounterBuffers,const VkDeviceSize * pCounterBufferOffsets,uint32_t doLock)22952 void VkEncoder::vkCmdBeginTransformFeedbackEXT(
22953 VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount,
22954 const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets, uint32_t doLock) {
22955 (void)doLock;
22956 bool queueSubmitWithCommandsEnabled =
22957 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
22958 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
22959 auto stream = mImpl->stream();
22960 auto pool = mImpl->pool();
22961 VkCommandBuffer local_commandBuffer;
22962 uint32_t local_firstCounterBuffer;
22963 uint32_t local_counterBufferCount;
22964 VkBuffer* local_pCounterBuffers;
22965 VkDeviceSize* local_pCounterBufferOffsets;
22966 local_commandBuffer = commandBuffer;
22967 local_firstCounterBuffer = firstCounterBuffer;
22968 local_counterBufferCount = counterBufferCount;
22969 // Avoiding deepcopy for pCounterBuffers
22970 local_pCounterBuffers = (VkBuffer*)pCounterBuffers;
22971 // Avoiding deepcopy for pCounterBufferOffsets
22972 local_pCounterBufferOffsets = (VkDeviceSize*)pCounterBufferOffsets;
22973 size_t count = 0;
22974 size_t* countPtr = &count;
22975 {
22976 uint64_t cgen_var_0;
22977 *countPtr += 1 * 8;
22978 *countPtr += sizeof(uint32_t);
22979 *countPtr += sizeof(uint32_t);
22980 // WARNING PTR CHECK
22981 *countPtr += 8;
22982 if (local_pCounterBuffers) {
22983 if (((counterBufferCount))) {
22984 *countPtr += ((counterBufferCount)) * 8;
22985 }
22986 }
22987 // WARNING PTR CHECK
22988 *countPtr += 8;
22989 if (local_pCounterBufferOffsets) {
22990 *countPtr += ((counterBufferCount)) * sizeof(VkDeviceSize);
22991 }
22992 }
22993 uint32_t packetSize_vkCmdBeginTransformFeedbackEXT = 4 + 4 + count;
22994 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginTransformFeedbackEXT -= 8;
22995 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginTransformFeedbackEXT);
22996 uint8_t* packetBeginPtr = streamPtr;
22997 uint8_t** streamPtrPtr = &streamPtr;
22998 uint32_t opcode_vkCmdBeginTransformFeedbackEXT = OP_vkCmdBeginTransformFeedbackEXT;
22999 memcpy(streamPtr, &opcode_vkCmdBeginTransformFeedbackEXT, sizeof(uint32_t));
23000 streamPtr += sizeof(uint32_t);
23001 memcpy(streamPtr, &packetSize_vkCmdBeginTransformFeedbackEXT, sizeof(uint32_t));
23002 streamPtr += sizeof(uint32_t);
23003 if (!queueSubmitWithCommandsEnabled) {
23004 uint64_t cgen_var_0;
23005 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23006 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23007 *streamPtrPtr += 1 * 8;
23008 }
23009 memcpy(*streamPtrPtr, (uint32_t*)&local_firstCounterBuffer, sizeof(uint32_t));
23010 *streamPtrPtr += sizeof(uint32_t);
23011 memcpy(*streamPtrPtr, (uint32_t*)&local_counterBufferCount, sizeof(uint32_t));
23012 *streamPtrPtr += sizeof(uint32_t);
23013 // WARNING PTR CHECK
23014 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)local_pCounterBuffers;
23015 memcpy((*streamPtrPtr), &cgen_var_0, 8);
23016 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
23017 *streamPtrPtr += 8;
23018 if (local_pCounterBuffers) {
23019 if (((counterBufferCount))) {
23020 uint8_t* cgen_var_0_0_ptr = (uint8_t*)(*streamPtrPtr);
23021 for (uint32_t k = 0; k < ((counterBufferCount)); ++k) {
23022 uint64_t tmpval = get_host_u64_VkBuffer(local_pCounterBuffers[k]);
23023 memcpy(cgen_var_0_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
23024 }
23025 *streamPtrPtr += 8 * ((counterBufferCount));
23026 }
23027 }
23028 // WARNING PTR CHECK
23029 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pCounterBufferOffsets;
23030 memcpy((*streamPtrPtr), &cgen_var_1, 8);
23031 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
23032 *streamPtrPtr += 8;
23033 if (local_pCounterBufferOffsets) {
23034 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pCounterBufferOffsets,
23035 ((counterBufferCount)) * sizeof(VkDeviceSize));
23036 *streamPtrPtr += ((counterBufferCount)) * sizeof(VkDeviceSize);
23037 }
23038 ++encodeCount;
23039 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23040 pool->freeAll();
23041 stream->clearPool();
23042 }
23043 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23044 }
23045
vkCmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer,uint32_t firstCounterBuffer,uint32_t counterBufferCount,const VkBuffer * pCounterBuffers,const VkDeviceSize * pCounterBufferOffsets,uint32_t doLock)23046 void VkEncoder::vkCmdEndTransformFeedbackEXT(
23047 VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount,
23048 const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets, uint32_t doLock) {
23049 (void)doLock;
23050 bool queueSubmitWithCommandsEnabled =
23051 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23052 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23053 auto stream = mImpl->stream();
23054 auto pool = mImpl->pool();
23055 VkCommandBuffer local_commandBuffer;
23056 uint32_t local_firstCounterBuffer;
23057 uint32_t local_counterBufferCount;
23058 VkBuffer* local_pCounterBuffers;
23059 VkDeviceSize* local_pCounterBufferOffsets;
23060 local_commandBuffer = commandBuffer;
23061 local_firstCounterBuffer = firstCounterBuffer;
23062 local_counterBufferCount = counterBufferCount;
23063 // Avoiding deepcopy for pCounterBuffers
23064 local_pCounterBuffers = (VkBuffer*)pCounterBuffers;
23065 // Avoiding deepcopy for pCounterBufferOffsets
23066 local_pCounterBufferOffsets = (VkDeviceSize*)pCounterBufferOffsets;
23067 size_t count = 0;
23068 size_t* countPtr = &count;
23069 {
23070 uint64_t cgen_var_0;
23071 *countPtr += 1 * 8;
23072 *countPtr += sizeof(uint32_t);
23073 *countPtr += sizeof(uint32_t);
23074 // WARNING PTR CHECK
23075 *countPtr += 8;
23076 if (local_pCounterBuffers) {
23077 if (((counterBufferCount))) {
23078 *countPtr += ((counterBufferCount)) * 8;
23079 }
23080 }
23081 // WARNING PTR CHECK
23082 *countPtr += 8;
23083 if (local_pCounterBufferOffsets) {
23084 *countPtr += ((counterBufferCount)) * sizeof(VkDeviceSize);
23085 }
23086 }
23087 uint32_t packetSize_vkCmdEndTransformFeedbackEXT = 4 + 4 + count;
23088 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndTransformFeedbackEXT -= 8;
23089 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndTransformFeedbackEXT);
23090 uint8_t* packetBeginPtr = streamPtr;
23091 uint8_t** streamPtrPtr = &streamPtr;
23092 uint32_t opcode_vkCmdEndTransformFeedbackEXT = OP_vkCmdEndTransformFeedbackEXT;
23093 memcpy(streamPtr, &opcode_vkCmdEndTransformFeedbackEXT, sizeof(uint32_t));
23094 streamPtr += sizeof(uint32_t);
23095 memcpy(streamPtr, &packetSize_vkCmdEndTransformFeedbackEXT, sizeof(uint32_t));
23096 streamPtr += sizeof(uint32_t);
23097 if (!queueSubmitWithCommandsEnabled) {
23098 uint64_t cgen_var_0;
23099 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23100 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23101 *streamPtrPtr += 1 * 8;
23102 }
23103 memcpy(*streamPtrPtr, (uint32_t*)&local_firstCounterBuffer, sizeof(uint32_t));
23104 *streamPtrPtr += sizeof(uint32_t);
23105 memcpy(*streamPtrPtr, (uint32_t*)&local_counterBufferCount, sizeof(uint32_t));
23106 *streamPtrPtr += sizeof(uint32_t);
23107 // WARNING PTR CHECK
23108 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)local_pCounterBuffers;
23109 memcpy((*streamPtrPtr), &cgen_var_0, 8);
23110 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
23111 *streamPtrPtr += 8;
23112 if (local_pCounterBuffers) {
23113 if (((counterBufferCount))) {
23114 uint8_t* cgen_var_0_0_ptr = (uint8_t*)(*streamPtrPtr);
23115 for (uint32_t k = 0; k < ((counterBufferCount)); ++k) {
23116 uint64_t tmpval = get_host_u64_VkBuffer(local_pCounterBuffers[k]);
23117 memcpy(cgen_var_0_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
23118 }
23119 *streamPtrPtr += 8 * ((counterBufferCount));
23120 }
23121 }
23122 // WARNING PTR CHECK
23123 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pCounterBufferOffsets;
23124 memcpy((*streamPtrPtr), &cgen_var_1, 8);
23125 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
23126 *streamPtrPtr += 8;
23127 if (local_pCounterBufferOffsets) {
23128 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pCounterBufferOffsets,
23129 ((counterBufferCount)) * sizeof(VkDeviceSize));
23130 *streamPtrPtr += ((counterBufferCount)) * sizeof(VkDeviceSize);
23131 }
23132 ++encodeCount;
23133 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23134 pool->freeAll();
23135 stream->clearPool();
23136 }
23137 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23138 }
23139
vkCmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,VkQueryControlFlags flags,uint32_t index,uint32_t doLock)23140 void VkEncoder::vkCmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
23141 uint32_t query, VkQueryControlFlags flags, uint32_t index,
23142 uint32_t doLock) {
23143 (void)doLock;
23144 bool queueSubmitWithCommandsEnabled =
23145 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23146 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23147 auto stream = mImpl->stream();
23148 auto pool = mImpl->pool();
23149 VkCommandBuffer local_commandBuffer;
23150 VkQueryPool local_queryPool;
23151 uint32_t local_query;
23152 VkQueryControlFlags local_flags;
23153 uint32_t local_index;
23154 local_commandBuffer = commandBuffer;
23155 local_queryPool = queryPool;
23156 local_query = query;
23157 local_flags = flags;
23158 local_index = index;
23159 size_t count = 0;
23160 size_t* countPtr = &count;
23161 {
23162 uint64_t cgen_var_0;
23163 *countPtr += 1 * 8;
23164 uint64_t cgen_var_1;
23165 *countPtr += 1 * 8;
23166 *countPtr += sizeof(uint32_t);
23167 *countPtr += sizeof(VkQueryControlFlags);
23168 *countPtr += sizeof(uint32_t);
23169 }
23170 uint32_t packetSize_vkCmdBeginQueryIndexedEXT = 4 + 4 + count;
23171 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginQueryIndexedEXT -= 8;
23172 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBeginQueryIndexedEXT);
23173 uint8_t* packetBeginPtr = streamPtr;
23174 uint8_t** streamPtrPtr = &streamPtr;
23175 uint32_t opcode_vkCmdBeginQueryIndexedEXT = OP_vkCmdBeginQueryIndexedEXT;
23176 memcpy(streamPtr, &opcode_vkCmdBeginQueryIndexedEXT, sizeof(uint32_t));
23177 streamPtr += sizeof(uint32_t);
23178 memcpy(streamPtr, &packetSize_vkCmdBeginQueryIndexedEXT, sizeof(uint32_t));
23179 streamPtr += sizeof(uint32_t);
23180 if (!queueSubmitWithCommandsEnabled) {
23181 uint64_t cgen_var_0;
23182 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23183 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23184 *streamPtrPtr += 1 * 8;
23185 }
23186 uint64_t cgen_var_0;
23187 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
23188 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23189 *streamPtrPtr += 1 * 8;
23190 memcpy(*streamPtrPtr, (uint32_t*)&local_query, sizeof(uint32_t));
23191 *streamPtrPtr += sizeof(uint32_t);
23192 memcpy(*streamPtrPtr, (VkQueryControlFlags*)&local_flags, sizeof(VkQueryControlFlags));
23193 *streamPtrPtr += sizeof(VkQueryControlFlags);
23194 memcpy(*streamPtrPtr, (uint32_t*)&local_index, sizeof(uint32_t));
23195 *streamPtrPtr += sizeof(uint32_t);
23196 ++encodeCount;
23197 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23198 pool->freeAll();
23199 stream->clearPool();
23200 }
23201 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23202 }
23203
vkCmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,uint32_t index,uint32_t doLock)23204 void VkEncoder::vkCmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
23205 uint32_t query, uint32_t index, uint32_t doLock) {
23206 (void)doLock;
23207 bool queueSubmitWithCommandsEnabled =
23208 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23209 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23210 auto stream = mImpl->stream();
23211 auto pool = mImpl->pool();
23212 VkCommandBuffer local_commandBuffer;
23213 VkQueryPool local_queryPool;
23214 uint32_t local_query;
23215 uint32_t local_index;
23216 local_commandBuffer = commandBuffer;
23217 local_queryPool = queryPool;
23218 local_query = query;
23219 local_index = index;
23220 size_t count = 0;
23221 size_t* countPtr = &count;
23222 {
23223 uint64_t cgen_var_0;
23224 *countPtr += 1 * 8;
23225 uint64_t cgen_var_1;
23226 *countPtr += 1 * 8;
23227 *countPtr += sizeof(uint32_t);
23228 *countPtr += sizeof(uint32_t);
23229 }
23230 uint32_t packetSize_vkCmdEndQueryIndexedEXT = 4 + 4 + count;
23231 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndQueryIndexedEXT -= 8;
23232 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdEndQueryIndexedEXT);
23233 uint8_t* packetBeginPtr = streamPtr;
23234 uint8_t** streamPtrPtr = &streamPtr;
23235 uint32_t opcode_vkCmdEndQueryIndexedEXT = OP_vkCmdEndQueryIndexedEXT;
23236 memcpy(streamPtr, &opcode_vkCmdEndQueryIndexedEXT, sizeof(uint32_t));
23237 streamPtr += sizeof(uint32_t);
23238 memcpy(streamPtr, &packetSize_vkCmdEndQueryIndexedEXT, sizeof(uint32_t));
23239 streamPtr += sizeof(uint32_t);
23240 if (!queueSubmitWithCommandsEnabled) {
23241 uint64_t cgen_var_0;
23242 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23243 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23244 *streamPtrPtr += 1 * 8;
23245 }
23246 uint64_t cgen_var_0;
23247 *&cgen_var_0 = get_host_u64_VkQueryPool((*&local_queryPool));
23248 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23249 *streamPtrPtr += 1 * 8;
23250 memcpy(*streamPtrPtr, (uint32_t*)&local_query, sizeof(uint32_t));
23251 *streamPtrPtr += sizeof(uint32_t);
23252 memcpy(*streamPtrPtr, (uint32_t*)&local_index, sizeof(uint32_t));
23253 *streamPtrPtr += sizeof(uint32_t);
23254 ++encodeCount;
23255 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23256 pool->freeAll();
23257 stream->clearPool();
23258 }
23259 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23260 }
23261
vkCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer,uint32_t instanceCount,uint32_t firstInstance,VkBuffer counterBuffer,VkDeviceSize counterBufferOffset,uint32_t counterOffset,uint32_t vertexStride,uint32_t doLock)23262 void VkEncoder::vkCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount,
23263 uint32_t firstInstance, VkBuffer counterBuffer,
23264 VkDeviceSize counterBufferOffset,
23265 uint32_t counterOffset, uint32_t vertexStride,
23266 uint32_t doLock) {
23267 (void)doLock;
23268 bool queueSubmitWithCommandsEnabled =
23269 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23270 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23271 auto stream = mImpl->stream();
23272 auto pool = mImpl->pool();
23273 VkCommandBuffer local_commandBuffer;
23274 uint32_t local_instanceCount;
23275 uint32_t local_firstInstance;
23276 VkBuffer local_counterBuffer;
23277 VkDeviceSize local_counterBufferOffset;
23278 uint32_t local_counterOffset;
23279 uint32_t local_vertexStride;
23280 local_commandBuffer = commandBuffer;
23281 local_instanceCount = instanceCount;
23282 local_firstInstance = firstInstance;
23283 local_counterBuffer = counterBuffer;
23284 local_counterBufferOffset = counterBufferOffset;
23285 local_counterOffset = counterOffset;
23286 local_vertexStride = vertexStride;
23287 size_t count = 0;
23288 size_t* countPtr = &count;
23289 {
23290 uint64_t cgen_var_0;
23291 *countPtr += 1 * 8;
23292 *countPtr += sizeof(uint32_t);
23293 *countPtr += sizeof(uint32_t);
23294 uint64_t cgen_var_1;
23295 *countPtr += 1 * 8;
23296 *countPtr += sizeof(VkDeviceSize);
23297 *countPtr += sizeof(uint32_t);
23298 *countPtr += sizeof(uint32_t);
23299 }
23300 uint32_t packetSize_vkCmdDrawIndirectByteCountEXT = 4 + 4 + count;
23301 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDrawIndirectByteCountEXT -= 8;
23302 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdDrawIndirectByteCountEXT);
23303 uint8_t* packetBeginPtr = streamPtr;
23304 uint8_t** streamPtrPtr = &streamPtr;
23305 uint32_t opcode_vkCmdDrawIndirectByteCountEXT = OP_vkCmdDrawIndirectByteCountEXT;
23306 memcpy(streamPtr, &opcode_vkCmdDrawIndirectByteCountEXT, sizeof(uint32_t));
23307 streamPtr += sizeof(uint32_t);
23308 memcpy(streamPtr, &packetSize_vkCmdDrawIndirectByteCountEXT, sizeof(uint32_t));
23309 streamPtr += sizeof(uint32_t);
23310 if (!queueSubmitWithCommandsEnabled) {
23311 uint64_t cgen_var_0;
23312 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23313 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23314 *streamPtrPtr += 1 * 8;
23315 }
23316 memcpy(*streamPtrPtr, (uint32_t*)&local_instanceCount, sizeof(uint32_t));
23317 *streamPtrPtr += sizeof(uint32_t);
23318 memcpy(*streamPtrPtr, (uint32_t*)&local_firstInstance, sizeof(uint32_t));
23319 *streamPtrPtr += sizeof(uint32_t);
23320 uint64_t cgen_var_0;
23321 *&cgen_var_0 = get_host_u64_VkBuffer((*&local_counterBuffer));
23322 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23323 *streamPtrPtr += 1 * 8;
23324 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_counterBufferOffset, sizeof(VkDeviceSize));
23325 *streamPtrPtr += sizeof(VkDeviceSize);
23326 memcpy(*streamPtrPtr, (uint32_t*)&local_counterOffset, sizeof(uint32_t));
23327 *streamPtrPtr += sizeof(uint32_t);
23328 memcpy(*streamPtrPtr, (uint32_t*)&local_vertexStride, sizeof(uint32_t));
23329 *streamPtrPtr += sizeof(uint32_t);
23330 ++encodeCount;
23331 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23332 pool->freeAll();
23333 stream->clearPool();
23334 }
23335 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23336 }
23337
23338 #endif
23339 #ifdef VK_EXT_image_drm_format_modifier
vkGetImageDrmFormatModifierPropertiesEXT(VkDevice device,VkImage image,VkImageDrmFormatModifierPropertiesEXT * pProperties,uint32_t doLock)23340 VkResult VkEncoder::vkGetImageDrmFormatModifierPropertiesEXT(
23341 VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties,
23342 uint32_t doLock) {
23343 (void)doLock;
23344 bool queueSubmitWithCommandsEnabled =
23345 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23346 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23347 auto stream = mImpl->stream();
23348 auto pool = mImpl->pool();
23349 VkDevice local_device;
23350 VkImage local_image;
23351 local_device = device;
23352 local_image = image;
23353 size_t count = 0;
23354 size_t* countPtr = &count;
23355 {
23356 uint64_t cgen_var_0;
23357 *countPtr += 1 * 8;
23358 uint64_t cgen_var_1;
23359 *countPtr += 1 * 8;
23360 count_VkImageDrmFormatModifierPropertiesEXT(
23361 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23362 (VkImageDrmFormatModifierPropertiesEXT*)(pProperties), countPtr);
23363 }
23364 uint32_t packetSize_vkGetImageDrmFormatModifierPropertiesEXT =
23365 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
23366 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageDrmFormatModifierPropertiesEXT);
23367 uint8_t* packetBeginPtr = streamPtr;
23368 uint8_t** streamPtrPtr = &streamPtr;
23369 uint32_t opcode_vkGetImageDrmFormatModifierPropertiesEXT =
23370 OP_vkGetImageDrmFormatModifierPropertiesEXT;
23371 uint32_t seqno;
23372 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
23373 memcpy(streamPtr, &opcode_vkGetImageDrmFormatModifierPropertiesEXT, sizeof(uint32_t));
23374 streamPtr += sizeof(uint32_t);
23375 memcpy(streamPtr, &packetSize_vkGetImageDrmFormatModifierPropertiesEXT, sizeof(uint32_t));
23376 streamPtr += sizeof(uint32_t);
23377 if (queueSubmitWithCommandsEnabled) {
23378 memcpy(streamPtr, &seqno, sizeof(uint32_t));
23379 streamPtr += sizeof(uint32_t);
23380 }
23381 uint64_t cgen_var_0;
23382 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
23383 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23384 *streamPtrPtr += 1 * 8;
23385 uint64_t cgen_var_1;
23386 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
23387 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
23388 *streamPtrPtr += 1 * 8;
23389 reservedmarshal_VkImageDrmFormatModifierPropertiesEXT(
23390 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties),
23391 streamPtrPtr);
23392 unmarshal_VkImageDrmFormatModifierPropertiesEXT(
23393 stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties));
23394 if (pProperties) {
23395 transform_fromhost_VkImageDrmFormatModifierPropertiesEXT(
23396 sResourceTracker, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties));
23397 }
23398 VkResult vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return = (VkResult)0;
23399 stream->read(&vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return, sizeof(VkResult));
23400 ++encodeCount;
23401 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23402 pool->freeAll();
23403 stream->clearPool();
23404 }
23405 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23406 return vkGetImageDrmFormatModifierPropertiesEXT_VkResult_return;
23407 }
23408
23409 #endif
23410 #ifdef VK_EXT_tooling_info
vkGetPhysicalDeviceToolPropertiesEXT(VkPhysicalDevice physicalDevice,uint32_t * pToolCount,VkPhysicalDeviceToolProperties * pToolProperties,uint32_t doLock)23411 VkResult VkEncoder::vkGetPhysicalDeviceToolPropertiesEXT(
23412 VkPhysicalDevice physicalDevice, uint32_t* pToolCount,
23413 VkPhysicalDeviceToolProperties* pToolProperties, uint32_t doLock) {
23414 (void)doLock;
23415 bool queueSubmitWithCommandsEnabled =
23416 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23417 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23418 auto stream = mImpl->stream();
23419 auto pool = mImpl->pool();
23420 VkPhysicalDevice local_physicalDevice;
23421 local_physicalDevice = physicalDevice;
23422 size_t count = 0;
23423 size_t* countPtr = &count;
23424 {
23425 uint64_t cgen_var_0;
23426 *countPtr += 1 * 8;
23427 // WARNING PTR CHECK
23428 *countPtr += 8;
23429 if (pToolCount) {
23430 *countPtr += sizeof(uint32_t);
23431 }
23432 // WARNING PTR CHECK
23433 *countPtr += 8;
23434 if (pToolProperties) {
23435 if (pToolCount) {
23436 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
23437 count_VkPhysicalDeviceToolProperties(
23438 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23439 (VkPhysicalDeviceToolProperties*)(pToolProperties + i), countPtr);
23440 }
23441 }
23442 }
23443 }
23444 uint32_t packetSize_vkGetPhysicalDeviceToolPropertiesEXT =
23445 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
23446 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceToolPropertiesEXT);
23447 uint8_t* packetBeginPtr = streamPtr;
23448 uint8_t** streamPtrPtr = &streamPtr;
23449 uint32_t opcode_vkGetPhysicalDeviceToolPropertiesEXT = OP_vkGetPhysicalDeviceToolPropertiesEXT;
23450 uint32_t seqno;
23451 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
23452 memcpy(streamPtr, &opcode_vkGetPhysicalDeviceToolPropertiesEXT, sizeof(uint32_t));
23453 streamPtr += sizeof(uint32_t);
23454 memcpy(streamPtr, &packetSize_vkGetPhysicalDeviceToolPropertiesEXT, sizeof(uint32_t));
23455 streamPtr += sizeof(uint32_t);
23456 if (queueSubmitWithCommandsEnabled) {
23457 memcpy(streamPtr, &seqno, sizeof(uint32_t));
23458 streamPtr += sizeof(uint32_t);
23459 }
23460 uint64_t cgen_var_0;
23461 *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
23462 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23463 *streamPtrPtr += 1 * 8;
23464 // WARNING PTR CHECK
23465 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pToolCount;
23466 memcpy((*streamPtrPtr), &cgen_var_1, 8);
23467 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
23468 *streamPtrPtr += 8;
23469 if (pToolCount) {
23470 memcpy(*streamPtrPtr, (uint32_t*)pToolCount, sizeof(uint32_t));
23471 *streamPtrPtr += sizeof(uint32_t);
23472 }
23473 // WARNING PTR CHECK
23474 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pToolProperties;
23475 memcpy((*streamPtrPtr), &cgen_var_2, 8);
23476 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
23477 *streamPtrPtr += 8;
23478 if (pToolProperties) {
23479 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
23480 reservedmarshal_VkPhysicalDeviceToolProperties(
23481 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23482 (VkPhysicalDeviceToolProperties*)(pToolProperties + i), streamPtrPtr);
23483 }
23484 }
23485 // WARNING PTR CHECK
23486 uint32_t* check_pToolCount;
23487 check_pToolCount = (uint32_t*)(uintptr_t)stream->getBe64();
23488 if (pToolCount) {
23489 if (!(check_pToolCount)) {
23490 fprintf(stderr, "fatal: pToolCount inconsistent between guest and host\n");
23491 }
23492 stream->read((uint32_t*)pToolCount, sizeof(uint32_t));
23493 }
23494 // WARNING PTR CHECK
23495 VkPhysicalDeviceToolProperties* check_pToolProperties;
23496 check_pToolProperties = (VkPhysicalDeviceToolProperties*)(uintptr_t)stream->getBe64();
23497 if (pToolProperties) {
23498 if (!(check_pToolProperties)) {
23499 fprintf(stderr, "fatal: pToolProperties inconsistent between guest and host\n");
23500 }
23501 if (pToolCount) {
23502 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
23503 unmarshal_VkPhysicalDeviceToolProperties(
23504 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23505 (VkPhysicalDeviceToolProperties*)(pToolProperties + i));
23506 }
23507 }
23508 }
23509 if (pToolCount) {
23510 if (pToolProperties) {
23511 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i) {
23512 transform_fromhost_VkPhysicalDeviceToolProperties(
23513 sResourceTracker, (VkPhysicalDeviceToolProperties*)(pToolProperties + i));
23514 }
23515 }
23516 }
23517 VkResult vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return = (VkResult)0;
23518 stream->read(&vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return, sizeof(VkResult));
23519 ++encodeCount;
23520 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23521 pool->freeAll();
23522 stream->clearPool();
23523 }
23524 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23525 return vkGetPhysicalDeviceToolPropertiesEXT_VkResult_return;
23526 }
23527
23528 #endif
23529 #ifdef VK_EXT_line_rasterization
vkCmdSetLineStippleEXT(VkCommandBuffer commandBuffer,uint32_t lineStippleFactor,uint16_t lineStipplePattern,uint32_t doLock)23530 void VkEncoder::vkCmdSetLineStippleEXT(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor,
23531 uint16_t lineStipplePattern, uint32_t doLock) {
23532 (void)doLock;
23533 bool queueSubmitWithCommandsEnabled =
23534 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23535 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23536 auto stream = mImpl->stream();
23537 auto pool = mImpl->pool();
23538 VkCommandBuffer local_commandBuffer;
23539 uint32_t local_lineStippleFactor;
23540 uint16_t local_lineStipplePattern;
23541 local_commandBuffer = commandBuffer;
23542 local_lineStippleFactor = lineStippleFactor;
23543 local_lineStipplePattern = lineStipplePattern;
23544 size_t count = 0;
23545 size_t* countPtr = &count;
23546 {
23547 uint64_t cgen_var_0;
23548 *countPtr += 1 * 8;
23549 *countPtr += sizeof(uint32_t);
23550 *countPtr += sizeof(uint16_t);
23551 }
23552 uint32_t packetSize_vkCmdSetLineStippleEXT = 4 + 4 + count;
23553 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetLineStippleEXT -= 8;
23554 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetLineStippleEXT);
23555 uint8_t* packetBeginPtr = streamPtr;
23556 uint8_t** streamPtrPtr = &streamPtr;
23557 uint32_t opcode_vkCmdSetLineStippleEXT = OP_vkCmdSetLineStippleEXT;
23558 memcpy(streamPtr, &opcode_vkCmdSetLineStippleEXT, sizeof(uint32_t));
23559 streamPtr += sizeof(uint32_t);
23560 memcpy(streamPtr, &packetSize_vkCmdSetLineStippleEXT, sizeof(uint32_t));
23561 streamPtr += sizeof(uint32_t);
23562 if (!queueSubmitWithCommandsEnabled) {
23563 uint64_t cgen_var_0;
23564 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23565 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23566 *streamPtrPtr += 1 * 8;
23567 }
23568 memcpy(*streamPtrPtr, (uint32_t*)&local_lineStippleFactor, sizeof(uint32_t));
23569 *streamPtrPtr += sizeof(uint32_t);
23570 memcpy(*streamPtrPtr, (uint16_t*)&local_lineStipplePattern, sizeof(uint16_t));
23571 *streamPtrPtr += sizeof(uint16_t);
23572 ++encodeCount;
23573 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23574 pool->freeAll();
23575 stream->clearPool();
23576 }
23577 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23578 }
23579
23580 #endif
23581 #ifdef VK_EXT_extended_dynamic_state
vkCmdSetCullModeEXT(VkCommandBuffer commandBuffer,VkCullModeFlags cullMode,uint32_t doLock)23582 void VkEncoder::vkCmdSetCullModeEXT(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode,
23583 uint32_t doLock) {
23584 (void)doLock;
23585 bool queueSubmitWithCommandsEnabled =
23586 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23587 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23588 auto stream = mImpl->stream();
23589 auto pool = mImpl->pool();
23590 VkCommandBuffer local_commandBuffer;
23591 VkCullModeFlags local_cullMode;
23592 local_commandBuffer = commandBuffer;
23593 local_cullMode = cullMode;
23594 size_t count = 0;
23595 size_t* countPtr = &count;
23596 {
23597 uint64_t cgen_var_0;
23598 *countPtr += 1 * 8;
23599 *countPtr += sizeof(VkCullModeFlags);
23600 }
23601 uint32_t packetSize_vkCmdSetCullModeEXT = 4 + 4 + count;
23602 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetCullModeEXT -= 8;
23603 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetCullModeEXT);
23604 uint8_t* packetBeginPtr = streamPtr;
23605 uint8_t** streamPtrPtr = &streamPtr;
23606 uint32_t opcode_vkCmdSetCullModeEXT = OP_vkCmdSetCullModeEXT;
23607 memcpy(streamPtr, &opcode_vkCmdSetCullModeEXT, sizeof(uint32_t));
23608 streamPtr += sizeof(uint32_t);
23609 memcpy(streamPtr, &packetSize_vkCmdSetCullModeEXT, sizeof(uint32_t));
23610 streamPtr += sizeof(uint32_t);
23611 if (!queueSubmitWithCommandsEnabled) {
23612 uint64_t cgen_var_0;
23613 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23614 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23615 *streamPtrPtr += 1 * 8;
23616 }
23617 memcpy(*streamPtrPtr, (VkCullModeFlags*)&local_cullMode, sizeof(VkCullModeFlags));
23618 *streamPtrPtr += sizeof(VkCullModeFlags);
23619 ++encodeCount;
23620 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23621 pool->freeAll();
23622 stream->clearPool();
23623 }
23624 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23625 }
23626
vkCmdSetFrontFaceEXT(VkCommandBuffer commandBuffer,VkFrontFace frontFace,uint32_t doLock)23627 void VkEncoder::vkCmdSetFrontFaceEXT(VkCommandBuffer commandBuffer, VkFrontFace frontFace,
23628 uint32_t doLock) {
23629 (void)doLock;
23630 bool queueSubmitWithCommandsEnabled =
23631 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23632 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23633 auto stream = mImpl->stream();
23634 auto pool = mImpl->pool();
23635 VkCommandBuffer local_commandBuffer;
23636 VkFrontFace local_frontFace;
23637 local_commandBuffer = commandBuffer;
23638 local_frontFace = frontFace;
23639 size_t count = 0;
23640 size_t* countPtr = &count;
23641 {
23642 uint64_t cgen_var_0;
23643 *countPtr += 1 * 8;
23644 *countPtr += sizeof(VkFrontFace);
23645 }
23646 uint32_t packetSize_vkCmdSetFrontFaceEXT = 4 + 4 + count;
23647 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetFrontFaceEXT -= 8;
23648 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetFrontFaceEXT);
23649 uint8_t* packetBeginPtr = streamPtr;
23650 uint8_t** streamPtrPtr = &streamPtr;
23651 uint32_t opcode_vkCmdSetFrontFaceEXT = OP_vkCmdSetFrontFaceEXT;
23652 memcpy(streamPtr, &opcode_vkCmdSetFrontFaceEXT, sizeof(uint32_t));
23653 streamPtr += sizeof(uint32_t);
23654 memcpy(streamPtr, &packetSize_vkCmdSetFrontFaceEXT, sizeof(uint32_t));
23655 streamPtr += sizeof(uint32_t);
23656 if (!queueSubmitWithCommandsEnabled) {
23657 uint64_t cgen_var_0;
23658 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23659 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23660 *streamPtrPtr += 1 * 8;
23661 }
23662 memcpy(*streamPtrPtr, (VkFrontFace*)&local_frontFace, sizeof(VkFrontFace));
23663 *streamPtrPtr += sizeof(VkFrontFace);
23664 ++encodeCount;
23665 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23666 pool->freeAll();
23667 stream->clearPool();
23668 }
23669 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23670 }
23671
vkCmdSetPrimitiveTopologyEXT(VkCommandBuffer commandBuffer,VkPrimitiveTopology primitiveTopology,uint32_t doLock)23672 void VkEncoder::vkCmdSetPrimitiveTopologyEXT(VkCommandBuffer commandBuffer,
23673 VkPrimitiveTopology primitiveTopology,
23674 uint32_t doLock) {
23675 (void)doLock;
23676 bool queueSubmitWithCommandsEnabled =
23677 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23678 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23679 auto stream = mImpl->stream();
23680 auto pool = mImpl->pool();
23681 VkCommandBuffer local_commandBuffer;
23682 VkPrimitiveTopology local_primitiveTopology;
23683 local_commandBuffer = commandBuffer;
23684 local_primitiveTopology = primitiveTopology;
23685 size_t count = 0;
23686 size_t* countPtr = &count;
23687 {
23688 uint64_t cgen_var_0;
23689 *countPtr += 1 * 8;
23690 *countPtr += sizeof(VkPrimitiveTopology);
23691 }
23692 uint32_t packetSize_vkCmdSetPrimitiveTopologyEXT = 4 + 4 + count;
23693 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetPrimitiveTopologyEXT -= 8;
23694 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetPrimitiveTopologyEXT);
23695 uint8_t* packetBeginPtr = streamPtr;
23696 uint8_t** streamPtrPtr = &streamPtr;
23697 uint32_t opcode_vkCmdSetPrimitiveTopologyEXT = OP_vkCmdSetPrimitiveTopologyEXT;
23698 memcpy(streamPtr, &opcode_vkCmdSetPrimitiveTopologyEXT, sizeof(uint32_t));
23699 streamPtr += sizeof(uint32_t);
23700 memcpy(streamPtr, &packetSize_vkCmdSetPrimitiveTopologyEXT, sizeof(uint32_t));
23701 streamPtr += sizeof(uint32_t);
23702 if (!queueSubmitWithCommandsEnabled) {
23703 uint64_t cgen_var_0;
23704 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23705 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23706 *streamPtrPtr += 1 * 8;
23707 }
23708 memcpy(*streamPtrPtr, (VkPrimitiveTopology*)&local_primitiveTopology,
23709 sizeof(VkPrimitiveTopology));
23710 *streamPtrPtr += sizeof(VkPrimitiveTopology);
23711 ++encodeCount;
23712 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23713 pool->freeAll();
23714 stream->clearPool();
23715 }
23716 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23717 }
23718
vkCmdSetViewportWithCountEXT(VkCommandBuffer commandBuffer,uint32_t viewportCount,const VkViewport * pViewports,uint32_t doLock)23719 void VkEncoder::vkCmdSetViewportWithCountEXT(VkCommandBuffer commandBuffer, uint32_t viewportCount,
23720 const VkViewport* pViewports, uint32_t doLock) {
23721 (void)doLock;
23722 bool queueSubmitWithCommandsEnabled =
23723 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23724 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23725 auto stream = mImpl->stream();
23726 auto pool = mImpl->pool();
23727 VkCommandBuffer local_commandBuffer;
23728 uint32_t local_viewportCount;
23729 VkViewport* local_pViewports;
23730 local_commandBuffer = commandBuffer;
23731 local_viewportCount = viewportCount;
23732 local_pViewports = nullptr;
23733 if (pViewports) {
23734 local_pViewports = (VkViewport*)pool->alloc(((viewportCount)) * sizeof(const VkViewport));
23735 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
23736 deepcopy_VkViewport(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pViewports + i,
23737 (VkViewport*)(local_pViewports + i));
23738 }
23739 }
23740 if (local_pViewports) {
23741 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
23742 transform_tohost_VkViewport(sResourceTracker, (VkViewport*)(local_pViewports + i));
23743 }
23744 }
23745 size_t count = 0;
23746 size_t* countPtr = &count;
23747 {
23748 uint64_t cgen_var_0;
23749 *countPtr += 1 * 8;
23750 *countPtr += sizeof(uint32_t);
23751 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
23752 count_VkViewport(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23753 (VkViewport*)(local_pViewports + i), countPtr);
23754 }
23755 }
23756 uint32_t packetSize_vkCmdSetViewportWithCountEXT = 4 + 4 + count;
23757 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetViewportWithCountEXT -= 8;
23758 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetViewportWithCountEXT);
23759 uint8_t* packetBeginPtr = streamPtr;
23760 uint8_t** streamPtrPtr = &streamPtr;
23761 uint32_t opcode_vkCmdSetViewportWithCountEXT = OP_vkCmdSetViewportWithCountEXT;
23762 memcpy(streamPtr, &opcode_vkCmdSetViewportWithCountEXT, sizeof(uint32_t));
23763 streamPtr += sizeof(uint32_t);
23764 memcpy(streamPtr, &packetSize_vkCmdSetViewportWithCountEXT, sizeof(uint32_t));
23765 streamPtr += sizeof(uint32_t);
23766 if (!queueSubmitWithCommandsEnabled) {
23767 uint64_t cgen_var_0;
23768 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23769 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23770 *streamPtrPtr += 1 * 8;
23771 }
23772 memcpy(*streamPtrPtr, (uint32_t*)&local_viewportCount, sizeof(uint32_t));
23773 *streamPtrPtr += sizeof(uint32_t);
23774 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i) {
23775 reservedmarshal_VkViewport(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23776 (VkViewport*)(local_pViewports + i), streamPtrPtr);
23777 }
23778 ++encodeCount;
23779 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23780 pool->freeAll();
23781 stream->clearPool();
23782 }
23783 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23784 }
23785
vkCmdSetScissorWithCountEXT(VkCommandBuffer commandBuffer,uint32_t scissorCount,const VkRect2D * pScissors,uint32_t doLock)23786 void VkEncoder::vkCmdSetScissorWithCountEXT(VkCommandBuffer commandBuffer, uint32_t scissorCount,
23787 const VkRect2D* pScissors, uint32_t doLock) {
23788 (void)doLock;
23789 bool queueSubmitWithCommandsEnabled =
23790 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23791 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23792 auto stream = mImpl->stream();
23793 auto pool = mImpl->pool();
23794 VkCommandBuffer local_commandBuffer;
23795 uint32_t local_scissorCount;
23796 VkRect2D* local_pScissors;
23797 local_commandBuffer = commandBuffer;
23798 local_scissorCount = scissorCount;
23799 local_pScissors = nullptr;
23800 if (pScissors) {
23801 local_pScissors = (VkRect2D*)pool->alloc(((scissorCount)) * sizeof(const VkRect2D));
23802 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
23803 deepcopy_VkRect2D(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pScissors + i,
23804 (VkRect2D*)(local_pScissors + i));
23805 }
23806 }
23807 if (local_pScissors) {
23808 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
23809 transform_tohost_VkRect2D(sResourceTracker, (VkRect2D*)(local_pScissors + i));
23810 }
23811 }
23812 size_t count = 0;
23813 size_t* countPtr = &count;
23814 {
23815 uint64_t cgen_var_0;
23816 *countPtr += 1 * 8;
23817 *countPtr += sizeof(uint32_t);
23818 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
23819 count_VkRect2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
23820 (VkRect2D*)(local_pScissors + i), countPtr);
23821 }
23822 }
23823 uint32_t packetSize_vkCmdSetScissorWithCountEXT = 4 + 4 + count;
23824 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetScissorWithCountEXT -= 8;
23825 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetScissorWithCountEXT);
23826 uint8_t* packetBeginPtr = streamPtr;
23827 uint8_t** streamPtrPtr = &streamPtr;
23828 uint32_t opcode_vkCmdSetScissorWithCountEXT = OP_vkCmdSetScissorWithCountEXT;
23829 memcpy(streamPtr, &opcode_vkCmdSetScissorWithCountEXT, sizeof(uint32_t));
23830 streamPtr += sizeof(uint32_t);
23831 memcpy(streamPtr, &packetSize_vkCmdSetScissorWithCountEXT, sizeof(uint32_t));
23832 streamPtr += sizeof(uint32_t);
23833 if (!queueSubmitWithCommandsEnabled) {
23834 uint64_t cgen_var_0;
23835 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23836 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23837 *streamPtrPtr += 1 * 8;
23838 }
23839 memcpy(*streamPtrPtr, (uint32_t*)&local_scissorCount, sizeof(uint32_t));
23840 *streamPtrPtr += sizeof(uint32_t);
23841 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i) {
23842 reservedmarshal_VkRect2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
23843 (VkRect2D*)(local_pScissors + i), streamPtrPtr);
23844 }
23845 ++encodeCount;
23846 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23847 pool->freeAll();
23848 stream->clearPool();
23849 }
23850 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23851 }
23852
vkCmdBindVertexBuffers2EXT(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets,const VkDeviceSize * pSizes,const VkDeviceSize * pStrides,uint32_t doLock)23853 void VkEncoder::vkCmdBindVertexBuffers2EXT(VkCommandBuffer commandBuffer, uint32_t firstBinding,
23854 uint32_t bindingCount, const VkBuffer* pBuffers,
23855 const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes,
23856 const VkDeviceSize* pStrides, uint32_t doLock) {
23857 (void)doLock;
23858 bool queueSubmitWithCommandsEnabled =
23859 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23860 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23861 auto stream = mImpl->stream();
23862 auto pool = mImpl->pool();
23863 VkCommandBuffer local_commandBuffer;
23864 uint32_t local_firstBinding;
23865 uint32_t local_bindingCount;
23866 VkBuffer* local_pBuffers;
23867 VkDeviceSize* local_pOffsets;
23868 VkDeviceSize* local_pSizes;
23869 VkDeviceSize* local_pStrides;
23870 local_commandBuffer = commandBuffer;
23871 local_firstBinding = firstBinding;
23872 local_bindingCount = bindingCount;
23873 // Avoiding deepcopy for pBuffers
23874 local_pBuffers = (VkBuffer*)pBuffers;
23875 // Avoiding deepcopy for pOffsets
23876 local_pOffsets = (VkDeviceSize*)pOffsets;
23877 // Avoiding deepcopy for pSizes
23878 local_pSizes = (VkDeviceSize*)pSizes;
23879 // Avoiding deepcopy for pStrides
23880 local_pStrides = (VkDeviceSize*)pStrides;
23881 size_t count = 0;
23882 size_t* countPtr = &count;
23883 {
23884 uint64_t cgen_var_0;
23885 *countPtr += 1 * 8;
23886 *countPtr += sizeof(uint32_t);
23887 *countPtr += sizeof(uint32_t);
23888 // WARNING PTR CHECK
23889 *countPtr += 8;
23890 if (local_pBuffers) {
23891 if (((bindingCount))) {
23892 *countPtr += ((bindingCount)) * 8;
23893 }
23894 }
23895 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
23896 // WARNING PTR CHECK
23897 *countPtr += 8;
23898 if (local_pSizes) {
23899 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
23900 }
23901 // WARNING PTR CHECK
23902 *countPtr += 8;
23903 if (local_pStrides) {
23904 *countPtr += ((bindingCount)) * sizeof(VkDeviceSize);
23905 }
23906 }
23907 uint32_t packetSize_vkCmdBindVertexBuffers2EXT = 4 + 4 + count;
23908 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBindVertexBuffers2EXT -= 8;
23909 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdBindVertexBuffers2EXT);
23910 uint8_t* packetBeginPtr = streamPtr;
23911 uint8_t** streamPtrPtr = &streamPtr;
23912 uint32_t opcode_vkCmdBindVertexBuffers2EXT = OP_vkCmdBindVertexBuffers2EXT;
23913 memcpy(streamPtr, &opcode_vkCmdBindVertexBuffers2EXT, sizeof(uint32_t));
23914 streamPtr += sizeof(uint32_t);
23915 memcpy(streamPtr, &packetSize_vkCmdBindVertexBuffers2EXT, sizeof(uint32_t));
23916 streamPtr += sizeof(uint32_t);
23917 if (!queueSubmitWithCommandsEnabled) {
23918 uint64_t cgen_var_0;
23919 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
23920 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
23921 *streamPtrPtr += 1 * 8;
23922 }
23923 memcpy(*streamPtrPtr, (uint32_t*)&local_firstBinding, sizeof(uint32_t));
23924 *streamPtrPtr += sizeof(uint32_t);
23925 memcpy(*streamPtrPtr, (uint32_t*)&local_bindingCount, sizeof(uint32_t));
23926 *streamPtrPtr += sizeof(uint32_t);
23927 // WARNING PTR CHECK
23928 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)local_pBuffers;
23929 memcpy((*streamPtrPtr), &cgen_var_0, 8);
23930 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
23931 *streamPtrPtr += 8;
23932 if (local_pBuffers) {
23933 if (((bindingCount))) {
23934 uint8_t* cgen_var_0_0_ptr = (uint8_t*)(*streamPtrPtr);
23935 for (uint32_t k = 0; k < ((bindingCount)); ++k) {
23936 uint64_t tmpval = get_host_u64_VkBuffer(local_pBuffers[k]);
23937 memcpy(cgen_var_0_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
23938 }
23939 *streamPtrPtr += 8 * ((bindingCount));
23940 }
23941 }
23942 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pOffsets, ((bindingCount)) * sizeof(VkDeviceSize));
23943 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
23944 // WARNING PTR CHECK
23945 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pSizes;
23946 memcpy((*streamPtrPtr), &cgen_var_1, 8);
23947 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
23948 *streamPtrPtr += 8;
23949 if (local_pSizes) {
23950 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pSizes, ((bindingCount)) * sizeof(VkDeviceSize));
23951 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
23952 }
23953 // WARNING PTR CHECK
23954 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pStrides;
23955 memcpy((*streamPtrPtr), &cgen_var_2, 8);
23956 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
23957 *streamPtrPtr += 8;
23958 if (local_pStrides) {
23959 memcpy(*streamPtrPtr, (VkDeviceSize*)local_pStrides,
23960 ((bindingCount)) * sizeof(VkDeviceSize));
23961 *streamPtrPtr += ((bindingCount)) * sizeof(VkDeviceSize);
23962 }
23963 ++encodeCount;
23964 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
23965 pool->freeAll();
23966 stream->clearPool();
23967 }
23968 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
23969 }
23970
vkCmdSetDepthTestEnableEXT(VkCommandBuffer commandBuffer,VkBool32 depthTestEnable,uint32_t doLock)23971 void VkEncoder::vkCmdSetDepthTestEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable,
23972 uint32_t doLock) {
23973 (void)doLock;
23974 bool queueSubmitWithCommandsEnabled =
23975 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
23976 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
23977 auto stream = mImpl->stream();
23978 auto pool = mImpl->pool();
23979 VkCommandBuffer local_commandBuffer;
23980 VkBool32 local_depthTestEnable;
23981 local_commandBuffer = commandBuffer;
23982 local_depthTestEnable = depthTestEnable;
23983 size_t count = 0;
23984 size_t* countPtr = &count;
23985 {
23986 uint64_t cgen_var_0;
23987 *countPtr += 1 * 8;
23988 *countPtr += sizeof(VkBool32);
23989 }
23990 uint32_t packetSize_vkCmdSetDepthTestEnableEXT = 4 + 4 + count;
23991 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthTestEnableEXT -= 8;
23992 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthTestEnableEXT);
23993 uint8_t* packetBeginPtr = streamPtr;
23994 uint8_t** streamPtrPtr = &streamPtr;
23995 uint32_t opcode_vkCmdSetDepthTestEnableEXT = OP_vkCmdSetDepthTestEnableEXT;
23996 memcpy(streamPtr, &opcode_vkCmdSetDepthTestEnableEXT, sizeof(uint32_t));
23997 streamPtr += sizeof(uint32_t);
23998 memcpy(streamPtr, &packetSize_vkCmdSetDepthTestEnableEXT, sizeof(uint32_t));
23999 streamPtr += sizeof(uint32_t);
24000 if (!queueSubmitWithCommandsEnabled) {
24001 uint64_t cgen_var_0;
24002 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24003 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24004 *streamPtrPtr += 1 * 8;
24005 }
24006 memcpy(*streamPtrPtr, (VkBool32*)&local_depthTestEnable, sizeof(VkBool32));
24007 *streamPtrPtr += sizeof(VkBool32);
24008 ++encodeCount;
24009 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24010 pool->freeAll();
24011 stream->clearPool();
24012 }
24013 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24014 }
24015
vkCmdSetDepthWriteEnableEXT(VkCommandBuffer commandBuffer,VkBool32 depthWriteEnable,uint32_t doLock)24016 void VkEncoder::vkCmdSetDepthWriteEnableEXT(VkCommandBuffer commandBuffer,
24017 VkBool32 depthWriteEnable, uint32_t doLock) {
24018 (void)doLock;
24019 bool queueSubmitWithCommandsEnabled =
24020 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24021 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24022 auto stream = mImpl->stream();
24023 auto pool = mImpl->pool();
24024 VkCommandBuffer local_commandBuffer;
24025 VkBool32 local_depthWriteEnable;
24026 local_commandBuffer = commandBuffer;
24027 local_depthWriteEnable = depthWriteEnable;
24028 size_t count = 0;
24029 size_t* countPtr = &count;
24030 {
24031 uint64_t cgen_var_0;
24032 *countPtr += 1 * 8;
24033 *countPtr += sizeof(VkBool32);
24034 }
24035 uint32_t packetSize_vkCmdSetDepthWriteEnableEXT = 4 + 4 + count;
24036 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthWriteEnableEXT -= 8;
24037 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthWriteEnableEXT);
24038 uint8_t* packetBeginPtr = streamPtr;
24039 uint8_t** streamPtrPtr = &streamPtr;
24040 uint32_t opcode_vkCmdSetDepthWriteEnableEXT = OP_vkCmdSetDepthWriteEnableEXT;
24041 memcpy(streamPtr, &opcode_vkCmdSetDepthWriteEnableEXT, sizeof(uint32_t));
24042 streamPtr += sizeof(uint32_t);
24043 memcpy(streamPtr, &packetSize_vkCmdSetDepthWriteEnableEXT, sizeof(uint32_t));
24044 streamPtr += sizeof(uint32_t);
24045 if (!queueSubmitWithCommandsEnabled) {
24046 uint64_t cgen_var_0;
24047 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24048 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24049 *streamPtrPtr += 1 * 8;
24050 }
24051 memcpy(*streamPtrPtr, (VkBool32*)&local_depthWriteEnable, sizeof(VkBool32));
24052 *streamPtrPtr += sizeof(VkBool32);
24053 ++encodeCount;
24054 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24055 pool->freeAll();
24056 stream->clearPool();
24057 }
24058 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24059 }
24060
vkCmdSetDepthCompareOpEXT(VkCommandBuffer commandBuffer,VkCompareOp depthCompareOp,uint32_t doLock)24061 void VkEncoder::vkCmdSetDepthCompareOpEXT(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp,
24062 uint32_t doLock) {
24063 (void)doLock;
24064 bool queueSubmitWithCommandsEnabled =
24065 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24066 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24067 auto stream = mImpl->stream();
24068 auto pool = mImpl->pool();
24069 VkCommandBuffer local_commandBuffer;
24070 VkCompareOp local_depthCompareOp;
24071 local_commandBuffer = commandBuffer;
24072 local_depthCompareOp = depthCompareOp;
24073 size_t count = 0;
24074 size_t* countPtr = &count;
24075 {
24076 uint64_t cgen_var_0;
24077 *countPtr += 1 * 8;
24078 *countPtr += sizeof(VkCompareOp);
24079 }
24080 uint32_t packetSize_vkCmdSetDepthCompareOpEXT = 4 + 4 + count;
24081 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthCompareOpEXT -= 8;
24082 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthCompareOpEXT);
24083 uint8_t* packetBeginPtr = streamPtr;
24084 uint8_t** streamPtrPtr = &streamPtr;
24085 uint32_t opcode_vkCmdSetDepthCompareOpEXT = OP_vkCmdSetDepthCompareOpEXT;
24086 memcpy(streamPtr, &opcode_vkCmdSetDepthCompareOpEXT, sizeof(uint32_t));
24087 streamPtr += sizeof(uint32_t);
24088 memcpy(streamPtr, &packetSize_vkCmdSetDepthCompareOpEXT, sizeof(uint32_t));
24089 streamPtr += sizeof(uint32_t);
24090 if (!queueSubmitWithCommandsEnabled) {
24091 uint64_t cgen_var_0;
24092 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24093 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24094 *streamPtrPtr += 1 * 8;
24095 }
24096 memcpy(*streamPtrPtr, (VkCompareOp*)&local_depthCompareOp, sizeof(VkCompareOp));
24097 *streamPtrPtr += sizeof(VkCompareOp);
24098 ++encodeCount;
24099 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24100 pool->freeAll();
24101 stream->clearPool();
24102 }
24103 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24104 }
24105
vkCmdSetDepthBoundsTestEnableEXT(VkCommandBuffer commandBuffer,VkBool32 depthBoundsTestEnable,uint32_t doLock)24106 void VkEncoder::vkCmdSetDepthBoundsTestEnableEXT(VkCommandBuffer commandBuffer,
24107 VkBool32 depthBoundsTestEnable, uint32_t doLock) {
24108 (void)doLock;
24109 bool queueSubmitWithCommandsEnabled =
24110 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24111 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24112 auto stream = mImpl->stream();
24113 auto pool = mImpl->pool();
24114 VkCommandBuffer local_commandBuffer;
24115 VkBool32 local_depthBoundsTestEnable;
24116 local_commandBuffer = commandBuffer;
24117 local_depthBoundsTestEnable = depthBoundsTestEnable;
24118 size_t count = 0;
24119 size_t* countPtr = &count;
24120 {
24121 uint64_t cgen_var_0;
24122 *countPtr += 1 * 8;
24123 *countPtr += sizeof(VkBool32);
24124 }
24125 uint32_t packetSize_vkCmdSetDepthBoundsTestEnableEXT = 4 + 4 + count;
24126 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthBoundsTestEnableEXT -= 8;
24127 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthBoundsTestEnableEXT);
24128 uint8_t* packetBeginPtr = streamPtr;
24129 uint8_t** streamPtrPtr = &streamPtr;
24130 uint32_t opcode_vkCmdSetDepthBoundsTestEnableEXT = OP_vkCmdSetDepthBoundsTestEnableEXT;
24131 memcpy(streamPtr, &opcode_vkCmdSetDepthBoundsTestEnableEXT, sizeof(uint32_t));
24132 streamPtr += sizeof(uint32_t);
24133 memcpy(streamPtr, &packetSize_vkCmdSetDepthBoundsTestEnableEXT, sizeof(uint32_t));
24134 streamPtr += sizeof(uint32_t);
24135 if (!queueSubmitWithCommandsEnabled) {
24136 uint64_t cgen_var_0;
24137 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24138 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24139 *streamPtrPtr += 1 * 8;
24140 }
24141 memcpy(*streamPtrPtr, (VkBool32*)&local_depthBoundsTestEnable, sizeof(VkBool32));
24142 *streamPtrPtr += sizeof(VkBool32);
24143 ++encodeCount;
24144 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24145 pool->freeAll();
24146 stream->clearPool();
24147 }
24148 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24149 }
24150
vkCmdSetStencilTestEnableEXT(VkCommandBuffer commandBuffer,VkBool32 stencilTestEnable,uint32_t doLock)24151 void VkEncoder::vkCmdSetStencilTestEnableEXT(VkCommandBuffer commandBuffer,
24152 VkBool32 stencilTestEnable, uint32_t doLock) {
24153 (void)doLock;
24154 bool queueSubmitWithCommandsEnabled =
24155 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24156 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24157 auto stream = mImpl->stream();
24158 auto pool = mImpl->pool();
24159 VkCommandBuffer local_commandBuffer;
24160 VkBool32 local_stencilTestEnable;
24161 local_commandBuffer = commandBuffer;
24162 local_stencilTestEnable = stencilTestEnable;
24163 size_t count = 0;
24164 size_t* countPtr = &count;
24165 {
24166 uint64_t cgen_var_0;
24167 *countPtr += 1 * 8;
24168 *countPtr += sizeof(VkBool32);
24169 }
24170 uint32_t packetSize_vkCmdSetStencilTestEnableEXT = 4 + 4 + count;
24171 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetStencilTestEnableEXT -= 8;
24172 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetStencilTestEnableEXT);
24173 uint8_t* packetBeginPtr = streamPtr;
24174 uint8_t** streamPtrPtr = &streamPtr;
24175 uint32_t opcode_vkCmdSetStencilTestEnableEXT = OP_vkCmdSetStencilTestEnableEXT;
24176 memcpy(streamPtr, &opcode_vkCmdSetStencilTestEnableEXT, sizeof(uint32_t));
24177 streamPtr += sizeof(uint32_t);
24178 memcpy(streamPtr, &packetSize_vkCmdSetStencilTestEnableEXT, sizeof(uint32_t));
24179 streamPtr += sizeof(uint32_t);
24180 if (!queueSubmitWithCommandsEnabled) {
24181 uint64_t cgen_var_0;
24182 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24183 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24184 *streamPtrPtr += 1 * 8;
24185 }
24186 memcpy(*streamPtrPtr, (VkBool32*)&local_stencilTestEnable, sizeof(VkBool32));
24187 *streamPtrPtr += sizeof(VkBool32);
24188 ++encodeCount;
24189 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24190 pool->freeAll();
24191 stream->clearPool();
24192 }
24193 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24194 }
24195
vkCmdSetStencilOpEXT(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,VkStencilOp failOp,VkStencilOp passOp,VkStencilOp depthFailOp,VkCompareOp compareOp,uint32_t doLock)24196 void VkEncoder::vkCmdSetStencilOpEXT(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask,
24197 VkStencilOp failOp, VkStencilOp passOp,
24198 VkStencilOp depthFailOp, VkCompareOp compareOp,
24199 uint32_t doLock) {
24200 (void)doLock;
24201 bool queueSubmitWithCommandsEnabled =
24202 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24203 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24204 auto stream = mImpl->stream();
24205 auto pool = mImpl->pool();
24206 VkCommandBuffer local_commandBuffer;
24207 VkStencilFaceFlags local_faceMask;
24208 VkStencilOp local_failOp;
24209 VkStencilOp local_passOp;
24210 VkStencilOp local_depthFailOp;
24211 VkCompareOp local_compareOp;
24212 local_commandBuffer = commandBuffer;
24213 local_faceMask = faceMask;
24214 local_failOp = failOp;
24215 local_passOp = passOp;
24216 local_depthFailOp = depthFailOp;
24217 local_compareOp = compareOp;
24218 size_t count = 0;
24219 size_t* countPtr = &count;
24220 {
24221 uint64_t cgen_var_0;
24222 *countPtr += 1 * 8;
24223 *countPtr += sizeof(VkStencilFaceFlags);
24224 *countPtr += sizeof(VkStencilOp);
24225 *countPtr += sizeof(VkStencilOp);
24226 *countPtr += sizeof(VkStencilOp);
24227 *countPtr += sizeof(VkCompareOp);
24228 }
24229 uint32_t packetSize_vkCmdSetStencilOpEXT = 4 + 4 + count;
24230 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetStencilOpEXT -= 8;
24231 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetStencilOpEXT);
24232 uint8_t* packetBeginPtr = streamPtr;
24233 uint8_t** streamPtrPtr = &streamPtr;
24234 uint32_t opcode_vkCmdSetStencilOpEXT = OP_vkCmdSetStencilOpEXT;
24235 memcpy(streamPtr, &opcode_vkCmdSetStencilOpEXT, sizeof(uint32_t));
24236 streamPtr += sizeof(uint32_t);
24237 memcpy(streamPtr, &packetSize_vkCmdSetStencilOpEXT, sizeof(uint32_t));
24238 streamPtr += sizeof(uint32_t);
24239 if (!queueSubmitWithCommandsEnabled) {
24240 uint64_t cgen_var_0;
24241 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24242 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24243 *streamPtrPtr += 1 * 8;
24244 }
24245 memcpy(*streamPtrPtr, (VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
24246 *streamPtrPtr += sizeof(VkStencilFaceFlags);
24247 memcpy(*streamPtrPtr, (VkStencilOp*)&local_failOp, sizeof(VkStencilOp));
24248 *streamPtrPtr += sizeof(VkStencilOp);
24249 memcpy(*streamPtrPtr, (VkStencilOp*)&local_passOp, sizeof(VkStencilOp));
24250 *streamPtrPtr += sizeof(VkStencilOp);
24251 memcpy(*streamPtrPtr, (VkStencilOp*)&local_depthFailOp, sizeof(VkStencilOp));
24252 *streamPtrPtr += sizeof(VkStencilOp);
24253 memcpy(*streamPtrPtr, (VkCompareOp*)&local_compareOp, sizeof(VkCompareOp));
24254 *streamPtrPtr += sizeof(VkCompareOp);
24255 ++encodeCount;
24256 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24257 pool->freeAll();
24258 stream->clearPool();
24259 }
24260 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24261 }
24262
24263 #endif
24264 #ifdef VK_EXT_host_image_copy
vkCopyMemoryToImageEXT(VkDevice device,const VkCopyMemoryToImageInfo * pCopyMemoryToImageInfo,uint32_t doLock)24265 VkResult VkEncoder::vkCopyMemoryToImageEXT(VkDevice device,
24266 const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo,
24267 uint32_t doLock) {
24268 (void)doLock;
24269 bool queueSubmitWithCommandsEnabled =
24270 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24271 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24272 auto stream = mImpl->stream();
24273 auto pool = mImpl->pool();
24274 VkDevice local_device;
24275 VkCopyMemoryToImageInfo* local_pCopyMemoryToImageInfo;
24276 local_device = device;
24277 local_pCopyMemoryToImageInfo = nullptr;
24278 if (pCopyMemoryToImageInfo) {
24279 local_pCopyMemoryToImageInfo =
24280 (VkCopyMemoryToImageInfo*)pool->alloc(sizeof(const VkCopyMemoryToImageInfo));
24281 deepcopy_VkCopyMemoryToImageInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyMemoryToImageInfo,
24282 (VkCopyMemoryToImageInfo*)(local_pCopyMemoryToImageInfo));
24283 }
24284 if (local_pCopyMemoryToImageInfo) {
24285 transform_tohost_VkCopyMemoryToImageInfo(
24286 sResourceTracker, (VkCopyMemoryToImageInfo*)(local_pCopyMemoryToImageInfo));
24287 }
24288 size_t count = 0;
24289 size_t* countPtr = &count;
24290 {
24291 uint64_t cgen_var_0;
24292 *countPtr += 1 * 8;
24293 count_VkCopyMemoryToImageInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24294 (VkCopyMemoryToImageInfo*)(local_pCopyMemoryToImageInfo),
24295 countPtr);
24296 }
24297 uint32_t packetSize_vkCopyMemoryToImageEXT =
24298 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24299 uint8_t* streamPtr = stream->reserve(packetSize_vkCopyMemoryToImageEXT);
24300 uint8_t* packetBeginPtr = streamPtr;
24301 uint8_t** streamPtrPtr = &streamPtr;
24302 uint32_t opcode_vkCopyMemoryToImageEXT = OP_vkCopyMemoryToImageEXT;
24303 uint32_t seqno;
24304 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24305 memcpy(streamPtr, &opcode_vkCopyMemoryToImageEXT, sizeof(uint32_t));
24306 streamPtr += sizeof(uint32_t);
24307 memcpy(streamPtr, &packetSize_vkCopyMemoryToImageEXT, sizeof(uint32_t));
24308 streamPtr += sizeof(uint32_t);
24309 if (queueSubmitWithCommandsEnabled) {
24310 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24311 streamPtr += sizeof(uint32_t);
24312 }
24313 uint64_t cgen_var_0;
24314 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24315 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24316 *streamPtrPtr += 1 * 8;
24317 reservedmarshal_VkCopyMemoryToImageInfo(
24318 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24319 (VkCopyMemoryToImageInfo*)(local_pCopyMemoryToImageInfo), streamPtrPtr);
24320 VkResult vkCopyMemoryToImageEXT_VkResult_return = (VkResult)0;
24321 stream->read(&vkCopyMemoryToImageEXT_VkResult_return, sizeof(VkResult));
24322 ++encodeCount;
24323 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24324 pool->freeAll();
24325 stream->clearPool();
24326 }
24327 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24328 return vkCopyMemoryToImageEXT_VkResult_return;
24329 }
24330
vkCopyImageToMemoryEXT(VkDevice device,const VkCopyImageToMemoryInfo * pCopyImageToMemoryInfo,uint32_t doLock)24331 VkResult VkEncoder::vkCopyImageToMemoryEXT(VkDevice device,
24332 const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo,
24333 uint32_t doLock) {
24334 (void)doLock;
24335 bool queueSubmitWithCommandsEnabled =
24336 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24337 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24338 auto stream = mImpl->stream();
24339 auto pool = mImpl->pool();
24340 VkDevice local_device;
24341 VkCopyImageToMemoryInfo* local_pCopyImageToMemoryInfo;
24342 local_device = device;
24343 local_pCopyImageToMemoryInfo = nullptr;
24344 if (pCopyImageToMemoryInfo) {
24345 local_pCopyImageToMemoryInfo =
24346 (VkCopyImageToMemoryInfo*)pool->alloc(sizeof(const VkCopyImageToMemoryInfo));
24347 deepcopy_VkCopyImageToMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageToMemoryInfo,
24348 (VkCopyImageToMemoryInfo*)(local_pCopyImageToMemoryInfo));
24349 }
24350 if (local_pCopyImageToMemoryInfo) {
24351 transform_tohost_VkCopyImageToMemoryInfo(
24352 sResourceTracker, (VkCopyImageToMemoryInfo*)(local_pCopyImageToMemoryInfo));
24353 }
24354 size_t count = 0;
24355 size_t* countPtr = &count;
24356 {
24357 uint64_t cgen_var_0;
24358 *countPtr += 1 * 8;
24359 count_VkCopyImageToMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24360 (VkCopyImageToMemoryInfo*)(local_pCopyImageToMemoryInfo),
24361 countPtr);
24362 }
24363 uint32_t packetSize_vkCopyImageToMemoryEXT =
24364 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24365 uint8_t* streamPtr = stream->reserve(packetSize_vkCopyImageToMemoryEXT);
24366 uint8_t* packetBeginPtr = streamPtr;
24367 uint8_t** streamPtrPtr = &streamPtr;
24368 uint32_t opcode_vkCopyImageToMemoryEXT = OP_vkCopyImageToMemoryEXT;
24369 uint32_t seqno;
24370 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24371 memcpy(streamPtr, &opcode_vkCopyImageToMemoryEXT, sizeof(uint32_t));
24372 streamPtr += sizeof(uint32_t);
24373 memcpy(streamPtr, &packetSize_vkCopyImageToMemoryEXT, sizeof(uint32_t));
24374 streamPtr += sizeof(uint32_t);
24375 if (queueSubmitWithCommandsEnabled) {
24376 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24377 streamPtr += sizeof(uint32_t);
24378 }
24379 uint64_t cgen_var_0;
24380 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24381 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24382 *streamPtrPtr += 1 * 8;
24383 reservedmarshal_VkCopyImageToMemoryInfo(
24384 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24385 (VkCopyImageToMemoryInfo*)(local_pCopyImageToMemoryInfo), streamPtrPtr);
24386 VkResult vkCopyImageToMemoryEXT_VkResult_return = (VkResult)0;
24387 stream->read(&vkCopyImageToMemoryEXT_VkResult_return, sizeof(VkResult));
24388 ++encodeCount;
24389 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24390 pool->freeAll();
24391 stream->clearPool();
24392 }
24393 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24394 return vkCopyImageToMemoryEXT_VkResult_return;
24395 }
24396
vkCopyImageToImageEXT(VkDevice device,const VkCopyImageToImageInfo * pCopyImageToImageInfo,uint32_t doLock)24397 VkResult VkEncoder::vkCopyImageToImageEXT(VkDevice device,
24398 const VkCopyImageToImageInfo* pCopyImageToImageInfo,
24399 uint32_t doLock) {
24400 (void)doLock;
24401 bool queueSubmitWithCommandsEnabled =
24402 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24403 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24404 auto stream = mImpl->stream();
24405 auto pool = mImpl->pool();
24406 VkDevice local_device;
24407 VkCopyImageToImageInfo* local_pCopyImageToImageInfo;
24408 local_device = device;
24409 local_pCopyImageToImageInfo = nullptr;
24410 if (pCopyImageToImageInfo) {
24411 local_pCopyImageToImageInfo =
24412 (VkCopyImageToImageInfo*)pool->alloc(sizeof(const VkCopyImageToImageInfo));
24413 deepcopy_VkCopyImageToImageInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageToImageInfo,
24414 (VkCopyImageToImageInfo*)(local_pCopyImageToImageInfo));
24415 }
24416 if (local_pCopyImageToImageInfo) {
24417 transform_tohost_VkCopyImageToImageInfo(
24418 sResourceTracker, (VkCopyImageToImageInfo*)(local_pCopyImageToImageInfo));
24419 }
24420 size_t count = 0;
24421 size_t* countPtr = &count;
24422 {
24423 uint64_t cgen_var_0;
24424 *countPtr += 1 * 8;
24425 count_VkCopyImageToImageInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24426 (VkCopyImageToImageInfo*)(local_pCopyImageToImageInfo),
24427 countPtr);
24428 }
24429 uint32_t packetSize_vkCopyImageToImageEXT =
24430 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24431 uint8_t* streamPtr = stream->reserve(packetSize_vkCopyImageToImageEXT);
24432 uint8_t* packetBeginPtr = streamPtr;
24433 uint8_t** streamPtrPtr = &streamPtr;
24434 uint32_t opcode_vkCopyImageToImageEXT = OP_vkCopyImageToImageEXT;
24435 uint32_t seqno;
24436 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24437 memcpy(streamPtr, &opcode_vkCopyImageToImageEXT, sizeof(uint32_t));
24438 streamPtr += sizeof(uint32_t);
24439 memcpy(streamPtr, &packetSize_vkCopyImageToImageEXT, sizeof(uint32_t));
24440 streamPtr += sizeof(uint32_t);
24441 if (queueSubmitWithCommandsEnabled) {
24442 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24443 streamPtr += sizeof(uint32_t);
24444 }
24445 uint64_t cgen_var_0;
24446 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24447 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24448 *streamPtrPtr += 1 * 8;
24449 reservedmarshal_VkCopyImageToImageInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24450 (VkCopyImageToImageInfo*)(local_pCopyImageToImageInfo),
24451 streamPtrPtr);
24452 VkResult vkCopyImageToImageEXT_VkResult_return = (VkResult)0;
24453 stream->read(&vkCopyImageToImageEXT_VkResult_return, sizeof(VkResult));
24454 ++encodeCount;
24455 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24456 pool->freeAll();
24457 stream->clearPool();
24458 }
24459 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24460 return vkCopyImageToImageEXT_VkResult_return;
24461 }
24462
vkTransitionImageLayoutEXT(VkDevice device,uint32_t transitionCount,const VkHostImageLayoutTransitionInfo * pTransitions,uint32_t doLock)24463 VkResult VkEncoder::vkTransitionImageLayoutEXT(VkDevice device, uint32_t transitionCount,
24464 const VkHostImageLayoutTransitionInfo* pTransitions,
24465 uint32_t doLock) {
24466 (void)doLock;
24467 bool queueSubmitWithCommandsEnabled =
24468 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24469 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24470 auto stream = mImpl->stream();
24471 auto pool = mImpl->pool();
24472 VkDevice local_device;
24473 uint32_t local_transitionCount;
24474 VkHostImageLayoutTransitionInfo* local_pTransitions;
24475 local_device = device;
24476 local_transitionCount = transitionCount;
24477 local_pTransitions = nullptr;
24478 if (pTransitions) {
24479 local_pTransitions = (VkHostImageLayoutTransitionInfo*)pool->alloc(
24480 ((transitionCount)) * sizeof(const VkHostImageLayoutTransitionInfo));
24481 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
24482 deepcopy_VkHostImageLayoutTransitionInfo(
24483 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pTransitions + i,
24484 (VkHostImageLayoutTransitionInfo*)(local_pTransitions + i));
24485 }
24486 }
24487 if (local_pTransitions) {
24488 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
24489 transform_tohost_VkHostImageLayoutTransitionInfo(
24490 sResourceTracker, (VkHostImageLayoutTransitionInfo*)(local_pTransitions + i));
24491 }
24492 }
24493 size_t count = 0;
24494 size_t* countPtr = &count;
24495 {
24496 uint64_t cgen_var_0;
24497 *countPtr += 1 * 8;
24498 *countPtr += sizeof(uint32_t);
24499 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
24500 count_VkHostImageLayoutTransitionInfo(
24501 sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24502 (VkHostImageLayoutTransitionInfo*)(local_pTransitions + i), countPtr);
24503 }
24504 }
24505 uint32_t packetSize_vkTransitionImageLayoutEXT =
24506 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24507 uint8_t* streamPtr = stream->reserve(packetSize_vkTransitionImageLayoutEXT);
24508 uint8_t* packetBeginPtr = streamPtr;
24509 uint8_t** streamPtrPtr = &streamPtr;
24510 uint32_t opcode_vkTransitionImageLayoutEXT = OP_vkTransitionImageLayoutEXT;
24511 uint32_t seqno;
24512 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24513 memcpy(streamPtr, &opcode_vkTransitionImageLayoutEXT, sizeof(uint32_t));
24514 streamPtr += sizeof(uint32_t);
24515 memcpy(streamPtr, &packetSize_vkTransitionImageLayoutEXT, sizeof(uint32_t));
24516 streamPtr += sizeof(uint32_t);
24517 if (queueSubmitWithCommandsEnabled) {
24518 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24519 streamPtr += sizeof(uint32_t);
24520 }
24521 uint64_t cgen_var_0;
24522 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24523 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24524 *streamPtrPtr += 1 * 8;
24525 memcpy(*streamPtrPtr, (uint32_t*)&local_transitionCount, sizeof(uint32_t));
24526 *streamPtrPtr += sizeof(uint32_t);
24527 for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
24528 reservedmarshal_VkHostImageLayoutTransitionInfo(
24529 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24530 (VkHostImageLayoutTransitionInfo*)(local_pTransitions + i), streamPtrPtr);
24531 }
24532 VkResult vkTransitionImageLayoutEXT_VkResult_return = (VkResult)0;
24533 stream->read(&vkTransitionImageLayoutEXT_VkResult_return, sizeof(VkResult));
24534 ++encodeCount;
24535 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24536 pool->freeAll();
24537 stream->clearPool();
24538 }
24539 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24540 return vkTransitionImageLayoutEXT_VkResult_return;
24541 }
24542
vkGetImageSubresourceLayout2EXT(VkDevice device,VkImage image,const VkImageSubresource2 * pSubresource,VkSubresourceLayout2 * pLayout,uint32_t doLock)24543 void VkEncoder::vkGetImageSubresourceLayout2EXT(VkDevice device, VkImage image,
24544 const VkImageSubresource2* pSubresource,
24545 VkSubresourceLayout2* pLayout, uint32_t doLock) {
24546 (void)doLock;
24547 bool queueSubmitWithCommandsEnabled =
24548 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24549 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24550 auto stream = mImpl->stream();
24551 auto pool = mImpl->pool();
24552 VkDevice local_device;
24553 VkImage local_image;
24554 VkImageSubresource2* local_pSubresource;
24555 local_device = device;
24556 local_image = image;
24557 local_pSubresource = nullptr;
24558 if (pSubresource) {
24559 local_pSubresource = (VkImageSubresource2*)pool->alloc(sizeof(const VkImageSubresource2));
24560 deepcopy_VkImageSubresource2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubresource,
24561 (VkImageSubresource2*)(local_pSubresource));
24562 }
24563 if (local_pSubresource) {
24564 transform_tohost_VkImageSubresource2(sResourceTracker,
24565 (VkImageSubresource2*)(local_pSubresource));
24566 }
24567 size_t count = 0;
24568 size_t* countPtr = &count;
24569 {
24570 uint64_t cgen_var_0;
24571 *countPtr += 1 * 8;
24572 uint64_t cgen_var_1;
24573 *countPtr += 1 * 8;
24574 count_VkImageSubresource2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24575 (VkImageSubresource2*)(local_pSubresource), countPtr);
24576 count_VkSubresourceLayout2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24577 (VkSubresourceLayout2*)(pLayout), countPtr);
24578 }
24579 uint32_t packetSize_vkGetImageSubresourceLayout2EXT =
24580 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24581 uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageSubresourceLayout2EXT);
24582 uint8_t* packetBeginPtr = streamPtr;
24583 uint8_t** streamPtrPtr = &streamPtr;
24584 uint32_t opcode_vkGetImageSubresourceLayout2EXT = OP_vkGetImageSubresourceLayout2EXT;
24585 uint32_t seqno;
24586 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24587 memcpy(streamPtr, &opcode_vkGetImageSubresourceLayout2EXT, sizeof(uint32_t));
24588 streamPtr += sizeof(uint32_t);
24589 memcpy(streamPtr, &packetSize_vkGetImageSubresourceLayout2EXT, sizeof(uint32_t));
24590 streamPtr += sizeof(uint32_t);
24591 if (queueSubmitWithCommandsEnabled) {
24592 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24593 streamPtr += sizeof(uint32_t);
24594 }
24595 uint64_t cgen_var_0;
24596 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24597 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24598 *streamPtrPtr += 1 * 8;
24599 uint64_t cgen_var_1;
24600 *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
24601 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
24602 *streamPtrPtr += 1 * 8;
24603 reservedmarshal_VkImageSubresource2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24604 (VkImageSubresource2*)(local_pSubresource), streamPtrPtr);
24605 reservedmarshal_VkSubresourceLayout2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24606 (VkSubresourceLayout2*)(pLayout), streamPtrPtr);
24607 unmarshal_VkSubresourceLayout2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24608 (VkSubresourceLayout2*)(pLayout));
24609 if (pLayout) {
24610 transform_fromhost_VkSubresourceLayout2(sResourceTracker, (VkSubresourceLayout2*)(pLayout));
24611 }
24612 ++encodeCount;
24613 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24614 pool->freeAll();
24615 stream->clearPool();
24616 }
24617 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24618 }
24619
24620 #endif
24621 #ifdef VK_EXT_private_data
vkCreatePrivateDataSlotEXT(VkDevice device,const VkPrivateDataSlotCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPrivateDataSlot * pPrivateDataSlot,uint32_t doLock)24622 VkResult VkEncoder::vkCreatePrivateDataSlotEXT(VkDevice device,
24623 const VkPrivateDataSlotCreateInfo* pCreateInfo,
24624 const VkAllocationCallbacks* pAllocator,
24625 VkPrivateDataSlot* pPrivateDataSlot,
24626 uint32_t doLock) {
24627 (void)doLock;
24628 bool queueSubmitWithCommandsEnabled =
24629 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24630 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24631 auto stream = mImpl->stream();
24632 auto pool = mImpl->pool();
24633 VkDevice local_device;
24634 VkPrivateDataSlotCreateInfo* local_pCreateInfo;
24635 VkAllocationCallbacks* local_pAllocator;
24636 local_device = device;
24637 local_pCreateInfo = nullptr;
24638 if (pCreateInfo) {
24639 local_pCreateInfo =
24640 (VkPrivateDataSlotCreateInfo*)pool->alloc(sizeof(const VkPrivateDataSlotCreateInfo));
24641 deepcopy_VkPrivateDataSlotCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
24642 (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo));
24643 }
24644 local_pAllocator = nullptr;
24645 if (pAllocator) {
24646 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
24647 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
24648 (VkAllocationCallbacks*)(local_pAllocator));
24649 }
24650 local_pAllocator = nullptr;
24651 if (local_pCreateInfo) {
24652 transform_tohost_VkPrivateDataSlotCreateInfo(
24653 sResourceTracker, (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo));
24654 }
24655 if (local_pAllocator) {
24656 transform_tohost_VkAllocationCallbacks(sResourceTracker,
24657 (VkAllocationCallbacks*)(local_pAllocator));
24658 }
24659 size_t count = 0;
24660 size_t* countPtr = &count;
24661 {
24662 uint64_t cgen_var_0;
24663 *countPtr += 1 * 8;
24664 count_VkPrivateDataSlotCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24665 (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo),
24666 countPtr);
24667 // WARNING PTR CHECK
24668 *countPtr += 8;
24669 if (local_pAllocator) {
24670 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24671 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
24672 }
24673 uint64_t cgen_var_1;
24674 *countPtr += 8;
24675 }
24676 uint32_t packetSize_vkCreatePrivateDataSlotEXT =
24677 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24678 uint8_t* streamPtr = stream->reserve(packetSize_vkCreatePrivateDataSlotEXT);
24679 uint8_t* packetBeginPtr = streamPtr;
24680 uint8_t** streamPtrPtr = &streamPtr;
24681 uint32_t opcode_vkCreatePrivateDataSlotEXT = OP_vkCreatePrivateDataSlotEXT;
24682 uint32_t seqno;
24683 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24684 memcpy(streamPtr, &opcode_vkCreatePrivateDataSlotEXT, sizeof(uint32_t));
24685 streamPtr += sizeof(uint32_t);
24686 memcpy(streamPtr, &packetSize_vkCreatePrivateDataSlotEXT, sizeof(uint32_t));
24687 streamPtr += sizeof(uint32_t);
24688 if (queueSubmitWithCommandsEnabled) {
24689 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24690 streamPtr += sizeof(uint32_t);
24691 }
24692 uint64_t cgen_var_0;
24693 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24694 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24695 *streamPtrPtr += 1 * 8;
24696 reservedmarshal_VkPrivateDataSlotCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24697 (VkPrivateDataSlotCreateInfo*)(local_pCreateInfo),
24698 streamPtrPtr);
24699 // WARNING PTR CHECK
24700 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
24701 memcpy((*streamPtrPtr), &cgen_var_1, 8);
24702 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24703 *streamPtrPtr += 8;
24704 if (local_pAllocator) {
24705 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24706 (VkAllocationCallbacks*)(local_pAllocator),
24707 streamPtrPtr);
24708 }
24709 /* is handle, possibly out */;
24710 uint64_t cgen_var_2;
24711 *&cgen_var_2 = (uint64_t)((*pPrivateDataSlot));
24712 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
24713 *streamPtrPtr += 8;
24714 /* is handle, possibly out */;
24715 uint64_t cgen_var_3;
24716 stream->read((uint64_t*)&cgen_var_3, 8);
24717 stream->handleMapping()->mapHandles_u64_VkPrivateDataSlot(
24718 &cgen_var_3, (VkPrivateDataSlot*)pPrivateDataSlot, 1);
24719 VkResult vkCreatePrivateDataSlotEXT_VkResult_return = (VkResult)0;
24720 stream->read(&vkCreatePrivateDataSlotEXT_VkResult_return, sizeof(VkResult));
24721 ++encodeCount;
24722 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24723 pool->freeAll();
24724 stream->clearPool();
24725 }
24726 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24727 return vkCreatePrivateDataSlotEXT_VkResult_return;
24728 }
24729
vkDestroyPrivateDataSlotEXT(VkDevice device,VkPrivateDataSlot privateDataSlot,const VkAllocationCallbacks * pAllocator,uint32_t doLock)24730 void VkEncoder::vkDestroyPrivateDataSlotEXT(VkDevice device, VkPrivateDataSlot privateDataSlot,
24731 const VkAllocationCallbacks* pAllocator,
24732 uint32_t doLock) {
24733 (void)doLock;
24734 bool queueSubmitWithCommandsEnabled =
24735 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24736 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24737 auto stream = mImpl->stream();
24738 auto pool = mImpl->pool();
24739 VkDevice local_device;
24740 VkPrivateDataSlot local_privateDataSlot;
24741 VkAllocationCallbacks* local_pAllocator;
24742 local_device = device;
24743 local_privateDataSlot = privateDataSlot;
24744 local_pAllocator = nullptr;
24745 if (pAllocator) {
24746 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
24747 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
24748 (VkAllocationCallbacks*)(local_pAllocator));
24749 }
24750 local_pAllocator = nullptr;
24751 if (local_pAllocator) {
24752 transform_tohost_VkAllocationCallbacks(sResourceTracker,
24753 (VkAllocationCallbacks*)(local_pAllocator));
24754 }
24755 size_t count = 0;
24756 size_t* countPtr = &count;
24757 {
24758 uint64_t cgen_var_0;
24759 *countPtr += 1 * 8;
24760 uint64_t cgen_var_1;
24761 *countPtr += 1 * 8;
24762 // WARNING PTR CHECK
24763 *countPtr += 8;
24764 if (local_pAllocator) {
24765 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
24766 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
24767 }
24768 }
24769 uint32_t packetSize_vkDestroyPrivateDataSlotEXT =
24770 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24771 uint8_t* streamPtr = stream->reserve(packetSize_vkDestroyPrivateDataSlotEXT);
24772 uint8_t* packetBeginPtr = streamPtr;
24773 uint8_t** streamPtrPtr = &streamPtr;
24774 uint32_t opcode_vkDestroyPrivateDataSlotEXT = OP_vkDestroyPrivateDataSlotEXT;
24775 uint32_t seqno;
24776 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24777 memcpy(streamPtr, &opcode_vkDestroyPrivateDataSlotEXT, sizeof(uint32_t));
24778 streamPtr += sizeof(uint32_t);
24779 memcpy(streamPtr, &packetSize_vkDestroyPrivateDataSlotEXT, sizeof(uint32_t));
24780 streamPtr += sizeof(uint32_t);
24781 if (queueSubmitWithCommandsEnabled) {
24782 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24783 streamPtr += sizeof(uint32_t);
24784 }
24785 uint64_t cgen_var_0;
24786 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24787 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24788 *streamPtrPtr += 1 * 8;
24789 uint64_t cgen_var_1;
24790 *&cgen_var_1 = get_host_u64_VkPrivateDataSlot((*&local_privateDataSlot));
24791 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
24792 *streamPtrPtr += 1 * 8;
24793 // WARNING PTR CHECK
24794 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
24795 memcpy((*streamPtrPtr), &cgen_var_2, 8);
24796 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
24797 *streamPtrPtr += 8;
24798 if (local_pAllocator) {
24799 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
24800 (VkAllocationCallbacks*)(local_pAllocator),
24801 streamPtrPtr);
24802 }
24803 stream->flush();
24804 ++encodeCount;
24805 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24806 pool->freeAll();
24807 stream->clearPool();
24808 }
24809 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24810 }
24811
vkSetPrivateDataEXT(VkDevice device,VkObjectType objectType,uint64_t objectHandle,VkPrivateDataSlot privateDataSlot,uint64_t data,uint32_t doLock)24812 VkResult VkEncoder::vkSetPrivateDataEXT(VkDevice device, VkObjectType objectType,
24813 uint64_t objectHandle, VkPrivateDataSlot privateDataSlot,
24814 uint64_t data, uint32_t doLock) {
24815 (void)doLock;
24816 bool queueSubmitWithCommandsEnabled =
24817 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24818 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24819 auto stream = mImpl->stream();
24820 auto pool = mImpl->pool();
24821 VkDevice local_device;
24822 VkObjectType local_objectType;
24823 uint64_t local_objectHandle;
24824 VkPrivateDataSlot local_privateDataSlot;
24825 uint64_t local_data;
24826 local_device = device;
24827 local_objectType = objectType;
24828 local_objectHandle = objectHandle;
24829 local_privateDataSlot = privateDataSlot;
24830 local_data = data;
24831 size_t count = 0;
24832 size_t* countPtr = &count;
24833 {
24834 uint64_t cgen_var_0;
24835 *countPtr += 1 * 8;
24836 *countPtr += sizeof(VkObjectType);
24837 *countPtr += sizeof(uint64_t);
24838 uint64_t cgen_var_1;
24839 *countPtr += 1 * 8;
24840 *countPtr += sizeof(uint64_t);
24841 }
24842 uint32_t packetSize_vkSetPrivateDataEXT =
24843 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24844 uint8_t* streamPtr = stream->reserve(packetSize_vkSetPrivateDataEXT);
24845 uint8_t* packetBeginPtr = streamPtr;
24846 uint8_t** streamPtrPtr = &streamPtr;
24847 uint32_t opcode_vkSetPrivateDataEXT = OP_vkSetPrivateDataEXT;
24848 uint32_t seqno;
24849 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24850 memcpy(streamPtr, &opcode_vkSetPrivateDataEXT, sizeof(uint32_t));
24851 streamPtr += sizeof(uint32_t);
24852 memcpy(streamPtr, &packetSize_vkSetPrivateDataEXT, sizeof(uint32_t));
24853 streamPtr += sizeof(uint32_t);
24854 if (queueSubmitWithCommandsEnabled) {
24855 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24856 streamPtr += sizeof(uint32_t);
24857 }
24858 uint64_t cgen_var_0;
24859 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24860 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24861 *streamPtrPtr += 1 * 8;
24862 memcpy(*streamPtrPtr, (VkObjectType*)&local_objectType, sizeof(VkObjectType));
24863 *streamPtrPtr += sizeof(VkObjectType);
24864 memcpy(*streamPtrPtr, (uint64_t*)&local_objectHandle, sizeof(uint64_t));
24865 *streamPtrPtr += sizeof(uint64_t);
24866 uint64_t cgen_var_1;
24867 *&cgen_var_1 = get_host_u64_VkPrivateDataSlot((*&local_privateDataSlot));
24868 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
24869 *streamPtrPtr += 1 * 8;
24870 memcpy(*streamPtrPtr, (uint64_t*)&local_data, sizeof(uint64_t));
24871 *streamPtrPtr += sizeof(uint64_t);
24872 VkResult vkSetPrivateDataEXT_VkResult_return = (VkResult)0;
24873 stream->read(&vkSetPrivateDataEXT_VkResult_return, sizeof(VkResult));
24874 ++encodeCount;
24875 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24876 pool->freeAll();
24877 stream->clearPool();
24878 }
24879 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24880 return vkSetPrivateDataEXT_VkResult_return;
24881 }
24882
vkGetPrivateDataEXT(VkDevice device,VkObjectType objectType,uint64_t objectHandle,VkPrivateDataSlot privateDataSlot,uint64_t * pData,uint32_t doLock)24883 void VkEncoder::vkGetPrivateDataEXT(VkDevice device, VkObjectType objectType, uint64_t objectHandle,
24884 VkPrivateDataSlot privateDataSlot, uint64_t* pData,
24885 uint32_t doLock) {
24886 (void)doLock;
24887 bool queueSubmitWithCommandsEnabled =
24888 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24889 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24890 auto stream = mImpl->stream();
24891 auto pool = mImpl->pool();
24892 VkDevice local_device;
24893 VkObjectType local_objectType;
24894 uint64_t local_objectHandle;
24895 VkPrivateDataSlot local_privateDataSlot;
24896 local_device = device;
24897 local_objectType = objectType;
24898 local_objectHandle = objectHandle;
24899 local_privateDataSlot = privateDataSlot;
24900 size_t count = 0;
24901 size_t* countPtr = &count;
24902 {
24903 uint64_t cgen_var_0;
24904 *countPtr += 1 * 8;
24905 *countPtr += sizeof(VkObjectType);
24906 *countPtr += sizeof(uint64_t);
24907 uint64_t cgen_var_1;
24908 *countPtr += 1 * 8;
24909 *countPtr += sizeof(uint64_t);
24910 }
24911 uint32_t packetSize_vkGetPrivateDataEXT =
24912 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
24913 uint8_t* streamPtr = stream->reserve(packetSize_vkGetPrivateDataEXT);
24914 uint8_t* packetBeginPtr = streamPtr;
24915 uint8_t** streamPtrPtr = &streamPtr;
24916 uint32_t opcode_vkGetPrivateDataEXT = OP_vkGetPrivateDataEXT;
24917 uint32_t seqno;
24918 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
24919 memcpy(streamPtr, &opcode_vkGetPrivateDataEXT, sizeof(uint32_t));
24920 streamPtr += sizeof(uint32_t);
24921 memcpy(streamPtr, &packetSize_vkGetPrivateDataEXT, sizeof(uint32_t));
24922 streamPtr += sizeof(uint32_t);
24923 if (queueSubmitWithCommandsEnabled) {
24924 memcpy(streamPtr, &seqno, sizeof(uint32_t));
24925 streamPtr += sizeof(uint32_t);
24926 }
24927 uint64_t cgen_var_0;
24928 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
24929 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24930 *streamPtrPtr += 1 * 8;
24931 memcpy(*streamPtrPtr, (VkObjectType*)&local_objectType, sizeof(VkObjectType));
24932 *streamPtrPtr += sizeof(VkObjectType);
24933 memcpy(*streamPtrPtr, (uint64_t*)&local_objectHandle, sizeof(uint64_t));
24934 *streamPtrPtr += sizeof(uint64_t);
24935 uint64_t cgen_var_1;
24936 *&cgen_var_1 = get_host_u64_VkPrivateDataSlot((*&local_privateDataSlot));
24937 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
24938 *streamPtrPtr += 1 * 8;
24939 memcpy(*streamPtrPtr, (uint64_t*)pData, sizeof(uint64_t));
24940 *streamPtrPtr += sizeof(uint64_t);
24941 stream->read((uint64_t*)pData, sizeof(uint64_t));
24942 ++encodeCount;
24943 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24944 pool->freeAll();
24945 stream->clearPool();
24946 }
24947 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24948 }
24949
24950 #endif
24951 #ifdef VK_EXT_extended_dynamic_state2
vkCmdSetPatchControlPointsEXT(VkCommandBuffer commandBuffer,uint32_t patchControlPoints,uint32_t doLock)24952 void VkEncoder::vkCmdSetPatchControlPointsEXT(VkCommandBuffer commandBuffer,
24953 uint32_t patchControlPoints, uint32_t doLock) {
24954 (void)doLock;
24955 bool queueSubmitWithCommandsEnabled =
24956 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
24957 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
24958 auto stream = mImpl->stream();
24959 auto pool = mImpl->pool();
24960 VkCommandBuffer local_commandBuffer;
24961 uint32_t local_patchControlPoints;
24962 local_commandBuffer = commandBuffer;
24963 local_patchControlPoints = patchControlPoints;
24964 size_t count = 0;
24965 size_t* countPtr = &count;
24966 {
24967 uint64_t cgen_var_0;
24968 *countPtr += 1 * 8;
24969 *countPtr += sizeof(uint32_t);
24970 }
24971 uint32_t packetSize_vkCmdSetPatchControlPointsEXT = 4 + 4 + count;
24972 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetPatchControlPointsEXT -= 8;
24973 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetPatchControlPointsEXT);
24974 uint8_t* packetBeginPtr = streamPtr;
24975 uint8_t** streamPtrPtr = &streamPtr;
24976 uint32_t opcode_vkCmdSetPatchControlPointsEXT = OP_vkCmdSetPatchControlPointsEXT;
24977 memcpy(streamPtr, &opcode_vkCmdSetPatchControlPointsEXT, sizeof(uint32_t));
24978 streamPtr += sizeof(uint32_t);
24979 memcpy(streamPtr, &packetSize_vkCmdSetPatchControlPointsEXT, sizeof(uint32_t));
24980 streamPtr += sizeof(uint32_t);
24981 if (!queueSubmitWithCommandsEnabled) {
24982 uint64_t cgen_var_0;
24983 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
24984 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
24985 *streamPtrPtr += 1 * 8;
24986 }
24987 memcpy(*streamPtrPtr, (uint32_t*)&local_patchControlPoints, sizeof(uint32_t));
24988 *streamPtrPtr += sizeof(uint32_t);
24989 ++encodeCount;
24990 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
24991 pool->freeAll();
24992 stream->clearPool();
24993 }
24994 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
24995 }
24996
vkCmdSetRasterizerDiscardEnableEXT(VkCommandBuffer commandBuffer,VkBool32 rasterizerDiscardEnable,uint32_t doLock)24997 void VkEncoder::vkCmdSetRasterizerDiscardEnableEXT(VkCommandBuffer commandBuffer,
24998 VkBool32 rasterizerDiscardEnable,
24999 uint32_t doLock) {
25000 (void)doLock;
25001 bool queueSubmitWithCommandsEnabled =
25002 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25003 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25004 auto stream = mImpl->stream();
25005 auto pool = mImpl->pool();
25006 VkCommandBuffer local_commandBuffer;
25007 VkBool32 local_rasterizerDiscardEnable;
25008 local_commandBuffer = commandBuffer;
25009 local_rasterizerDiscardEnable = rasterizerDiscardEnable;
25010 size_t count = 0;
25011 size_t* countPtr = &count;
25012 {
25013 uint64_t cgen_var_0;
25014 *countPtr += 1 * 8;
25015 *countPtr += sizeof(VkBool32);
25016 }
25017 uint32_t packetSize_vkCmdSetRasterizerDiscardEnableEXT = 4 + 4 + count;
25018 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetRasterizerDiscardEnableEXT -= 8;
25019 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetRasterizerDiscardEnableEXT);
25020 uint8_t* packetBeginPtr = streamPtr;
25021 uint8_t** streamPtrPtr = &streamPtr;
25022 uint32_t opcode_vkCmdSetRasterizerDiscardEnableEXT = OP_vkCmdSetRasterizerDiscardEnableEXT;
25023 memcpy(streamPtr, &opcode_vkCmdSetRasterizerDiscardEnableEXT, sizeof(uint32_t));
25024 streamPtr += sizeof(uint32_t);
25025 memcpy(streamPtr, &packetSize_vkCmdSetRasterizerDiscardEnableEXT, sizeof(uint32_t));
25026 streamPtr += sizeof(uint32_t);
25027 if (!queueSubmitWithCommandsEnabled) {
25028 uint64_t cgen_var_0;
25029 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
25030 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25031 *streamPtrPtr += 1 * 8;
25032 }
25033 memcpy(*streamPtrPtr, (VkBool32*)&local_rasterizerDiscardEnable, sizeof(VkBool32));
25034 *streamPtrPtr += sizeof(VkBool32);
25035 ++encodeCount;
25036 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25037 pool->freeAll();
25038 stream->clearPool();
25039 }
25040 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25041 }
25042
vkCmdSetDepthBiasEnableEXT(VkCommandBuffer commandBuffer,VkBool32 depthBiasEnable,uint32_t doLock)25043 void VkEncoder::vkCmdSetDepthBiasEnableEXT(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable,
25044 uint32_t doLock) {
25045 (void)doLock;
25046 bool queueSubmitWithCommandsEnabled =
25047 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25048 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25049 auto stream = mImpl->stream();
25050 auto pool = mImpl->pool();
25051 VkCommandBuffer local_commandBuffer;
25052 VkBool32 local_depthBiasEnable;
25053 local_commandBuffer = commandBuffer;
25054 local_depthBiasEnable = depthBiasEnable;
25055 size_t count = 0;
25056 size_t* countPtr = &count;
25057 {
25058 uint64_t cgen_var_0;
25059 *countPtr += 1 * 8;
25060 *countPtr += sizeof(VkBool32);
25061 }
25062 uint32_t packetSize_vkCmdSetDepthBiasEnableEXT = 4 + 4 + count;
25063 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetDepthBiasEnableEXT -= 8;
25064 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetDepthBiasEnableEXT);
25065 uint8_t* packetBeginPtr = streamPtr;
25066 uint8_t** streamPtrPtr = &streamPtr;
25067 uint32_t opcode_vkCmdSetDepthBiasEnableEXT = OP_vkCmdSetDepthBiasEnableEXT;
25068 memcpy(streamPtr, &opcode_vkCmdSetDepthBiasEnableEXT, sizeof(uint32_t));
25069 streamPtr += sizeof(uint32_t);
25070 memcpy(streamPtr, &packetSize_vkCmdSetDepthBiasEnableEXT, sizeof(uint32_t));
25071 streamPtr += sizeof(uint32_t);
25072 if (!queueSubmitWithCommandsEnabled) {
25073 uint64_t cgen_var_0;
25074 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
25075 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25076 *streamPtrPtr += 1 * 8;
25077 }
25078 memcpy(*streamPtrPtr, (VkBool32*)&local_depthBiasEnable, sizeof(VkBool32));
25079 *streamPtrPtr += sizeof(VkBool32);
25080 ++encodeCount;
25081 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25082 pool->freeAll();
25083 stream->clearPool();
25084 }
25085 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25086 }
25087
vkCmdSetLogicOpEXT(VkCommandBuffer commandBuffer,VkLogicOp logicOp,uint32_t doLock)25088 void VkEncoder::vkCmdSetLogicOpEXT(VkCommandBuffer commandBuffer, VkLogicOp logicOp,
25089 uint32_t doLock) {
25090 (void)doLock;
25091 bool queueSubmitWithCommandsEnabled =
25092 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25093 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25094 auto stream = mImpl->stream();
25095 auto pool = mImpl->pool();
25096 VkCommandBuffer local_commandBuffer;
25097 VkLogicOp local_logicOp;
25098 local_commandBuffer = commandBuffer;
25099 local_logicOp = logicOp;
25100 size_t count = 0;
25101 size_t* countPtr = &count;
25102 {
25103 uint64_t cgen_var_0;
25104 *countPtr += 1 * 8;
25105 *countPtr += sizeof(VkLogicOp);
25106 }
25107 uint32_t packetSize_vkCmdSetLogicOpEXT = 4 + 4 + count;
25108 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetLogicOpEXT -= 8;
25109 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetLogicOpEXT);
25110 uint8_t* packetBeginPtr = streamPtr;
25111 uint8_t** streamPtrPtr = &streamPtr;
25112 uint32_t opcode_vkCmdSetLogicOpEXT = OP_vkCmdSetLogicOpEXT;
25113 memcpy(streamPtr, &opcode_vkCmdSetLogicOpEXT, sizeof(uint32_t));
25114 streamPtr += sizeof(uint32_t);
25115 memcpy(streamPtr, &packetSize_vkCmdSetLogicOpEXT, sizeof(uint32_t));
25116 streamPtr += sizeof(uint32_t);
25117 if (!queueSubmitWithCommandsEnabled) {
25118 uint64_t cgen_var_0;
25119 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
25120 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25121 *streamPtrPtr += 1 * 8;
25122 }
25123 memcpy(*streamPtrPtr, (VkLogicOp*)&local_logicOp, sizeof(VkLogicOp));
25124 *streamPtrPtr += sizeof(VkLogicOp);
25125 ++encodeCount;
25126 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25127 pool->freeAll();
25128 stream->clearPool();
25129 }
25130 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25131 }
25132
vkCmdSetPrimitiveRestartEnableEXT(VkCommandBuffer commandBuffer,VkBool32 primitiveRestartEnable,uint32_t doLock)25133 void VkEncoder::vkCmdSetPrimitiveRestartEnableEXT(VkCommandBuffer commandBuffer,
25134 VkBool32 primitiveRestartEnable,
25135 uint32_t doLock) {
25136 (void)doLock;
25137 bool queueSubmitWithCommandsEnabled =
25138 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25139 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25140 auto stream = mImpl->stream();
25141 auto pool = mImpl->pool();
25142 VkCommandBuffer local_commandBuffer;
25143 VkBool32 local_primitiveRestartEnable;
25144 local_commandBuffer = commandBuffer;
25145 local_primitiveRestartEnable = primitiveRestartEnable;
25146 size_t count = 0;
25147 size_t* countPtr = &count;
25148 {
25149 uint64_t cgen_var_0;
25150 *countPtr += 1 * 8;
25151 *countPtr += sizeof(VkBool32);
25152 }
25153 uint32_t packetSize_vkCmdSetPrimitiveRestartEnableEXT = 4 + 4 + count;
25154 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetPrimitiveRestartEnableEXT -= 8;
25155 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetPrimitiveRestartEnableEXT);
25156 uint8_t* packetBeginPtr = streamPtr;
25157 uint8_t** streamPtrPtr = &streamPtr;
25158 uint32_t opcode_vkCmdSetPrimitiveRestartEnableEXT = OP_vkCmdSetPrimitiveRestartEnableEXT;
25159 memcpy(streamPtr, &opcode_vkCmdSetPrimitiveRestartEnableEXT, sizeof(uint32_t));
25160 streamPtr += sizeof(uint32_t);
25161 memcpy(streamPtr, &packetSize_vkCmdSetPrimitiveRestartEnableEXT, sizeof(uint32_t));
25162 streamPtr += sizeof(uint32_t);
25163 if (!queueSubmitWithCommandsEnabled) {
25164 uint64_t cgen_var_0;
25165 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
25166 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25167 *streamPtrPtr += 1 * 8;
25168 }
25169 memcpy(*streamPtrPtr, (VkBool32*)&local_primitiveRestartEnable, sizeof(VkBool32));
25170 *streamPtrPtr += sizeof(VkBool32);
25171 ++encodeCount;
25172 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25173 pool->freeAll();
25174 stream->clearPool();
25175 }
25176 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25177 }
25178
25179 #endif
25180 #ifdef VK_EXT_color_write_enable
vkCmdSetColorWriteEnableEXT(VkCommandBuffer commandBuffer,uint32_t attachmentCount,const VkBool32 * pColorWriteEnables,uint32_t doLock)25181 void VkEncoder::vkCmdSetColorWriteEnableEXT(VkCommandBuffer commandBuffer, uint32_t attachmentCount,
25182 const VkBool32* pColorWriteEnables, uint32_t doLock) {
25183 (void)doLock;
25184 bool queueSubmitWithCommandsEnabled =
25185 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25186 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25187 auto stream = mImpl->stream();
25188 auto pool = mImpl->pool();
25189 VkCommandBuffer local_commandBuffer;
25190 uint32_t local_attachmentCount;
25191 VkBool32* local_pColorWriteEnables;
25192 local_commandBuffer = commandBuffer;
25193 local_attachmentCount = attachmentCount;
25194 // Avoiding deepcopy for pColorWriteEnables
25195 local_pColorWriteEnables = (VkBool32*)pColorWriteEnables;
25196 size_t count = 0;
25197 size_t* countPtr = &count;
25198 {
25199 uint64_t cgen_var_0;
25200 *countPtr += 1 * 8;
25201 *countPtr += sizeof(uint32_t);
25202 *countPtr += ((attachmentCount)) * sizeof(VkBool32);
25203 }
25204 uint32_t packetSize_vkCmdSetColorWriteEnableEXT = 4 + 4 + count;
25205 if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetColorWriteEnableEXT -= 8;
25206 uint8_t* streamPtr = stream->reserve(packetSize_vkCmdSetColorWriteEnableEXT);
25207 uint8_t* packetBeginPtr = streamPtr;
25208 uint8_t** streamPtrPtr = &streamPtr;
25209 uint32_t opcode_vkCmdSetColorWriteEnableEXT = OP_vkCmdSetColorWriteEnableEXT;
25210 memcpy(streamPtr, &opcode_vkCmdSetColorWriteEnableEXT, sizeof(uint32_t));
25211 streamPtr += sizeof(uint32_t);
25212 memcpy(streamPtr, &packetSize_vkCmdSetColorWriteEnableEXT, sizeof(uint32_t));
25213 streamPtr += sizeof(uint32_t);
25214 if (!queueSubmitWithCommandsEnabled) {
25215 uint64_t cgen_var_0;
25216 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
25217 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25218 *streamPtrPtr += 1 * 8;
25219 }
25220 memcpy(*streamPtrPtr, (uint32_t*)&local_attachmentCount, sizeof(uint32_t));
25221 *streamPtrPtr += sizeof(uint32_t);
25222 memcpy(*streamPtrPtr, (VkBool32*)local_pColorWriteEnables,
25223 ((attachmentCount)) * sizeof(VkBool32));
25224 *streamPtrPtr += ((attachmentCount)) * sizeof(VkBool32);
25225 ++encodeCount;
25226 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25227 pool->freeAll();
25228 stream->clearPool();
25229 }
25230 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25231 }
25232
25233 #endif
25234 #ifdef VK_GOOGLE_gfxstream
vkMapMemoryIntoAddressSpaceGOOGLE(VkDevice device,VkDeviceMemory memory,uint64_t * pAddress,uint32_t doLock)25235 VkResult VkEncoder::vkMapMemoryIntoAddressSpaceGOOGLE(VkDevice device, VkDeviceMemory memory,
25236 uint64_t* pAddress, uint32_t doLock) {
25237 (void)doLock;
25238 bool queueSubmitWithCommandsEnabled =
25239 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25240 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25241 sResourceTracker->on_vkMapMemoryIntoAddressSpaceGOOGLE_pre(this, VK_SUCCESS, device, memory,
25242 pAddress);
25243 auto stream = mImpl->stream();
25244 auto pool = mImpl->pool();
25245 VkDevice local_device;
25246 VkDeviceMemory local_memory;
25247 local_device = device;
25248 local_memory = memory;
25249 sResourceTracker->deviceMemoryTransform_tohost(
25250 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0,
25251 (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
25252 size_t count = 0;
25253 size_t* countPtr = &count;
25254 {
25255 uint64_t cgen_var_0;
25256 *countPtr += 1 * 8;
25257 uint64_t cgen_var_1;
25258 *countPtr += 1 * 8;
25259 // WARNING PTR CHECK
25260 *countPtr += 8;
25261 if (pAddress) {
25262 *countPtr += sizeof(uint64_t);
25263 }
25264 }
25265 uint32_t packetSize_vkMapMemoryIntoAddressSpaceGOOGLE =
25266 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25267 uint8_t* streamPtr = stream->reserve(packetSize_vkMapMemoryIntoAddressSpaceGOOGLE);
25268 uint8_t* packetBeginPtr = streamPtr;
25269 uint8_t** streamPtrPtr = &streamPtr;
25270 uint32_t opcode_vkMapMemoryIntoAddressSpaceGOOGLE = OP_vkMapMemoryIntoAddressSpaceGOOGLE;
25271 uint32_t seqno;
25272 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25273 memcpy(streamPtr, &opcode_vkMapMemoryIntoAddressSpaceGOOGLE, sizeof(uint32_t));
25274 streamPtr += sizeof(uint32_t);
25275 memcpy(streamPtr, &packetSize_vkMapMemoryIntoAddressSpaceGOOGLE, sizeof(uint32_t));
25276 streamPtr += sizeof(uint32_t);
25277 if (queueSubmitWithCommandsEnabled) {
25278 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25279 streamPtr += sizeof(uint32_t);
25280 }
25281 uint64_t cgen_var_0;
25282 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
25283 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25284 *streamPtrPtr += 1 * 8;
25285 uint64_t cgen_var_1;
25286 *&cgen_var_1 = get_host_u64_VkDeviceMemory((*&local_memory));
25287 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
25288 *streamPtrPtr += 1 * 8;
25289 // WARNING PTR CHECK
25290 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pAddress;
25291 memcpy((*streamPtrPtr), &cgen_var_2, 8);
25292 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25293 *streamPtrPtr += 8;
25294 if (pAddress) {
25295 memcpy(*streamPtrPtr, (uint64_t*)pAddress, sizeof(uint64_t));
25296 *streamPtrPtr += sizeof(uint64_t);
25297 }
25298 // WARNING PTR CHECK
25299 uint64_t* check_pAddress;
25300 check_pAddress = (uint64_t*)(uintptr_t)stream->getBe64();
25301 if (pAddress) {
25302 if (!(check_pAddress)) {
25303 fprintf(stderr, "fatal: pAddress inconsistent between guest and host\n");
25304 }
25305 stream->read((uint64_t*)pAddress, sizeof(uint64_t));
25306 }
25307 VkResult vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return = (VkResult)0;
25308 stream->read(&vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return, sizeof(VkResult));
25309 sResourceTracker->on_vkMapMemoryIntoAddressSpaceGOOGLE(
25310 this, vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return, device, memory, pAddress);
25311 ++encodeCount;
25312 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25313 pool->freeAll();
25314 stream->clearPool();
25315 }
25316 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25317 return vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return;
25318 }
25319
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)25320 void VkEncoder::vkUpdateDescriptorSetWithTemplateSizedGOOGLE(
25321 VkDevice device, VkDescriptorSet descriptorSet,
25322 VkDescriptorUpdateTemplate descriptorUpdateTemplate, uint32_t imageInfoCount,
25323 uint32_t bufferInfoCount, uint32_t bufferViewCount, const uint32_t* pImageInfoEntryIndices,
25324 const uint32_t* pBufferInfoEntryIndices, const uint32_t* pBufferViewEntryIndices,
25325 const VkDescriptorImageInfo* pImageInfos, const VkDescriptorBufferInfo* pBufferInfos,
25326 const VkBufferView* pBufferViews, uint32_t doLock) {
25327 (void)doLock;
25328 bool queueSubmitWithCommandsEnabled =
25329 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25330 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25331 auto stream = mImpl->stream();
25332 auto pool = mImpl->pool();
25333 VkDevice local_device;
25334 VkDescriptorSet local_descriptorSet;
25335 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
25336 uint32_t local_imageInfoCount;
25337 uint32_t local_bufferInfoCount;
25338 uint32_t local_bufferViewCount;
25339 uint32_t* local_pImageInfoEntryIndices;
25340 uint32_t* local_pBufferInfoEntryIndices;
25341 uint32_t* local_pBufferViewEntryIndices;
25342 VkDescriptorImageInfo* local_pImageInfos;
25343 VkDescriptorBufferInfo* local_pBufferInfos;
25344 VkBufferView* local_pBufferViews;
25345 local_device = device;
25346 local_descriptorSet = descriptorSet;
25347 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
25348 local_imageInfoCount = imageInfoCount;
25349 local_bufferInfoCount = bufferInfoCount;
25350 local_bufferViewCount = bufferViewCount;
25351 // Avoiding deepcopy for pImageInfoEntryIndices
25352 local_pImageInfoEntryIndices = (uint32_t*)pImageInfoEntryIndices;
25353 // Avoiding deepcopy for pBufferInfoEntryIndices
25354 local_pBufferInfoEntryIndices = (uint32_t*)pBufferInfoEntryIndices;
25355 // Avoiding deepcopy for pBufferViewEntryIndices
25356 local_pBufferViewEntryIndices = (uint32_t*)pBufferViewEntryIndices;
25357 local_pImageInfos = nullptr;
25358 if (pImageInfos) {
25359 local_pImageInfos = (VkDescriptorImageInfo*)pool->alloc(
25360 ((imageInfoCount)) * sizeof(const VkDescriptorImageInfo));
25361 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
25362 deepcopy_VkDescriptorImageInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageInfos + i,
25363 (VkDescriptorImageInfo*)(local_pImageInfos + i));
25364 }
25365 }
25366 local_pBufferInfos = nullptr;
25367 if (pBufferInfos) {
25368 local_pBufferInfos = (VkDescriptorBufferInfo*)pool->alloc(
25369 ((bufferInfoCount)) * sizeof(const VkDescriptorBufferInfo));
25370 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
25371 deepcopy_VkDescriptorBufferInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBufferInfos + i,
25372 (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
25373 }
25374 }
25375 // Avoiding deepcopy for pBufferViews
25376 local_pBufferViews = (VkBufferView*)pBufferViews;
25377 if (local_pImageInfos) {
25378 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
25379 transform_tohost_VkDescriptorImageInfo(sResourceTracker,
25380 (VkDescriptorImageInfo*)(local_pImageInfos + i));
25381 }
25382 }
25383 if (local_pBufferInfos) {
25384 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
25385 transform_tohost_VkDescriptorBufferInfo(
25386 sResourceTracker, (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
25387 }
25388 }
25389 size_t count = 0;
25390 size_t* countPtr = &count;
25391 {
25392 uint64_t cgen_var_0;
25393 *countPtr += 1 * 8;
25394 uint64_t cgen_var_1;
25395 *countPtr += 1 * 8;
25396 uint64_t cgen_var_2;
25397 *countPtr += 1 * 8;
25398 *countPtr += sizeof(uint32_t);
25399 *countPtr += sizeof(uint32_t);
25400 *countPtr += sizeof(uint32_t);
25401 // WARNING PTR CHECK
25402 *countPtr += 8;
25403 if (local_pImageInfoEntryIndices) {
25404 *countPtr += ((imageInfoCount)) * sizeof(uint32_t);
25405 }
25406 // WARNING PTR CHECK
25407 *countPtr += 8;
25408 if (local_pBufferInfoEntryIndices) {
25409 *countPtr += ((bufferInfoCount)) * sizeof(uint32_t);
25410 }
25411 // WARNING PTR CHECK
25412 *countPtr += 8;
25413 if (local_pBufferViewEntryIndices) {
25414 *countPtr += ((bufferViewCount)) * sizeof(uint32_t);
25415 }
25416 // WARNING PTR CHECK
25417 *countPtr += 8;
25418 if (local_pImageInfos) {
25419 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
25420 count_VkDescriptorImageInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25421 (VkDescriptorImageInfo*)(local_pImageInfos + i),
25422 countPtr);
25423 }
25424 }
25425 // WARNING PTR CHECK
25426 *countPtr += 8;
25427 if (local_pBufferInfos) {
25428 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
25429 count_VkDescriptorBufferInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25430 (VkDescriptorBufferInfo*)(local_pBufferInfos + i),
25431 countPtr);
25432 }
25433 }
25434 // WARNING PTR CHECK
25435 *countPtr += 8;
25436 if (local_pBufferViews) {
25437 if (((bufferViewCount))) {
25438 *countPtr += ((bufferViewCount)) * 8;
25439 }
25440 }
25441 }
25442 uint32_t packetSize_vkUpdateDescriptorSetWithTemplateSizedGOOGLE =
25443 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25444 uint8_t* streamPtr = stream->reserve(packetSize_vkUpdateDescriptorSetWithTemplateSizedGOOGLE);
25445 uint8_t* packetBeginPtr = streamPtr;
25446 uint8_t** streamPtrPtr = &streamPtr;
25447 uint32_t opcode_vkUpdateDescriptorSetWithTemplateSizedGOOGLE =
25448 OP_vkUpdateDescriptorSetWithTemplateSizedGOOGLE;
25449 uint32_t seqno;
25450 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25451 memcpy(streamPtr, &opcode_vkUpdateDescriptorSetWithTemplateSizedGOOGLE, sizeof(uint32_t));
25452 streamPtr += sizeof(uint32_t);
25453 memcpy(streamPtr, &packetSize_vkUpdateDescriptorSetWithTemplateSizedGOOGLE, sizeof(uint32_t));
25454 streamPtr += sizeof(uint32_t);
25455 if (queueSubmitWithCommandsEnabled) {
25456 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25457 streamPtr += sizeof(uint32_t);
25458 }
25459 uint64_t cgen_var_0;
25460 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
25461 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25462 *streamPtrPtr += 1 * 8;
25463 uint64_t cgen_var_1;
25464 *&cgen_var_1 = get_host_u64_VkDescriptorSet((*&local_descriptorSet));
25465 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
25466 *streamPtrPtr += 1 * 8;
25467 uint64_t cgen_var_2;
25468 *&cgen_var_2 = get_host_u64_VkDescriptorUpdateTemplate((*&local_descriptorUpdateTemplate));
25469 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
25470 *streamPtrPtr += 1 * 8;
25471 memcpy(*streamPtrPtr, (uint32_t*)&local_imageInfoCount, sizeof(uint32_t));
25472 *streamPtrPtr += sizeof(uint32_t);
25473 memcpy(*streamPtrPtr, (uint32_t*)&local_bufferInfoCount, sizeof(uint32_t));
25474 *streamPtrPtr += sizeof(uint32_t);
25475 memcpy(*streamPtrPtr, (uint32_t*)&local_bufferViewCount, sizeof(uint32_t));
25476 *streamPtrPtr += sizeof(uint32_t);
25477 // WARNING PTR CHECK
25478 uint64_t cgen_var_3 = (uint64_t)(uintptr_t)local_pImageInfoEntryIndices;
25479 memcpy((*streamPtrPtr), &cgen_var_3, 8);
25480 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25481 *streamPtrPtr += 8;
25482 if (local_pImageInfoEntryIndices) {
25483 memcpy(*streamPtrPtr, (uint32_t*)local_pImageInfoEntryIndices,
25484 ((imageInfoCount)) * sizeof(uint32_t));
25485 *streamPtrPtr += ((imageInfoCount)) * sizeof(uint32_t);
25486 }
25487 // WARNING PTR CHECK
25488 uint64_t cgen_var_4 = (uint64_t)(uintptr_t)local_pBufferInfoEntryIndices;
25489 memcpy((*streamPtrPtr), &cgen_var_4, 8);
25490 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25491 *streamPtrPtr += 8;
25492 if (local_pBufferInfoEntryIndices) {
25493 memcpy(*streamPtrPtr, (uint32_t*)local_pBufferInfoEntryIndices,
25494 ((bufferInfoCount)) * sizeof(uint32_t));
25495 *streamPtrPtr += ((bufferInfoCount)) * sizeof(uint32_t);
25496 }
25497 // WARNING PTR CHECK
25498 uint64_t cgen_var_5 = (uint64_t)(uintptr_t)local_pBufferViewEntryIndices;
25499 memcpy((*streamPtrPtr), &cgen_var_5, 8);
25500 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25501 *streamPtrPtr += 8;
25502 if (local_pBufferViewEntryIndices) {
25503 memcpy(*streamPtrPtr, (uint32_t*)local_pBufferViewEntryIndices,
25504 ((bufferViewCount)) * sizeof(uint32_t));
25505 *streamPtrPtr += ((bufferViewCount)) * sizeof(uint32_t);
25506 }
25507 // WARNING PTR CHECK
25508 uint64_t cgen_var_6 = (uint64_t)(uintptr_t)local_pImageInfos;
25509 memcpy((*streamPtrPtr), &cgen_var_6, 8);
25510 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25511 *streamPtrPtr += 8;
25512 if (local_pImageInfos) {
25513 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
25514 reservedmarshal_VkDescriptorImageInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25515 (VkDescriptorImageInfo*)(local_pImageInfos + i),
25516 streamPtrPtr);
25517 }
25518 }
25519 // WARNING PTR CHECK
25520 uint64_t cgen_var_7 = (uint64_t)(uintptr_t)local_pBufferInfos;
25521 memcpy((*streamPtrPtr), &cgen_var_7, 8);
25522 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25523 *streamPtrPtr += 8;
25524 if (local_pBufferInfos) {
25525 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
25526 reservedmarshal_VkDescriptorBufferInfo(
25527 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25528 (VkDescriptorBufferInfo*)(local_pBufferInfos + i), streamPtrPtr);
25529 }
25530 }
25531 // WARNING PTR CHECK
25532 uint64_t cgen_var_8 = (uint64_t)(uintptr_t)local_pBufferViews;
25533 memcpy((*streamPtrPtr), &cgen_var_8, 8);
25534 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25535 *streamPtrPtr += 8;
25536 if (local_pBufferViews) {
25537 if (((bufferViewCount))) {
25538 uint8_t* cgen_var_8_0_ptr = (uint8_t*)(*streamPtrPtr);
25539 for (uint32_t k = 0; k < ((bufferViewCount)); ++k) {
25540 uint64_t tmpval = get_host_u64_VkBufferView(local_pBufferViews[k]);
25541 memcpy(cgen_var_8_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
25542 }
25543 *streamPtrPtr += 8 * ((bufferViewCount));
25544 }
25545 }
25546 stream->flush();
25547 ++encodeCount;
25548 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25549 pool->freeAll();
25550 stream->clearPool();
25551 }
25552 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25553 }
25554
vkBeginCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,const VkCommandBufferBeginInfo * pBeginInfo,uint32_t doLock)25555 void VkEncoder::vkBeginCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,
25556 const VkCommandBufferBeginInfo* pBeginInfo,
25557 uint32_t doLock) {
25558 (void)doLock;
25559 bool queueSubmitWithCommandsEnabled =
25560 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25561 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25562 auto stream = mImpl->stream();
25563 auto pool = mImpl->pool();
25564 VkCommandBuffer local_commandBuffer;
25565 VkCommandBufferBeginInfo* local_pBeginInfo;
25566 local_commandBuffer = commandBuffer;
25567 local_pBeginInfo = nullptr;
25568 if (pBeginInfo) {
25569 local_pBeginInfo =
25570 (VkCommandBufferBeginInfo*)pool->alloc(sizeof(const VkCommandBufferBeginInfo));
25571 deepcopy_VkCommandBufferBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBeginInfo,
25572 (VkCommandBufferBeginInfo*)(local_pBeginInfo));
25573 }
25574 if (local_pBeginInfo) {
25575 transform_tohost_VkCommandBufferBeginInfo(sResourceTracker,
25576 (VkCommandBufferBeginInfo*)(local_pBeginInfo));
25577 }
25578 size_t count = 0;
25579 size_t* countPtr = &count;
25580 {
25581 uint64_t cgen_var_0;
25582 *countPtr += 1 * 8;
25583 count_VkCommandBufferBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25584 (VkCommandBufferBeginInfo*)(local_pBeginInfo), countPtr);
25585 }
25586 uint32_t packetSize_vkBeginCommandBufferAsyncGOOGLE = 4 + 4 + count;
25587 if (queueSubmitWithCommandsEnabled) packetSize_vkBeginCommandBufferAsyncGOOGLE -= 8;
25588 uint8_t* streamPtr = stream->reserve(packetSize_vkBeginCommandBufferAsyncGOOGLE);
25589 uint8_t* packetBeginPtr = streamPtr;
25590 uint8_t** streamPtrPtr = &streamPtr;
25591 uint32_t opcode_vkBeginCommandBufferAsyncGOOGLE = OP_vkBeginCommandBufferAsyncGOOGLE;
25592 memcpy(streamPtr, &opcode_vkBeginCommandBufferAsyncGOOGLE, sizeof(uint32_t));
25593 streamPtr += sizeof(uint32_t);
25594 memcpy(streamPtr, &packetSize_vkBeginCommandBufferAsyncGOOGLE, sizeof(uint32_t));
25595 streamPtr += sizeof(uint32_t);
25596 if (!queueSubmitWithCommandsEnabled) {
25597 uint64_t cgen_var_0;
25598 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
25599 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25600 *streamPtrPtr += 1 * 8;
25601 }
25602 reservedmarshal_VkCommandBufferBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25603 (VkCommandBufferBeginInfo*)(local_pBeginInfo),
25604 streamPtrPtr);
25605 ++encodeCount;
25606 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25607 pool->freeAll();
25608 stream->clearPool();
25609 }
25610 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25611 }
25612
vkEndCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,uint32_t doLock)25613 void VkEncoder::vkEndCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer, uint32_t doLock) {
25614 (void)doLock;
25615 bool queueSubmitWithCommandsEnabled =
25616 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25617 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25618 auto stream = mImpl->stream();
25619 auto pool = mImpl->pool();
25620 VkCommandBuffer local_commandBuffer;
25621 local_commandBuffer = commandBuffer;
25622 size_t count = 0;
25623 size_t* countPtr = &count;
25624 {
25625 uint64_t cgen_var_0;
25626 *countPtr += 1 * 8;
25627 }
25628 uint32_t packetSize_vkEndCommandBufferAsyncGOOGLE = 4 + 4 + count;
25629 if (queueSubmitWithCommandsEnabled) packetSize_vkEndCommandBufferAsyncGOOGLE -= 8;
25630 uint8_t* streamPtr = stream->reserve(packetSize_vkEndCommandBufferAsyncGOOGLE);
25631 uint8_t* packetBeginPtr = streamPtr;
25632 uint8_t** streamPtrPtr = &streamPtr;
25633 uint32_t opcode_vkEndCommandBufferAsyncGOOGLE = OP_vkEndCommandBufferAsyncGOOGLE;
25634 memcpy(streamPtr, &opcode_vkEndCommandBufferAsyncGOOGLE, sizeof(uint32_t));
25635 streamPtr += sizeof(uint32_t);
25636 memcpy(streamPtr, &packetSize_vkEndCommandBufferAsyncGOOGLE, sizeof(uint32_t));
25637 streamPtr += sizeof(uint32_t);
25638 if (!queueSubmitWithCommandsEnabled) {
25639 uint64_t cgen_var_0;
25640 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
25641 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25642 *streamPtrPtr += 1 * 8;
25643 }
25644 stream->flush();
25645 ++encodeCount;
25646 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25647 pool->freeAll();
25648 stream->clearPool();
25649 }
25650 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25651 }
25652
vkResetCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,VkCommandBufferResetFlags flags,uint32_t doLock)25653 void VkEncoder::vkResetCommandBufferAsyncGOOGLE(VkCommandBuffer commandBuffer,
25654 VkCommandBufferResetFlags flags, uint32_t doLock) {
25655 (void)doLock;
25656 bool queueSubmitWithCommandsEnabled =
25657 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25658 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25659 auto stream = mImpl->stream();
25660 auto pool = mImpl->pool();
25661 VkCommandBuffer local_commandBuffer;
25662 VkCommandBufferResetFlags local_flags;
25663 local_commandBuffer = commandBuffer;
25664 local_flags = flags;
25665 size_t count = 0;
25666 size_t* countPtr = &count;
25667 {
25668 uint64_t cgen_var_0;
25669 *countPtr += 1 * 8;
25670 *countPtr += sizeof(VkCommandBufferResetFlags);
25671 }
25672 uint32_t packetSize_vkResetCommandBufferAsyncGOOGLE = 4 + 4 + count;
25673 if (queueSubmitWithCommandsEnabled) packetSize_vkResetCommandBufferAsyncGOOGLE -= 8;
25674 uint8_t* streamPtr = stream->reserve(packetSize_vkResetCommandBufferAsyncGOOGLE);
25675 uint8_t* packetBeginPtr = streamPtr;
25676 uint8_t** streamPtrPtr = &streamPtr;
25677 uint32_t opcode_vkResetCommandBufferAsyncGOOGLE = OP_vkResetCommandBufferAsyncGOOGLE;
25678 memcpy(streamPtr, &opcode_vkResetCommandBufferAsyncGOOGLE, sizeof(uint32_t));
25679 streamPtr += sizeof(uint32_t);
25680 memcpy(streamPtr, &packetSize_vkResetCommandBufferAsyncGOOGLE, sizeof(uint32_t));
25681 streamPtr += sizeof(uint32_t);
25682 if (!queueSubmitWithCommandsEnabled) {
25683 uint64_t cgen_var_0;
25684 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
25685 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25686 *streamPtrPtr += 1 * 8;
25687 }
25688 memcpy(*streamPtrPtr, (VkCommandBufferResetFlags*)&local_flags,
25689 sizeof(VkCommandBufferResetFlags));
25690 *streamPtrPtr += sizeof(VkCommandBufferResetFlags);
25691 ++encodeCount;
25692 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25693 pool->freeAll();
25694 stream->clearPool();
25695 }
25696 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25697 }
25698
vkCommandBufferHostSyncGOOGLE(VkCommandBuffer commandBuffer,uint32_t needHostSync,uint32_t sequenceNumber,uint32_t doLock)25699 void VkEncoder::vkCommandBufferHostSyncGOOGLE(VkCommandBuffer commandBuffer, uint32_t needHostSync,
25700 uint32_t sequenceNumber, uint32_t doLock) {
25701 (void)doLock;
25702 bool queueSubmitWithCommandsEnabled =
25703 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25704 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25705 auto stream = mImpl->stream();
25706 auto pool = mImpl->pool();
25707 VkCommandBuffer local_commandBuffer;
25708 uint32_t local_needHostSync;
25709 uint32_t local_sequenceNumber;
25710 local_commandBuffer = commandBuffer;
25711 local_needHostSync = needHostSync;
25712 local_sequenceNumber = sequenceNumber;
25713 size_t count = 0;
25714 size_t* countPtr = &count;
25715 {
25716 uint64_t cgen_var_0;
25717 *countPtr += 1 * 8;
25718 *countPtr += sizeof(uint32_t);
25719 *countPtr += sizeof(uint32_t);
25720 }
25721 uint32_t packetSize_vkCommandBufferHostSyncGOOGLE = 4 + 4 + count;
25722 if (queueSubmitWithCommandsEnabled) packetSize_vkCommandBufferHostSyncGOOGLE -= 8;
25723 uint8_t* streamPtr = stream->reserve(packetSize_vkCommandBufferHostSyncGOOGLE);
25724 uint8_t* packetBeginPtr = streamPtr;
25725 uint8_t** streamPtrPtr = &streamPtr;
25726 uint32_t opcode_vkCommandBufferHostSyncGOOGLE = OP_vkCommandBufferHostSyncGOOGLE;
25727 memcpy(streamPtr, &opcode_vkCommandBufferHostSyncGOOGLE, sizeof(uint32_t));
25728 streamPtr += sizeof(uint32_t);
25729 memcpy(streamPtr, &packetSize_vkCommandBufferHostSyncGOOGLE, sizeof(uint32_t));
25730 streamPtr += sizeof(uint32_t);
25731 if (!queueSubmitWithCommandsEnabled) {
25732 uint64_t cgen_var_0;
25733 *&cgen_var_0 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
25734 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25735 *streamPtrPtr += 1 * 8;
25736 }
25737 memcpy(*streamPtrPtr, (uint32_t*)&local_needHostSync, sizeof(uint32_t));
25738 *streamPtrPtr += sizeof(uint32_t);
25739 memcpy(*streamPtrPtr, (uint32_t*)&local_sequenceNumber, sizeof(uint32_t));
25740 *streamPtrPtr += sizeof(uint32_t);
25741 ++encodeCount;
25742 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25743 pool->freeAll();
25744 stream->clearPool();
25745 }
25746 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25747 }
25748
vkCreateImageWithRequirementsGOOGLE(VkDevice device,const VkImageCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImage * pImage,VkMemoryRequirements * pMemoryRequirements,uint32_t doLock)25749 VkResult VkEncoder::vkCreateImageWithRequirementsGOOGLE(
25750 VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator,
25751 VkImage* pImage, VkMemoryRequirements* pMemoryRequirements, uint32_t doLock) {
25752 (void)doLock;
25753 bool queueSubmitWithCommandsEnabled =
25754 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25755 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25756 auto stream = mImpl->stream();
25757 auto pool = mImpl->pool();
25758 VkDevice local_device;
25759 VkImageCreateInfo* local_pCreateInfo;
25760 VkAllocationCallbacks* local_pAllocator;
25761 local_device = device;
25762 local_pCreateInfo = nullptr;
25763 if (pCreateInfo) {
25764 local_pCreateInfo = (VkImageCreateInfo*)pool->alloc(sizeof(const VkImageCreateInfo));
25765 deepcopy_VkImageCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
25766 (VkImageCreateInfo*)(local_pCreateInfo));
25767 }
25768 local_pAllocator = nullptr;
25769 if (pAllocator) {
25770 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
25771 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
25772 (VkAllocationCallbacks*)(local_pAllocator));
25773 }
25774 sResourceTracker->unwrap_vkCreateImage_pCreateInfo(pCreateInfo, local_pCreateInfo);
25775 local_pAllocator = nullptr;
25776 if (local_pCreateInfo) {
25777 sResourceTracker->transformImpl_VkImageCreateInfo_tohost(local_pCreateInfo, 1);
25778 transform_tohost_VkImageCreateInfo(sResourceTracker,
25779 (VkImageCreateInfo*)(local_pCreateInfo));
25780 }
25781 if (local_pAllocator) {
25782 transform_tohost_VkAllocationCallbacks(sResourceTracker,
25783 (VkAllocationCallbacks*)(local_pAllocator));
25784 }
25785 size_t count = 0;
25786 size_t* countPtr = &count;
25787 {
25788 uint64_t cgen_var_0;
25789 *countPtr += 1 * 8;
25790 count_VkImageCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25791 (VkImageCreateInfo*)(local_pCreateInfo), countPtr);
25792 // WARNING PTR CHECK
25793 *countPtr += 8;
25794 if (local_pAllocator) {
25795 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25796 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
25797 }
25798 uint64_t cgen_var_1;
25799 *countPtr += 8;
25800 count_VkMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25801 (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
25802 }
25803 uint32_t packetSize_vkCreateImageWithRequirementsGOOGLE =
25804 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25805 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateImageWithRequirementsGOOGLE);
25806 uint8_t* packetBeginPtr = streamPtr;
25807 uint8_t** streamPtrPtr = &streamPtr;
25808 uint32_t opcode_vkCreateImageWithRequirementsGOOGLE = OP_vkCreateImageWithRequirementsGOOGLE;
25809 uint32_t seqno;
25810 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25811 memcpy(streamPtr, &opcode_vkCreateImageWithRequirementsGOOGLE, sizeof(uint32_t));
25812 streamPtr += sizeof(uint32_t);
25813 memcpy(streamPtr, &packetSize_vkCreateImageWithRequirementsGOOGLE, sizeof(uint32_t));
25814 streamPtr += sizeof(uint32_t);
25815 if (queueSubmitWithCommandsEnabled) {
25816 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25817 streamPtr += sizeof(uint32_t);
25818 }
25819 uint64_t cgen_var_0;
25820 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
25821 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25822 *streamPtrPtr += 1 * 8;
25823 reservedmarshal_VkImageCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25824 (VkImageCreateInfo*)(local_pCreateInfo), streamPtrPtr);
25825 // WARNING PTR CHECK
25826 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
25827 memcpy((*streamPtrPtr), &cgen_var_1, 8);
25828 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25829 *streamPtrPtr += 8;
25830 if (local_pAllocator) {
25831 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25832 (VkAllocationCallbacks*)(local_pAllocator),
25833 streamPtrPtr);
25834 }
25835 /* is handle, possibly out */;
25836 uint64_t cgen_var_2;
25837 *&cgen_var_2 = (uint64_t)((*pImage));
25838 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
25839 *streamPtrPtr += 8;
25840 /* is handle, possibly out */;
25841 reservedmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25842 (VkMemoryRequirements*)(pMemoryRequirements),
25843 streamPtrPtr);
25844 stream->setHandleMapping(sResourceTracker->createMapping());
25845 uint64_t cgen_var_3;
25846 stream->read((uint64_t*)&cgen_var_3, 8);
25847 stream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_3, (VkImage*)pImage, 1);
25848 stream->unsetHandleMapping();
25849 unmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25850 (VkMemoryRequirements*)(pMemoryRequirements));
25851 if (pMemoryRequirements) {
25852 transform_fromhost_VkMemoryRequirements(sResourceTracker,
25853 (VkMemoryRequirements*)(pMemoryRequirements));
25854 }
25855 VkResult vkCreateImageWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
25856 stream->read(&vkCreateImageWithRequirementsGOOGLE_VkResult_return, sizeof(VkResult));
25857 ++encodeCount;
25858 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25859 pool->freeAll();
25860 stream->clearPool();
25861 }
25862 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25863 return vkCreateImageWithRequirementsGOOGLE_VkResult_return;
25864 }
25865
vkCreateBufferWithRequirementsGOOGLE(VkDevice device,const VkBufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBuffer * pBuffer,VkMemoryRequirements * pMemoryRequirements,uint32_t doLock)25866 VkResult VkEncoder::vkCreateBufferWithRequirementsGOOGLE(
25867 VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator,
25868 VkBuffer* pBuffer, VkMemoryRequirements* pMemoryRequirements, uint32_t doLock) {
25869 (void)doLock;
25870 bool queueSubmitWithCommandsEnabled =
25871 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25872 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25873 auto stream = mImpl->stream();
25874 auto pool = mImpl->pool();
25875 VkDevice local_device;
25876 VkBufferCreateInfo* local_pCreateInfo;
25877 VkAllocationCallbacks* local_pAllocator;
25878 local_device = device;
25879 local_pCreateInfo = nullptr;
25880 if (pCreateInfo) {
25881 local_pCreateInfo = (VkBufferCreateInfo*)pool->alloc(sizeof(const VkBufferCreateInfo));
25882 deepcopy_VkBufferCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
25883 (VkBufferCreateInfo*)(local_pCreateInfo));
25884 }
25885 local_pAllocator = nullptr;
25886 if (pAllocator) {
25887 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
25888 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
25889 (VkAllocationCallbacks*)(local_pAllocator));
25890 }
25891 local_pAllocator = nullptr;
25892 if (local_pCreateInfo) {
25893 transform_tohost_VkBufferCreateInfo(sResourceTracker,
25894 (VkBufferCreateInfo*)(local_pCreateInfo));
25895 }
25896 if (local_pAllocator) {
25897 transform_tohost_VkAllocationCallbacks(sResourceTracker,
25898 (VkAllocationCallbacks*)(local_pAllocator));
25899 }
25900 size_t count = 0;
25901 size_t* countPtr = &count;
25902 {
25903 uint64_t cgen_var_0;
25904 *countPtr += 1 * 8;
25905 count_VkBufferCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25906 (VkBufferCreateInfo*)(local_pCreateInfo), countPtr);
25907 // WARNING PTR CHECK
25908 *countPtr += 8;
25909 if (local_pAllocator) {
25910 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25911 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
25912 }
25913 uint64_t cgen_var_1;
25914 *countPtr += 8;
25915 count_VkMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
25916 (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
25917 }
25918 uint32_t packetSize_vkCreateBufferWithRequirementsGOOGLE =
25919 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
25920 uint8_t* streamPtr = stream->reserve(packetSize_vkCreateBufferWithRequirementsGOOGLE);
25921 uint8_t* packetBeginPtr = streamPtr;
25922 uint8_t** streamPtrPtr = &streamPtr;
25923 uint32_t opcode_vkCreateBufferWithRequirementsGOOGLE = OP_vkCreateBufferWithRequirementsGOOGLE;
25924 uint32_t seqno;
25925 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
25926 memcpy(streamPtr, &opcode_vkCreateBufferWithRequirementsGOOGLE, sizeof(uint32_t));
25927 streamPtr += sizeof(uint32_t);
25928 memcpy(streamPtr, &packetSize_vkCreateBufferWithRequirementsGOOGLE, sizeof(uint32_t));
25929 streamPtr += sizeof(uint32_t);
25930 if (queueSubmitWithCommandsEnabled) {
25931 memcpy(streamPtr, &seqno, sizeof(uint32_t));
25932 streamPtr += sizeof(uint32_t);
25933 }
25934 uint64_t cgen_var_0;
25935 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
25936 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
25937 *streamPtrPtr += 1 * 8;
25938 reservedmarshal_VkBufferCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25939 (VkBufferCreateInfo*)(local_pCreateInfo), streamPtrPtr);
25940 // WARNING PTR CHECK
25941 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
25942 memcpy((*streamPtrPtr), &cgen_var_1, 8);
25943 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
25944 *streamPtrPtr += 8;
25945 if (local_pAllocator) {
25946 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25947 (VkAllocationCallbacks*)(local_pAllocator),
25948 streamPtrPtr);
25949 }
25950 /* is handle, possibly out */;
25951 uint64_t cgen_var_2;
25952 *&cgen_var_2 = (uint64_t)((*pBuffer));
25953 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
25954 *streamPtrPtr += 8;
25955 /* is handle, possibly out */;
25956 reservedmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25957 (VkMemoryRequirements*)(pMemoryRequirements),
25958 streamPtrPtr);
25959 stream->setHandleMapping(sResourceTracker->createMapping());
25960 uint64_t cgen_var_3;
25961 stream->read((uint64_t*)&cgen_var_3, 8);
25962 stream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_3, (VkBuffer*)pBuffer, 1);
25963 stream->unsetHandleMapping();
25964 unmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
25965 (VkMemoryRequirements*)(pMemoryRequirements));
25966 if (pMemoryRequirements) {
25967 transform_fromhost_VkMemoryRequirements(sResourceTracker,
25968 (VkMemoryRequirements*)(pMemoryRequirements));
25969 }
25970 VkResult vkCreateBufferWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
25971 stream->read(&vkCreateBufferWithRequirementsGOOGLE_VkResult_return, sizeof(VkResult));
25972 ++encodeCount;
25973 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
25974 pool->freeAll();
25975 stream->clearPool();
25976 }
25977 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
25978 return vkCreateBufferWithRequirementsGOOGLE_VkResult_return;
25979 }
25980
vkGetMemoryHostAddressInfoGOOGLE(VkDevice device,VkDeviceMemory memory,uint64_t * pAddress,uint64_t * pSize,uint64_t * pHostmemId,uint32_t doLock)25981 VkResult VkEncoder::vkGetMemoryHostAddressInfoGOOGLE(VkDevice device, VkDeviceMemory memory,
25982 uint64_t* pAddress, uint64_t* pSize,
25983 uint64_t* pHostmemId, uint32_t doLock) {
25984 (void)doLock;
25985 bool queueSubmitWithCommandsEnabled =
25986 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
25987 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
25988 auto stream = mImpl->stream();
25989 auto pool = mImpl->pool();
25990 VkDevice local_device;
25991 VkDeviceMemory local_memory;
25992 local_device = device;
25993 local_memory = memory;
25994 sResourceTracker->deviceMemoryTransform_tohost(
25995 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0,
25996 (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
25997 size_t count = 0;
25998 size_t* countPtr = &count;
25999 {
26000 uint64_t cgen_var_0;
26001 *countPtr += 1 * 8;
26002 uint64_t cgen_var_1;
26003 *countPtr += 1 * 8;
26004 // WARNING PTR CHECK
26005 *countPtr += 8;
26006 if (pAddress) {
26007 *countPtr += sizeof(uint64_t);
26008 }
26009 // WARNING PTR CHECK
26010 *countPtr += 8;
26011 if (pSize) {
26012 *countPtr += sizeof(uint64_t);
26013 }
26014 // WARNING PTR CHECK
26015 *countPtr += 8;
26016 if (pHostmemId) {
26017 *countPtr += sizeof(uint64_t);
26018 }
26019 }
26020 uint32_t packetSize_vkGetMemoryHostAddressInfoGOOGLE =
26021 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26022 uint8_t* streamPtr = stream->reserve(packetSize_vkGetMemoryHostAddressInfoGOOGLE);
26023 uint8_t* packetBeginPtr = streamPtr;
26024 uint8_t** streamPtrPtr = &streamPtr;
26025 uint32_t opcode_vkGetMemoryHostAddressInfoGOOGLE = OP_vkGetMemoryHostAddressInfoGOOGLE;
26026 uint32_t seqno;
26027 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26028 memcpy(streamPtr, &opcode_vkGetMemoryHostAddressInfoGOOGLE, sizeof(uint32_t));
26029 streamPtr += sizeof(uint32_t);
26030 memcpy(streamPtr, &packetSize_vkGetMemoryHostAddressInfoGOOGLE, sizeof(uint32_t));
26031 streamPtr += sizeof(uint32_t);
26032 if (queueSubmitWithCommandsEnabled) {
26033 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26034 streamPtr += sizeof(uint32_t);
26035 }
26036 uint64_t cgen_var_0;
26037 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
26038 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26039 *streamPtrPtr += 1 * 8;
26040 uint64_t cgen_var_1;
26041 *&cgen_var_1 = get_host_u64_VkDeviceMemory((*&local_memory));
26042 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
26043 *streamPtrPtr += 1 * 8;
26044 // WARNING PTR CHECK
26045 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pAddress;
26046 memcpy((*streamPtrPtr), &cgen_var_2, 8);
26047 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26048 *streamPtrPtr += 8;
26049 if (pAddress) {
26050 memcpy(*streamPtrPtr, (uint64_t*)pAddress, sizeof(uint64_t));
26051 *streamPtrPtr += sizeof(uint64_t);
26052 }
26053 // WARNING PTR CHECK
26054 uint64_t cgen_var_3 = (uint64_t)(uintptr_t)pSize;
26055 memcpy((*streamPtrPtr), &cgen_var_3, 8);
26056 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26057 *streamPtrPtr += 8;
26058 if (pSize) {
26059 memcpy(*streamPtrPtr, (uint64_t*)pSize, sizeof(uint64_t));
26060 *streamPtrPtr += sizeof(uint64_t);
26061 }
26062 // WARNING PTR CHECK
26063 uint64_t cgen_var_4 = (uint64_t)(uintptr_t)pHostmemId;
26064 memcpy((*streamPtrPtr), &cgen_var_4, 8);
26065 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26066 *streamPtrPtr += 8;
26067 if (pHostmemId) {
26068 memcpy(*streamPtrPtr, (uint64_t*)pHostmemId, sizeof(uint64_t));
26069 *streamPtrPtr += sizeof(uint64_t);
26070 }
26071 // WARNING PTR CHECK
26072 uint64_t* check_pAddress;
26073 check_pAddress = (uint64_t*)(uintptr_t)stream->getBe64();
26074 if (pAddress) {
26075 if (!(check_pAddress)) {
26076 fprintf(stderr, "fatal: pAddress inconsistent between guest and host\n");
26077 }
26078 stream->read((uint64_t*)pAddress, sizeof(uint64_t));
26079 }
26080 // WARNING PTR CHECK
26081 uint64_t* check_pSize;
26082 check_pSize = (uint64_t*)(uintptr_t)stream->getBe64();
26083 if (pSize) {
26084 if (!(check_pSize)) {
26085 fprintf(stderr, "fatal: pSize inconsistent between guest and host\n");
26086 }
26087 stream->read((uint64_t*)pSize, sizeof(uint64_t));
26088 }
26089 // WARNING PTR CHECK
26090 uint64_t* check_pHostmemId;
26091 check_pHostmemId = (uint64_t*)(uintptr_t)stream->getBe64();
26092 if (pHostmemId) {
26093 if (!(check_pHostmemId)) {
26094 fprintf(stderr, "fatal: pHostmemId inconsistent between guest and host\n");
26095 }
26096 stream->read((uint64_t*)pHostmemId, sizeof(uint64_t));
26097 }
26098 VkResult vkGetMemoryHostAddressInfoGOOGLE_VkResult_return = (VkResult)0;
26099 stream->read(&vkGetMemoryHostAddressInfoGOOGLE_VkResult_return, sizeof(VkResult));
26100 ++encodeCount;
26101 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26102 pool->freeAll();
26103 stream->clearPool();
26104 }
26105 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26106 return vkGetMemoryHostAddressInfoGOOGLE_VkResult_return;
26107 }
26108
vkFreeMemorySyncGOOGLE(VkDevice device,VkDeviceMemory memory,const VkAllocationCallbacks * pAllocator,uint32_t doLock)26109 VkResult VkEncoder::vkFreeMemorySyncGOOGLE(VkDevice device, VkDeviceMemory memory,
26110 const VkAllocationCallbacks* pAllocator,
26111 uint32_t doLock) {
26112 (void)doLock;
26113 bool queueSubmitWithCommandsEnabled =
26114 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26115 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26116 auto stream = mImpl->stream();
26117 auto pool = mImpl->pool();
26118 VkDevice local_device;
26119 VkDeviceMemory local_memory;
26120 VkAllocationCallbacks* local_pAllocator;
26121 local_device = device;
26122 local_memory = memory;
26123 local_pAllocator = nullptr;
26124 if (pAllocator) {
26125 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
26126 deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator,
26127 (VkAllocationCallbacks*)(local_pAllocator));
26128 }
26129 local_pAllocator = nullptr;
26130 sResourceTracker->deviceMemoryTransform_tohost(
26131 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0,
26132 (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
26133 size_t count = 0;
26134 size_t* countPtr = &count;
26135 {
26136 uint64_t cgen_var_0;
26137 *countPtr += 1 * 8;
26138 uint64_t cgen_var_1;
26139 *countPtr += 1 * 8;
26140 // WARNING PTR CHECK
26141 *countPtr += 8;
26142 if (local_pAllocator) {
26143 count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
26144 (VkAllocationCallbacks*)(local_pAllocator), countPtr);
26145 }
26146 }
26147 uint32_t packetSize_vkFreeMemorySyncGOOGLE =
26148 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26149 uint8_t* streamPtr = stream->reserve(packetSize_vkFreeMemorySyncGOOGLE);
26150 uint8_t* packetBeginPtr = streamPtr;
26151 uint8_t** streamPtrPtr = &streamPtr;
26152 uint32_t opcode_vkFreeMemorySyncGOOGLE = OP_vkFreeMemorySyncGOOGLE;
26153 uint32_t seqno;
26154 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26155 memcpy(streamPtr, &opcode_vkFreeMemorySyncGOOGLE, sizeof(uint32_t));
26156 streamPtr += sizeof(uint32_t);
26157 memcpy(streamPtr, &packetSize_vkFreeMemorySyncGOOGLE, sizeof(uint32_t));
26158 streamPtr += sizeof(uint32_t);
26159 if (queueSubmitWithCommandsEnabled) {
26160 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26161 streamPtr += sizeof(uint32_t);
26162 }
26163 uint64_t cgen_var_0;
26164 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
26165 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26166 *streamPtrPtr += 1 * 8;
26167 uint64_t cgen_var_1;
26168 *&cgen_var_1 = get_host_u64_VkDeviceMemory((*&local_memory));
26169 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
26170 *streamPtrPtr += 1 * 8;
26171 // WARNING PTR CHECK
26172 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
26173 memcpy((*streamPtrPtr), &cgen_var_2, 8);
26174 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26175 *streamPtrPtr += 8;
26176 if (local_pAllocator) {
26177 reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
26178 (VkAllocationCallbacks*)(local_pAllocator),
26179 streamPtrPtr);
26180 }
26181 VkResult vkFreeMemorySyncGOOGLE_VkResult_return = (VkResult)0;
26182 stream->read(&vkFreeMemorySyncGOOGLE_VkResult_return, sizeof(VkResult));
26183 sResourceTracker->destroyMapping()->mapHandles_VkDeviceMemory((VkDeviceMemory*)&memory);
26184 ++encodeCount;
26185 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26186 pool->freeAll();
26187 stream->clearPool();
26188 }
26189 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26190 return vkFreeMemorySyncGOOGLE_VkResult_return;
26191 }
26192
vkQueueHostSyncGOOGLE(VkQueue queue,uint32_t needHostSync,uint32_t sequenceNumber,uint32_t doLock)26193 void VkEncoder::vkQueueHostSyncGOOGLE(VkQueue queue, uint32_t needHostSync, uint32_t sequenceNumber,
26194 uint32_t doLock) {
26195 (void)doLock;
26196 bool queueSubmitWithCommandsEnabled =
26197 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26198 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26199 auto stream = mImpl->stream();
26200 auto pool = mImpl->pool();
26201 VkQueue local_queue;
26202 uint32_t local_needHostSync;
26203 uint32_t local_sequenceNumber;
26204 local_queue = queue;
26205 local_needHostSync = needHostSync;
26206 local_sequenceNumber = sequenceNumber;
26207 size_t count = 0;
26208 size_t* countPtr = &count;
26209 {
26210 uint64_t cgen_var_0;
26211 *countPtr += 1 * 8;
26212 *countPtr += sizeof(uint32_t);
26213 *countPtr += sizeof(uint32_t);
26214 }
26215 uint32_t packetSize_vkQueueHostSyncGOOGLE =
26216 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26217 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueHostSyncGOOGLE);
26218 uint8_t* packetBeginPtr = streamPtr;
26219 uint8_t** streamPtrPtr = &streamPtr;
26220 uint32_t opcode_vkQueueHostSyncGOOGLE = OP_vkQueueHostSyncGOOGLE;
26221 uint32_t seqno;
26222 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26223 memcpy(streamPtr, &opcode_vkQueueHostSyncGOOGLE, sizeof(uint32_t));
26224 streamPtr += sizeof(uint32_t);
26225 memcpy(streamPtr, &packetSize_vkQueueHostSyncGOOGLE, sizeof(uint32_t));
26226 streamPtr += sizeof(uint32_t);
26227 if (queueSubmitWithCommandsEnabled) {
26228 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26229 streamPtr += sizeof(uint32_t);
26230 }
26231 uint64_t cgen_var_0;
26232 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
26233 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26234 *streamPtrPtr += 1 * 8;
26235 memcpy(*streamPtrPtr, (uint32_t*)&local_needHostSync, sizeof(uint32_t));
26236 *streamPtrPtr += sizeof(uint32_t);
26237 memcpy(*streamPtrPtr, (uint32_t*)&local_sequenceNumber, sizeof(uint32_t));
26238 *streamPtrPtr += sizeof(uint32_t);
26239 stream->flush();
26240 ++encodeCount;
26241 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26242 pool->freeAll();
26243 stream->clearPool();
26244 }
26245 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26246 }
26247
vkQueueSubmitAsyncGOOGLE(VkQueue queue,uint32_t submitCount,const VkSubmitInfo * pSubmits,VkFence fence,uint32_t doLock)26248 void VkEncoder::vkQueueSubmitAsyncGOOGLE(VkQueue queue, uint32_t submitCount,
26249 const VkSubmitInfo* pSubmits, VkFence fence,
26250 uint32_t doLock) {
26251 (void)doLock;
26252 bool queueSubmitWithCommandsEnabled =
26253 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26254 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26255 auto stream = mImpl->stream();
26256 auto pool = mImpl->pool();
26257 VkQueue local_queue;
26258 uint32_t local_submitCount;
26259 VkSubmitInfo* local_pSubmits;
26260 VkFence local_fence;
26261 local_queue = queue;
26262 local_submitCount = submitCount;
26263 local_pSubmits = nullptr;
26264 if (pSubmits) {
26265 local_pSubmits = (VkSubmitInfo*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo));
26266 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
26267 deepcopy_VkSubmitInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubmits + i,
26268 (VkSubmitInfo*)(local_pSubmits + i));
26269 }
26270 }
26271 local_fence = fence;
26272 if (local_pSubmits) {
26273 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
26274 transform_tohost_VkSubmitInfo(sResourceTracker, (VkSubmitInfo*)(local_pSubmits + i));
26275 }
26276 }
26277 size_t count = 0;
26278 size_t* countPtr = &count;
26279 {
26280 uint64_t cgen_var_0;
26281 *countPtr += 1 * 8;
26282 *countPtr += sizeof(uint32_t);
26283 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
26284 count_VkSubmitInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
26285 (VkSubmitInfo*)(local_pSubmits + i), countPtr);
26286 }
26287 uint64_t cgen_var_1;
26288 *countPtr += 1 * 8;
26289 }
26290 uint32_t packetSize_vkQueueSubmitAsyncGOOGLE =
26291 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26292 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSubmitAsyncGOOGLE);
26293 uint8_t* packetBeginPtr = streamPtr;
26294 uint8_t** streamPtrPtr = &streamPtr;
26295 uint32_t opcode_vkQueueSubmitAsyncGOOGLE = OP_vkQueueSubmitAsyncGOOGLE;
26296 uint32_t seqno;
26297 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26298 memcpy(streamPtr, &opcode_vkQueueSubmitAsyncGOOGLE, sizeof(uint32_t));
26299 streamPtr += sizeof(uint32_t);
26300 memcpy(streamPtr, &packetSize_vkQueueSubmitAsyncGOOGLE, sizeof(uint32_t));
26301 streamPtr += sizeof(uint32_t);
26302 if (queueSubmitWithCommandsEnabled) {
26303 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26304 streamPtr += sizeof(uint32_t);
26305 }
26306 uint64_t cgen_var_0;
26307 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
26308 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26309 *streamPtrPtr += 1 * 8;
26310 memcpy(*streamPtrPtr, (uint32_t*)&local_submitCount, sizeof(uint32_t));
26311 *streamPtrPtr += sizeof(uint32_t);
26312 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
26313 reservedmarshal_VkSubmitInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
26314 (VkSubmitInfo*)(local_pSubmits + i), streamPtrPtr);
26315 }
26316 uint64_t cgen_var_1;
26317 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
26318 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
26319 *streamPtrPtr += 1 * 8;
26320 stream->flush();
26321 ++encodeCount;
26322 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26323 pool->freeAll();
26324 stream->clearPool();
26325 }
26326 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26327 }
26328
vkQueueWaitIdleAsyncGOOGLE(VkQueue queue,uint32_t doLock)26329 void VkEncoder::vkQueueWaitIdleAsyncGOOGLE(VkQueue queue, uint32_t doLock) {
26330 (void)doLock;
26331 bool queueSubmitWithCommandsEnabled =
26332 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26333 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26334 auto stream = mImpl->stream();
26335 auto pool = mImpl->pool();
26336 VkQueue local_queue;
26337 local_queue = queue;
26338 size_t count = 0;
26339 size_t* countPtr = &count;
26340 {
26341 uint64_t cgen_var_0;
26342 *countPtr += 1 * 8;
26343 }
26344 uint32_t packetSize_vkQueueWaitIdleAsyncGOOGLE =
26345 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26346 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueWaitIdleAsyncGOOGLE);
26347 uint8_t* packetBeginPtr = streamPtr;
26348 uint8_t** streamPtrPtr = &streamPtr;
26349 uint32_t opcode_vkQueueWaitIdleAsyncGOOGLE = OP_vkQueueWaitIdleAsyncGOOGLE;
26350 uint32_t seqno;
26351 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26352 memcpy(streamPtr, &opcode_vkQueueWaitIdleAsyncGOOGLE, sizeof(uint32_t));
26353 streamPtr += sizeof(uint32_t);
26354 memcpy(streamPtr, &packetSize_vkQueueWaitIdleAsyncGOOGLE, sizeof(uint32_t));
26355 streamPtr += sizeof(uint32_t);
26356 if (queueSubmitWithCommandsEnabled) {
26357 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26358 streamPtr += sizeof(uint32_t);
26359 }
26360 uint64_t cgen_var_0;
26361 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
26362 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26363 *streamPtrPtr += 1 * 8;
26364 stream->flush();
26365 ++encodeCount;
26366 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26367 pool->freeAll();
26368 stream->clearPool();
26369 }
26370 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26371 }
26372
vkQueueBindSparseAsyncGOOGLE(VkQueue queue,uint32_t bindInfoCount,const VkBindSparseInfo * pBindInfo,VkFence fence,uint32_t doLock)26373 void VkEncoder::vkQueueBindSparseAsyncGOOGLE(VkQueue queue, uint32_t bindInfoCount,
26374 const VkBindSparseInfo* pBindInfo, VkFence fence,
26375 uint32_t doLock) {
26376 (void)doLock;
26377 bool queueSubmitWithCommandsEnabled =
26378 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26379 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26380 auto stream = mImpl->stream();
26381 auto pool = mImpl->pool();
26382 VkQueue local_queue;
26383 uint32_t local_bindInfoCount;
26384 VkBindSparseInfo* local_pBindInfo;
26385 VkFence local_fence;
26386 local_queue = queue;
26387 local_bindInfoCount = bindInfoCount;
26388 local_pBindInfo = nullptr;
26389 if (pBindInfo) {
26390 local_pBindInfo =
26391 (VkBindSparseInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindSparseInfo));
26392 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
26393 deepcopy_VkBindSparseInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfo + i,
26394 (VkBindSparseInfo*)(local_pBindInfo + i));
26395 }
26396 }
26397 local_fence = fence;
26398 if (local_pBindInfo) {
26399 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
26400 transform_tohost_VkBindSparseInfo(sResourceTracker,
26401 (VkBindSparseInfo*)(local_pBindInfo + i));
26402 }
26403 }
26404 size_t count = 0;
26405 size_t* countPtr = &count;
26406 {
26407 uint64_t cgen_var_0;
26408 *countPtr += 1 * 8;
26409 *countPtr += sizeof(uint32_t);
26410 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
26411 count_VkBindSparseInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
26412 (VkBindSparseInfo*)(local_pBindInfo + i), countPtr);
26413 }
26414 uint64_t cgen_var_1;
26415 *countPtr += 1 * 8;
26416 }
26417 uint32_t packetSize_vkQueueBindSparseAsyncGOOGLE =
26418 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26419 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueBindSparseAsyncGOOGLE);
26420 uint8_t* packetBeginPtr = streamPtr;
26421 uint8_t** streamPtrPtr = &streamPtr;
26422 uint32_t opcode_vkQueueBindSparseAsyncGOOGLE = OP_vkQueueBindSparseAsyncGOOGLE;
26423 uint32_t seqno;
26424 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26425 memcpy(streamPtr, &opcode_vkQueueBindSparseAsyncGOOGLE, sizeof(uint32_t));
26426 streamPtr += sizeof(uint32_t);
26427 memcpy(streamPtr, &packetSize_vkQueueBindSparseAsyncGOOGLE, sizeof(uint32_t));
26428 streamPtr += sizeof(uint32_t);
26429 if (queueSubmitWithCommandsEnabled) {
26430 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26431 streamPtr += sizeof(uint32_t);
26432 }
26433 uint64_t cgen_var_0;
26434 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
26435 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26436 *streamPtrPtr += 1 * 8;
26437 memcpy(*streamPtrPtr, (uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
26438 *streamPtrPtr += sizeof(uint32_t);
26439 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i) {
26440 reservedmarshal_VkBindSparseInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
26441 (VkBindSparseInfo*)(local_pBindInfo + i), streamPtrPtr);
26442 }
26443 uint64_t cgen_var_1;
26444 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
26445 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
26446 *streamPtrPtr += 1 * 8;
26447 stream->flush();
26448 ++encodeCount;
26449 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26450 pool->freeAll();
26451 stream->clearPool();
26452 }
26453 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26454 }
26455
vkGetLinearImageLayoutGOOGLE(VkDevice device,VkFormat format,VkDeviceSize * pOffset,VkDeviceSize * pRowPitchAlignment,uint32_t doLock)26456 void VkEncoder::vkGetLinearImageLayoutGOOGLE(VkDevice device, VkFormat format,
26457 VkDeviceSize* pOffset,
26458 VkDeviceSize* pRowPitchAlignment, uint32_t doLock) {
26459 (void)doLock;
26460 bool queueSubmitWithCommandsEnabled =
26461 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26462 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26463 auto stream = mImpl->stream();
26464 auto pool = mImpl->pool();
26465 VkDevice local_device;
26466 VkFormat local_format;
26467 local_device = device;
26468 local_format = format;
26469 size_t count = 0;
26470 size_t* countPtr = &count;
26471 {
26472 uint64_t cgen_var_0;
26473 *countPtr += 1 * 8;
26474 *countPtr += sizeof(VkFormat);
26475 *countPtr += sizeof(VkDeviceSize);
26476 *countPtr += sizeof(VkDeviceSize);
26477 }
26478 uint32_t packetSize_vkGetLinearImageLayoutGOOGLE =
26479 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26480 uint8_t* streamPtr = stream->reserve(packetSize_vkGetLinearImageLayoutGOOGLE);
26481 uint8_t* packetBeginPtr = streamPtr;
26482 uint8_t** streamPtrPtr = &streamPtr;
26483 uint32_t opcode_vkGetLinearImageLayoutGOOGLE = OP_vkGetLinearImageLayoutGOOGLE;
26484 uint32_t seqno;
26485 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26486 memcpy(streamPtr, &opcode_vkGetLinearImageLayoutGOOGLE, sizeof(uint32_t));
26487 streamPtr += sizeof(uint32_t);
26488 memcpy(streamPtr, &packetSize_vkGetLinearImageLayoutGOOGLE, sizeof(uint32_t));
26489 streamPtr += sizeof(uint32_t);
26490 if (queueSubmitWithCommandsEnabled) {
26491 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26492 streamPtr += sizeof(uint32_t);
26493 }
26494 uint64_t cgen_var_0;
26495 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
26496 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26497 *streamPtrPtr += 1 * 8;
26498 memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
26499 *streamPtrPtr += sizeof(VkFormat);
26500 memcpy(*streamPtrPtr, (VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
26501 *streamPtrPtr += sizeof(VkDeviceSize);
26502 memcpy(*streamPtrPtr, (VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
26503 *streamPtrPtr += sizeof(VkDeviceSize);
26504 stream->read((VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
26505 stream->read((VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
26506 ++encodeCount;
26507 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26508 pool->freeAll();
26509 stream->clearPool();
26510 }
26511 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26512 }
26513
vkGetLinearImageLayout2GOOGLE(VkDevice device,const VkImageCreateInfo * pCreateInfo,VkDeviceSize * pOffset,VkDeviceSize * pRowPitchAlignment,uint32_t doLock)26514 void VkEncoder::vkGetLinearImageLayout2GOOGLE(VkDevice device, const VkImageCreateInfo* pCreateInfo,
26515 VkDeviceSize* pOffset,
26516 VkDeviceSize* pRowPitchAlignment, uint32_t doLock) {
26517 (void)doLock;
26518 bool queueSubmitWithCommandsEnabled =
26519 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26520 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26521 auto stream = mImpl->stream();
26522 auto pool = mImpl->pool();
26523 VkDevice local_device;
26524 VkImageCreateInfo* local_pCreateInfo;
26525 local_device = device;
26526 local_pCreateInfo = nullptr;
26527 if (pCreateInfo) {
26528 local_pCreateInfo = (VkImageCreateInfo*)pool->alloc(sizeof(const VkImageCreateInfo));
26529 deepcopy_VkImageCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo,
26530 (VkImageCreateInfo*)(local_pCreateInfo));
26531 }
26532 if (local_pCreateInfo) {
26533 sResourceTracker->transformImpl_VkImageCreateInfo_tohost(local_pCreateInfo, 1);
26534 transform_tohost_VkImageCreateInfo(sResourceTracker,
26535 (VkImageCreateInfo*)(local_pCreateInfo));
26536 }
26537 size_t count = 0;
26538 size_t* countPtr = &count;
26539 {
26540 uint64_t cgen_var_0;
26541 *countPtr += 1 * 8;
26542 count_VkImageCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
26543 (VkImageCreateInfo*)(local_pCreateInfo), countPtr);
26544 *countPtr += sizeof(VkDeviceSize);
26545 *countPtr += sizeof(VkDeviceSize);
26546 }
26547 uint32_t packetSize_vkGetLinearImageLayout2GOOGLE =
26548 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26549 uint8_t* streamPtr = stream->reserve(packetSize_vkGetLinearImageLayout2GOOGLE);
26550 uint8_t* packetBeginPtr = streamPtr;
26551 uint8_t** streamPtrPtr = &streamPtr;
26552 uint32_t opcode_vkGetLinearImageLayout2GOOGLE = OP_vkGetLinearImageLayout2GOOGLE;
26553 uint32_t seqno;
26554 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26555 memcpy(streamPtr, &opcode_vkGetLinearImageLayout2GOOGLE, sizeof(uint32_t));
26556 streamPtr += sizeof(uint32_t);
26557 memcpy(streamPtr, &packetSize_vkGetLinearImageLayout2GOOGLE, sizeof(uint32_t));
26558 streamPtr += sizeof(uint32_t);
26559 if (queueSubmitWithCommandsEnabled) {
26560 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26561 streamPtr += sizeof(uint32_t);
26562 }
26563 uint64_t cgen_var_0;
26564 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
26565 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26566 *streamPtrPtr += 1 * 8;
26567 reservedmarshal_VkImageCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
26568 (VkImageCreateInfo*)(local_pCreateInfo), streamPtrPtr);
26569 memcpy(*streamPtrPtr, (VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
26570 *streamPtrPtr += sizeof(VkDeviceSize);
26571 memcpy(*streamPtrPtr, (VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
26572 *streamPtrPtr += sizeof(VkDeviceSize);
26573 stream->read((VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
26574 stream->read((VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
26575 ++encodeCount;
26576 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26577 pool->freeAll();
26578 stream->clearPool();
26579 }
26580 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26581 }
26582
vkQueueFlushCommandsGOOGLE(VkQueue queue,VkCommandBuffer commandBuffer,VkDeviceSize dataSize,const void * pData,uint32_t doLock)26583 void VkEncoder::vkQueueFlushCommandsGOOGLE(VkQueue queue, VkCommandBuffer commandBuffer,
26584 VkDeviceSize dataSize, const void* pData,
26585 uint32_t doLock) {
26586 #include "vkQueueFlushCommandsGOOGLE_encode_impl.cpp.inl"
26587 }
26588
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)26589 void VkEncoder::vkQueueCommitDescriptorSetUpdatesGOOGLE(
26590 VkQueue queue, uint32_t descriptorPoolCount, const VkDescriptorPool* pDescriptorPools,
26591 uint32_t descriptorSetCount, const VkDescriptorSetLayout* pSetLayouts,
26592 const uint64_t* pDescriptorSetPoolIds, const uint32_t* pDescriptorSetWhichPool,
26593 const uint32_t* pDescriptorSetPendingAllocation,
26594 const uint32_t* pDescriptorWriteStartingIndices, uint32_t pendingDescriptorWriteCount,
26595 const VkWriteDescriptorSet* pPendingDescriptorWrites, uint32_t doLock) {
26596 (void)doLock;
26597 bool queueSubmitWithCommandsEnabled =
26598 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26599 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26600 auto stream = mImpl->stream();
26601 auto pool = mImpl->pool();
26602 VkQueue local_queue;
26603 uint32_t local_descriptorPoolCount;
26604 VkDescriptorPool* local_pDescriptorPools;
26605 uint32_t local_descriptorSetCount;
26606 VkDescriptorSetLayout* local_pSetLayouts;
26607 uint64_t* local_pDescriptorSetPoolIds;
26608 uint32_t* local_pDescriptorSetWhichPool;
26609 uint32_t* local_pDescriptorSetPendingAllocation;
26610 uint32_t* local_pDescriptorWriteStartingIndices;
26611 uint32_t local_pendingDescriptorWriteCount;
26612 VkWriteDescriptorSet* local_pPendingDescriptorWrites;
26613 local_queue = queue;
26614 local_descriptorPoolCount = descriptorPoolCount;
26615 // Avoiding deepcopy for pDescriptorPools
26616 local_pDescriptorPools = (VkDescriptorPool*)pDescriptorPools;
26617 local_descriptorSetCount = descriptorSetCount;
26618 // Avoiding deepcopy for pSetLayouts
26619 local_pSetLayouts = (VkDescriptorSetLayout*)pSetLayouts;
26620 // Avoiding deepcopy for pDescriptorSetPoolIds
26621 local_pDescriptorSetPoolIds = (uint64_t*)pDescriptorSetPoolIds;
26622 // Avoiding deepcopy for pDescriptorSetWhichPool
26623 local_pDescriptorSetWhichPool = (uint32_t*)pDescriptorSetWhichPool;
26624 // Avoiding deepcopy for pDescriptorSetPendingAllocation
26625 local_pDescriptorSetPendingAllocation = (uint32_t*)pDescriptorSetPendingAllocation;
26626 // Avoiding deepcopy for pDescriptorWriteStartingIndices
26627 local_pDescriptorWriteStartingIndices = (uint32_t*)pDescriptorWriteStartingIndices;
26628 local_pendingDescriptorWriteCount = pendingDescriptorWriteCount;
26629 local_pPendingDescriptorWrites = nullptr;
26630 if (pPendingDescriptorWrites) {
26631 local_pPendingDescriptorWrites = (VkWriteDescriptorSet*)pool->alloc(
26632 ((pendingDescriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
26633 for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i) {
26634 deepcopy_VkWriteDescriptorSet(
26635 pool, VK_STRUCTURE_TYPE_MAX_ENUM, pPendingDescriptorWrites + i,
26636 (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i));
26637 }
26638 }
26639 if (local_pPendingDescriptorWrites) {
26640 for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i) {
26641 transform_tohost_VkWriteDescriptorSet(
26642 sResourceTracker, (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i));
26643 }
26644 }
26645 size_t count = 0;
26646 size_t* countPtr = &count;
26647 {
26648 uint64_t cgen_var_0;
26649 *countPtr += 1 * 8;
26650 *countPtr += sizeof(uint32_t);
26651 if (((descriptorPoolCount))) {
26652 *countPtr += ((descriptorPoolCount)) * 8;
26653 }
26654 *countPtr += sizeof(uint32_t);
26655 if (((descriptorSetCount))) {
26656 *countPtr += ((descriptorSetCount)) * 8;
26657 }
26658 *countPtr += ((descriptorSetCount)) * sizeof(uint64_t);
26659 *countPtr += ((descriptorSetCount)) * sizeof(uint32_t);
26660 *countPtr += ((descriptorSetCount)) * sizeof(uint32_t);
26661 *countPtr += ((descriptorSetCount)) * sizeof(uint32_t);
26662 *countPtr += sizeof(uint32_t);
26663 for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i) {
26664 count_VkWriteDescriptorSet(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
26665 (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i),
26666 countPtr);
26667 }
26668 }
26669 uint32_t packetSize_vkQueueCommitDescriptorSetUpdatesGOOGLE =
26670 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26671 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueCommitDescriptorSetUpdatesGOOGLE);
26672 uint8_t* packetBeginPtr = streamPtr;
26673 uint8_t** streamPtrPtr = &streamPtr;
26674 uint32_t opcode_vkQueueCommitDescriptorSetUpdatesGOOGLE =
26675 OP_vkQueueCommitDescriptorSetUpdatesGOOGLE;
26676 uint32_t seqno;
26677 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26678 memcpy(streamPtr, &opcode_vkQueueCommitDescriptorSetUpdatesGOOGLE, sizeof(uint32_t));
26679 streamPtr += sizeof(uint32_t);
26680 memcpy(streamPtr, &packetSize_vkQueueCommitDescriptorSetUpdatesGOOGLE, sizeof(uint32_t));
26681 streamPtr += sizeof(uint32_t);
26682 if (queueSubmitWithCommandsEnabled) {
26683 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26684 streamPtr += sizeof(uint32_t);
26685 }
26686 uint64_t cgen_var_0;
26687 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
26688 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26689 *streamPtrPtr += 1 * 8;
26690 memcpy(*streamPtrPtr, (uint32_t*)&local_descriptorPoolCount, sizeof(uint32_t));
26691 *streamPtrPtr += sizeof(uint32_t);
26692 if (((descriptorPoolCount))) {
26693 uint8_t* cgen_var_1_ptr = (uint8_t*)(*streamPtrPtr);
26694 for (uint32_t k = 0; k < ((descriptorPoolCount)); ++k) {
26695 uint64_t tmpval = get_host_u64_VkDescriptorPool(local_pDescriptorPools[k]);
26696 memcpy(cgen_var_1_ptr + k * 8, &tmpval, sizeof(uint64_t));
26697 }
26698 *streamPtrPtr += 8 * ((descriptorPoolCount));
26699 }
26700 memcpy(*streamPtrPtr, (uint32_t*)&local_descriptorSetCount, sizeof(uint32_t));
26701 *streamPtrPtr += sizeof(uint32_t);
26702 if (((descriptorSetCount))) {
26703 uint8_t* cgen_var_2_ptr = (uint8_t*)(*streamPtrPtr);
26704 for (uint32_t k = 0; k < ((descriptorSetCount)); ++k) {
26705 uint64_t tmpval = get_host_u64_VkDescriptorSetLayout(local_pSetLayouts[k]);
26706 memcpy(cgen_var_2_ptr + k * 8, &tmpval, sizeof(uint64_t));
26707 }
26708 *streamPtrPtr += 8 * ((descriptorSetCount));
26709 }
26710 memcpy(*streamPtrPtr, (uint64_t*)local_pDescriptorSetPoolIds,
26711 ((descriptorSetCount)) * sizeof(uint64_t));
26712 *streamPtrPtr += ((descriptorSetCount)) * sizeof(uint64_t);
26713 memcpy(*streamPtrPtr, (uint32_t*)local_pDescriptorSetWhichPool,
26714 ((descriptorSetCount)) * sizeof(uint32_t));
26715 *streamPtrPtr += ((descriptorSetCount)) * sizeof(uint32_t);
26716 memcpy(*streamPtrPtr, (uint32_t*)local_pDescriptorSetPendingAllocation,
26717 ((descriptorSetCount)) * sizeof(uint32_t));
26718 *streamPtrPtr += ((descriptorSetCount)) * sizeof(uint32_t);
26719 memcpy(*streamPtrPtr, (uint32_t*)local_pDescriptorWriteStartingIndices,
26720 ((descriptorSetCount)) * sizeof(uint32_t));
26721 *streamPtrPtr += ((descriptorSetCount)) * sizeof(uint32_t);
26722 memcpy(*streamPtrPtr, (uint32_t*)&local_pendingDescriptorWriteCount, sizeof(uint32_t));
26723 *streamPtrPtr += sizeof(uint32_t);
26724 for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i) {
26725 reservedmarshal_VkWriteDescriptorSet(
26726 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
26727 (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i), streamPtrPtr);
26728 }
26729 stream->flush();
26730 ++encodeCount;
26731 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26732 pool->freeAll();
26733 stream->clearPool();
26734 }
26735 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26736 }
26737
vkCollectDescriptorPoolIdsGOOGLE(VkDevice device,VkDescriptorPool descriptorPool,uint32_t * pPoolIdCount,uint64_t * pPoolIds,uint32_t doLock)26738 void VkEncoder::vkCollectDescriptorPoolIdsGOOGLE(VkDevice device, VkDescriptorPool descriptorPool,
26739 uint32_t* pPoolIdCount, uint64_t* pPoolIds,
26740 uint32_t doLock) {
26741 (void)doLock;
26742 bool queueSubmitWithCommandsEnabled =
26743 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26744 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26745 auto stream = mImpl->stream();
26746 auto pool = mImpl->pool();
26747 VkDevice local_device;
26748 VkDescriptorPool local_descriptorPool;
26749 local_device = device;
26750 local_descriptorPool = descriptorPool;
26751 size_t count = 0;
26752 size_t* countPtr = &count;
26753 {
26754 uint64_t cgen_var_0;
26755 *countPtr += 1 * 8;
26756 uint64_t cgen_var_1;
26757 *countPtr += 1 * 8;
26758 *countPtr += sizeof(uint32_t);
26759 // WARNING PTR CHECK
26760 *countPtr += 8;
26761 if (pPoolIds) {
26762 if (pPoolIdCount) {
26763 *countPtr += (*(pPoolIdCount)) * sizeof(uint64_t);
26764 }
26765 }
26766 }
26767 uint32_t packetSize_vkCollectDescriptorPoolIdsGOOGLE =
26768 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26769 uint8_t* streamPtr = stream->reserve(packetSize_vkCollectDescriptorPoolIdsGOOGLE);
26770 uint8_t* packetBeginPtr = streamPtr;
26771 uint8_t** streamPtrPtr = &streamPtr;
26772 uint32_t opcode_vkCollectDescriptorPoolIdsGOOGLE = OP_vkCollectDescriptorPoolIdsGOOGLE;
26773 uint32_t seqno;
26774 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26775 memcpy(streamPtr, &opcode_vkCollectDescriptorPoolIdsGOOGLE, sizeof(uint32_t));
26776 streamPtr += sizeof(uint32_t);
26777 memcpy(streamPtr, &packetSize_vkCollectDescriptorPoolIdsGOOGLE, sizeof(uint32_t));
26778 streamPtr += sizeof(uint32_t);
26779 if (queueSubmitWithCommandsEnabled) {
26780 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26781 streamPtr += sizeof(uint32_t);
26782 }
26783 uint64_t cgen_var_0;
26784 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
26785 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26786 *streamPtrPtr += 1 * 8;
26787 uint64_t cgen_var_1;
26788 *&cgen_var_1 = get_host_u64_VkDescriptorPool((*&local_descriptorPool));
26789 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
26790 *streamPtrPtr += 1 * 8;
26791 memcpy(*streamPtrPtr, (uint32_t*)pPoolIdCount, sizeof(uint32_t));
26792 *streamPtrPtr += sizeof(uint32_t);
26793 // WARNING PTR CHECK
26794 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)pPoolIds;
26795 memcpy((*streamPtrPtr), &cgen_var_2, 8);
26796 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26797 *streamPtrPtr += 8;
26798 if (pPoolIds) {
26799 memcpy(*streamPtrPtr, (uint64_t*)pPoolIds, (*(pPoolIdCount)) * sizeof(uint64_t));
26800 *streamPtrPtr += (*(pPoolIdCount)) * sizeof(uint64_t);
26801 }
26802 stream->read((uint32_t*)pPoolIdCount, sizeof(uint32_t));
26803 // WARNING PTR CHECK
26804 uint64_t* check_pPoolIds;
26805 check_pPoolIds = (uint64_t*)(uintptr_t)stream->getBe64();
26806 if (pPoolIds) {
26807 if (!(check_pPoolIds)) {
26808 fprintf(stderr, "fatal: pPoolIds inconsistent between guest and host\n");
26809 }
26810 stream->read((uint64_t*)pPoolIds, (*(pPoolIdCount)) * sizeof(uint64_t));
26811 }
26812 ++encodeCount;
26813 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26814 pool->freeAll();
26815 stream->clearPool();
26816 }
26817 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26818 }
26819
vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(VkQueue queue,uint32_t waitSemaphoreCount,const VkSemaphore * pWaitSemaphores,VkImage image,uint32_t doLock)26820 void VkEncoder::vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(VkQueue queue,
26821 uint32_t waitSemaphoreCount,
26822 const VkSemaphore* pWaitSemaphores,
26823 VkImage image, uint32_t doLock) {
26824 (void)doLock;
26825 bool queueSubmitWithCommandsEnabled =
26826 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26827 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26828 auto stream = mImpl->stream();
26829 auto pool = mImpl->pool();
26830 VkQueue local_queue;
26831 uint32_t local_waitSemaphoreCount;
26832 VkSemaphore* local_pWaitSemaphores;
26833 VkImage local_image;
26834 local_queue = queue;
26835 local_waitSemaphoreCount = waitSemaphoreCount;
26836 // Avoiding deepcopy for pWaitSemaphores
26837 local_pWaitSemaphores = (VkSemaphore*)pWaitSemaphores;
26838 local_image = image;
26839 size_t count = 0;
26840 size_t* countPtr = &count;
26841 {
26842 uint64_t cgen_var_0;
26843 *countPtr += 1 * 8;
26844 *countPtr += sizeof(uint32_t);
26845 // WARNING PTR CHECK
26846 *countPtr += 8;
26847 if (local_pWaitSemaphores) {
26848 if (((waitSemaphoreCount))) {
26849 *countPtr += ((waitSemaphoreCount)) * 8;
26850 }
26851 }
26852 uint64_t cgen_var_1;
26853 *countPtr += 1 * 8;
26854 }
26855 uint32_t packetSize_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE =
26856 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26857 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE);
26858 uint8_t* packetBeginPtr = streamPtr;
26859 uint8_t** streamPtrPtr = &streamPtr;
26860 uint32_t opcode_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE =
26861 OP_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE;
26862 uint32_t seqno;
26863 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26864 memcpy(streamPtr, &opcode_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE, sizeof(uint32_t));
26865 streamPtr += sizeof(uint32_t);
26866 memcpy(streamPtr, &packetSize_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE, sizeof(uint32_t));
26867 streamPtr += sizeof(uint32_t);
26868 if (queueSubmitWithCommandsEnabled) {
26869 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26870 streamPtr += sizeof(uint32_t);
26871 }
26872 uint64_t cgen_var_0;
26873 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
26874 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26875 *streamPtrPtr += 1 * 8;
26876 memcpy(*streamPtrPtr, (uint32_t*)&local_waitSemaphoreCount, sizeof(uint32_t));
26877 *streamPtrPtr += sizeof(uint32_t);
26878 // WARNING PTR CHECK
26879 uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pWaitSemaphores;
26880 memcpy((*streamPtrPtr), &cgen_var_1, 8);
26881 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
26882 *streamPtrPtr += 8;
26883 if (local_pWaitSemaphores) {
26884 if (((waitSemaphoreCount))) {
26885 uint8_t* cgen_var_1_0_ptr = (uint8_t*)(*streamPtrPtr);
26886 for (uint32_t k = 0; k < ((waitSemaphoreCount)); ++k) {
26887 uint64_t tmpval = get_host_u64_VkSemaphore(local_pWaitSemaphores[k]);
26888 memcpy(cgen_var_1_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
26889 }
26890 *streamPtrPtr += 8 * ((waitSemaphoreCount));
26891 }
26892 }
26893 uint64_t cgen_var_2;
26894 *&cgen_var_2 = get_host_u64_VkImage((*&local_image));
26895 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
26896 *streamPtrPtr += 1 * 8;
26897 stream->flush();
26898 ++encodeCount;
26899 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26900 pool->freeAll();
26901 stream->clearPool();
26902 }
26903 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26904 }
26905
vkQueueFlushCommandsFromAuxMemoryGOOGLE(VkQueue queue,VkCommandBuffer commandBuffer,VkDeviceMemory deviceMemory,VkDeviceSize dataOffset,VkDeviceSize dataSize,uint32_t doLock)26906 void VkEncoder::vkQueueFlushCommandsFromAuxMemoryGOOGLE(VkQueue queue,
26907 VkCommandBuffer commandBuffer,
26908 VkDeviceMemory deviceMemory,
26909 VkDeviceSize dataOffset,
26910 VkDeviceSize dataSize, uint32_t doLock) {
26911 (void)doLock;
26912 bool queueSubmitWithCommandsEnabled =
26913 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26914 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26915 auto stream = mImpl->stream();
26916 auto pool = mImpl->pool();
26917 VkQueue local_queue;
26918 VkCommandBuffer local_commandBuffer;
26919 VkDeviceMemory local_deviceMemory;
26920 VkDeviceSize local_dataOffset;
26921 VkDeviceSize local_dataSize;
26922 local_queue = queue;
26923 local_commandBuffer = commandBuffer;
26924 local_deviceMemory = deviceMemory;
26925 local_dataOffset = dataOffset;
26926 local_dataSize = dataSize;
26927 size_t count = 0;
26928 size_t* countPtr = &count;
26929 {
26930 uint64_t cgen_var_0;
26931 *countPtr += 1 * 8;
26932 uint64_t cgen_var_1;
26933 *countPtr += 1 * 8;
26934 uint64_t cgen_var_2;
26935 *countPtr += 1 * 8;
26936 *countPtr += sizeof(VkDeviceSize);
26937 *countPtr += sizeof(VkDeviceSize);
26938 }
26939 uint32_t packetSize_vkQueueFlushCommandsFromAuxMemoryGOOGLE =
26940 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
26941 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueFlushCommandsFromAuxMemoryGOOGLE);
26942 uint8_t* packetBeginPtr = streamPtr;
26943 uint8_t** streamPtrPtr = &streamPtr;
26944 uint32_t opcode_vkQueueFlushCommandsFromAuxMemoryGOOGLE =
26945 OP_vkQueueFlushCommandsFromAuxMemoryGOOGLE;
26946 uint32_t seqno;
26947 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
26948 memcpy(streamPtr, &opcode_vkQueueFlushCommandsFromAuxMemoryGOOGLE, sizeof(uint32_t));
26949 streamPtr += sizeof(uint32_t);
26950 memcpy(streamPtr, &packetSize_vkQueueFlushCommandsFromAuxMemoryGOOGLE, sizeof(uint32_t));
26951 streamPtr += sizeof(uint32_t);
26952 if (queueSubmitWithCommandsEnabled) {
26953 memcpy(streamPtr, &seqno, sizeof(uint32_t));
26954 streamPtr += sizeof(uint32_t);
26955 }
26956 uint64_t cgen_var_0;
26957 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
26958 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
26959 *streamPtrPtr += 1 * 8;
26960 uint64_t cgen_var_1;
26961 *&cgen_var_1 = get_host_u64_VkCommandBuffer((*&local_commandBuffer));
26962 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
26963 *streamPtrPtr += 1 * 8;
26964 uint64_t cgen_var_2;
26965 *&cgen_var_2 = get_host_u64_VkDeviceMemory((*&local_deviceMemory));
26966 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
26967 *streamPtrPtr += 1 * 8;
26968 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_dataOffset, sizeof(VkDeviceSize));
26969 *streamPtrPtr += sizeof(VkDeviceSize);
26970 memcpy(*streamPtrPtr, (VkDeviceSize*)&local_dataSize, sizeof(VkDeviceSize));
26971 *streamPtrPtr += sizeof(VkDeviceSize);
26972 stream->flush();
26973 ++encodeCount;
26974 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
26975 pool->freeAll();
26976 stream->clearPool();
26977 }
26978 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
26979 }
26980
vkGetBlobGOOGLE(VkDevice device,VkDeviceMemory memory,uint32_t doLock)26981 VkResult VkEncoder::vkGetBlobGOOGLE(VkDevice device, VkDeviceMemory memory, uint32_t doLock) {
26982 (void)doLock;
26983 bool queueSubmitWithCommandsEnabled =
26984 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
26985 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
26986 auto stream = mImpl->stream();
26987 auto pool = mImpl->pool();
26988 VkDevice local_device;
26989 VkDeviceMemory local_memory;
26990 local_device = device;
26991 local_memory = memory;
26992 sResourceTracker->deviceMemoryTransform_tohost(
26993 (VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0,
26994 (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
26995 size_t count = 0;
26996 size_t* countPtr = &count;
26997 {
26998 uint64_t cgen_var_0;
26999 *countPtr += 1 * 8;
27000 uint64_t cgen_var_1;
27001 *countPtr += 1 * 8;
27002 }
27003 uint32_t packetSize_vkGetBlobGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
27004 uint8_t* streamPtr = stream->reserve(packetSize_vkGetBlobGOOGLE);
27005 uint8_t* packetBeginPtr = streamPtr;
27006 uint8_t** streamPtrPtr = &streamPtr;
27007 uint32_t opcode_vkGetBlobGOOGLE = OP_vkGetBlobGOOGLE;
27008 uint32_t seqno;
27009 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
27010 memcpy(streamPtr, &opcode_vkGetBlobGOOGLE, sizeof(uint32_t));
27011 streamPtr += sizeof(uint32_t);
27012 memcpy(streamPtr, &packetSize_vkGetBlobGOOGLE, sizeof(uint32_t));
27013 streamPtr += sizeof(uint32_t);
27014 if (queueSubmitWithCommandsEnabled) {
27015 memcpy(streamPtr, &seqno, sizeof(uint32_t));
27016 streamPtr += sizeof(uint32_t);
27017 }
27018 uint64_t cgen_var_0;
27019 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
27020 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
27021 *streamPtrPtr += 1 * 8;
27022 uint64_t cgen_var_1;
27023 *&cgen_var_1 = get_host_u64_VkDeviceMemory((*&local_memory));
27024 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
27025 *streamPtrPtr += 1 * 8;
27026 VkResult vkGetBlobGOOGLE_VkResult_return = (VkResult)0;
27027 stream->read(&vkGetBlobGOOGLE_VkResult_return, sizeof(VkResult));
27028 ++encodeCount;
27029 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
27030 pool->freeAll();
27031 stream->clearPool();
27032 }
27033 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
27034 return vkGetBlobGOOGLE_VkResult_return;
27035 }
27036
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)27037 void VkEncoder::vkUpdateDescriptorSetWithTemplateSized2GOOGLE(
27038 VkDevice device, VkDescriptorSet descriptorSet,
27039 VkDescriptorUpdateTemplate descriptorUpdateTemplate, uint32_t imageInfoCount,
27040 uint32_t bufferInfoCount, uint32_t bufferViewCount, uint32_t inlineUniformBlockCount,
27041 const uint32_t* pImageInfoEntryIndices, const uint32_t* pBufferInfoEntryIndices,
27042 const uint32_t* pBufferViewEntryIndices, const VkDescriptorImageInfo* pImageInfos,
27043 const VkDescriptorBufferInfo* pBufferInfos, const VkBufferView* pBufferViews,
27044 const uint8_t* pInlineUniformBlockData, uint32_t doLock) {
27045 (void)doLock;
27046 bool queueSubmitWithCommandsEnabled =
27047 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
27048 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
27049 auto stream = mImpl->stream();
27050 auto pool = mImpl->pool();
27051 VkDevice local_device;
27052 VkDescriptorSet local_descriptorSet;
27053 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
27054 uint32_t local_imageInfoCount;
27055 uint32_t local_bufferInfoCount;
27056 uint32_t local_bufferViewCount;
27057 uint32_t local_inlineUniformBlockCount;
27058 uint32_t* local_pImageInfoEntryIndices;
27059 uint32_t* local_pBufferInfoEntryIndices;
27060 uint32_t* local_pBufferViewEntryIndices;
27061 VkDescriptorImageInfo* local_pImageInfos;
27062 VkDescriptorBufferInfo* local_pBufferInfos;
27063 VkBufferView* local_pBufferViews;
27064 uint8_t* local_pInlineUniformBlockData;
27065 local_device = device;
27066 local_descriptorSet = descriptorSet;
27067 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
27068 local_imageInfoCount = imageInfoCount;
27069 local_bufferInfoCount = bufferInfoCount;
27070 local_bufferViewCount = bufferViewCount;
27071 local_inlineUniformBlockCount = inlineUniformBlockCount;
27072 // Avoiding deepcopy for pImageInfoEntryIndices
27073 local_pImageInfoEntryIndices = (uint32_t*)pImageInfoEntryIndices;
27074 // Avoiding deepcopy for pBufferInfoEntryIndices
27075 local_pBufferInfoEntryIndices = (uint32_t*)pBufferInfoEntryIndices;
27076 // Avoiding deepcopy for pBufferViewEntryIndices
27077 local_pBufferViewEntryIndices = (uint32_t*)pBufferViewEntryIndices;
27078 local_pImageInfos = nullptr;
27079 if (pImageInfos) {
27080 local_pImageInfos = (VkDescriptorImageInfo*)pool->alloc(
27081 ((imageInfoCount)) * sizeof(const VkDescriptorImageInfo));
27082 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
27083 deepcopy_VkDescriptorImageInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageInfos + i,
27084 (VkDescriptorImageInfo*)(local_pImageInfos + i));
27085 }
27086 }
27087 local_pBufferInfos = nullptr;
27088 if (pBufferInfos) {
27089 local_pBufferInfos = (VkDescriptorBufferInfo*)pool->alloc(
27090 ((bufferInfoCount)) * sizeof(const VkDescriptorBufferInfo));
27091 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
27092 deepcopy_VkDescriptorBufferInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBufferInfos + i,
27093 (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
27094 }
27095 }
27096 // Avoiding deepcopy for pBufferViews
27097 local_pBufferViews = (VkBufferView*)pBufferViews;
27098 // Avoiding deepcopy for pInlineUniformBlockData
27099 local_pInlineUniformBlockData = (uint8_t*)pInlineUniformBlockData;
27100 if (local_pImageInfos) {
27101 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
27102 transform_tohost_VkDescriptorImageInfo(sResourceTracker,
27103 (VkDescriptorImageInfo*)(local_pImageInfos + i));
27104 }
27105 }
27106 if (local_pBufferInfos) {
27107 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
27108 transform_tohost_VkDescriptorBufferInfo(
27109 sResourceTracker, (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
27110 }
27111 }
27112 size_t count = 0;
27113 size_t* countPtr = &count;
27114 {
27115 uint64_t cgen_var_0;
27116 *countPtr += 1 * 8;
27117 uint64_t cgen_var_1;
27118 *countPtr += 1 * 8;
27119 uint64_t cgen_var_2;
27120 *countPtr += 1 * 8;
27121 *countPtr += sizeof(uint32_t);
27122 *countPtr += sizeof(uint32_t);
27123 *countPtr += sizeof(uint32_t);
27124 *countPtr += sizeof(uint32_t);
27125 // WARNING PTR CHECK
27126 *countPtr += 8;
27127 if (local_pImageInfoEntryIndices) {
27128 *countPtr += ((imageInfoCount)) * sizeof(uint32_t);
27129 }
27130 // WARNING PTR CHECK
27131 *countPtr += 8;
27132 if (local_pBufferInfoEntryIndices) {
27133 *countPtr += ((bufferInfoCount)) * sizeof(uint32_t);
27134 }
27135 // WARNING PTR CHECK
27136 *countPtr += 8;
27137 if (local_pBufferViewEntryIndices) {
27138 *countPtr += ((bufferViewCount)) * sizeof(uint32_t);
27139 }
27140 // WARNING PTR CHECK
27141 *countPtr += 8;
27142 if (local_pImageInfos) {
27143 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
27144 count_VkDescriptorImageInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
27145 (VkDescriptorImageInfo*)(local_pImageInfos + i),
27146 countPtr);
27147 }
27148 }
27149 // WARNING PTR CHECK
27150 *countPtr += 8;
27151 if (local_pBufferInfos) {
27152 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
27153 count_VkDescriptorBufferInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
27154 (VkDescriptorBufferInfo*)(local_pBufferInfos + i),
27155 countPtr);
27156 }
27157 }
27158 // WARNING PTR CHECK
27159 *countPtr += 8;
27160 if (local_pBufferViews) {
27161 if (((bufferViewCount))) {
27162 *countPtr += ((bufferViewCount)) * 8;
27163 }
27164 }
27165 // WARNING PTR CHECK
27166 *countPtr += 8;
27167 if (local_pInlineUniformBlockData) {
27168 *countPtr += ((inlineUniformBlockCount)) * sizeof(uint8_t);
27169 }
27170 }
27171 uint32_t packetSize_vkUpdateDescriptorSetWithTemplateSized2GOOGLE =
27172 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
27173 uint8_t* streamPtr = stream->reserve(packetSize_vkUpdateDescriptorSetWithTemplateSized2GOOGLE);
27174 uint8_t* packetBeginPtr = streamPtr;
27175 uint8_t** streamPtrPtr = &streamPtr;
27176 uint32_t opcode_vkUpdateDescriptorSetWithTemplateSized2GOOGLE =
27177 OP_vkUpdateDescriptorSetWithTemplateSized2GOOGLE;
27178 uint32_t seqno;
27179 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
27180 memcpy(streamPtr, &opcode_vkUpdateDescriptorSetWithTemplateSized2GOOGLE, sizeof(uint32_t));
27181 streamPtr += sizeof(uint32_t);
27182 memcpy(streamPtr, &packetSize_vkUpdateDescriptorSetWithTemplateSized2GOOGLE, sizeof(uint32_t));
27183 streamPtr += sizeof(uint32_t);
27184 if (queueSubmitWithCommandsEnabled) {
27185 memcpy(streamPtr, &seqno, sizeof(uint32_t));
27186 streamPtr += sizeof(uint32_t);
27187 }
27188 uint64_t cgen_var_0;
27189 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
27190 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
27191 *streamPtrPtr += 1 * 8;
27192 uint64_t cgen_var_1;
27193 *&cgen_var_1 = get_host_u64_VkDescriptorSet((*&local_descriptorSet));
27194 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
27195 *streamPtrPtr += 1 * 8;
27196 uint64_t cgen_var_2;
27197 *&cgen_var_2 = get_host_u64_VkDescriptorUpdateTemplate((*&local_descriptorUpdateTemplate));
27198 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 1 * 8);
27199 *streamPtrPtr += 1 * 8;
27200 memcpy(*streamPtrPtr, (uint32_t*)&local_imageInfoCount, sizeof(uint32_t));
27201 *streamPtrPtr += sizeof(uint32_t);
27202 memcpy(*streamPtrPtr, (uint32_t*)&local_bufferInfoCount, sizeof(uint32_t));
27203 *streamPtrPtr += sizeof(uint32_t);
27204 memcpy(*streamPtrPtr, (uint32_t*)&local_bufferViewCount, sizeof(uint32_t));
27205 *streamPtrPtr += sizeof(uint32_t);
27206 memcpy(*streamPtrPtr, (uint32_t*)&local_inlineUniformBlockCount, sizeof(uint32_t));
27207 *streamPtrPtr += sizeof(uint32_t);
27208 // WARNING PTR CHECK
27209 uint64_t cgen_var_3 = (uint64_t)(uintptr_t)local_pImageInfoEntryIndices;
27210 memcpy((*streamPtrPtr), &cgen_var_3, 8);
27211 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
27212 *streamPtrPtr += 8;
27213 if (local_pImageInfoEntryIndices) {
27214 memcpy(*streamPtrPtr, (uint32_t*)local_pImageInfoEntryIndices,
27215 ((imageInfoCount)) * sizeof(uint32_t));
27216 *streamPtrPtr += ((imageInfoCount)) * sizeof(uint32_t);
27217 }
27218 // WARNING PTR CHECK
27219 uint64_t cgen_var_4 = (uint64_t)(uintptr_t)local_pBufferInfoEntryIndices;
27220 memcpy((*streamPtrPtr), &cgen_var_4, 8);
27221 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
27222 *streamPtrPtr += 8;
27223 if (local_pBufferInfoEntryIndices) {
27224 memcpy(*streamPtrPtr, (uint32_t*)local_pBufferInfoEntryIndices,
27225 ((bufferInfoCount)) * sizeof(uint32_t));
27226 *streamPtrPtr += ((bufferInfoCount)) * sizeof(uint32_t);
27227 }
27228 // WARNING PTR CHECK
27229 uint64_t cgen_var_5 = (uint64_t)(uintptr_t)local_pBufferViewEntryIndices;
27230 memcpy((*streamPtrPtr), &cgen_var_5, 8);
27231 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
27232 *streamPtrPtr += 8;
27233 if (local_pBufferViewEntryIndices) {
27234 memcpy(*streamPtrPtr, (uint32_t*)local_pBufferViewEntryIndices,
27235 ((bufferViewCount)) * sizeof(uint32_t));
27236 *streamPtrPtr += ((bufferViewCount)) * sizeof(uint32_t);
27237 }
27238 // WARNING PTR CHECK
27239 uint64_t cgen_var_6 = (uint64_t)(uintptr_t)local_pImageInfos;
27240 memcpy((*streamPtrPtr), &cgen_var_6, 8);
27241 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
27242 *streamPtrPtr += 8;
27243 if (local_pImageInfos) {
27244 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i) {
27245 reservedmarshal_VkDescriptorImageInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
27246 (VkDescriptorImageInfo*)(local_pImageInfos + i),
27247 streamPtrPtr);
27248 }
27249 }
27250 // WARNING PTR CHECK
27251 uint64_t cgen_var_7 = (uint64_t)(uintptr_t)local_pBufferInfos;
27252 memcpy((*streamPtrPtr), &cgen_var_7, 8);
27253 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
27254 *streamPtrPtr += 8;
27255 if (local_pBufferInfos) {
27256 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i) {
27257 reservedmarshal_VkDescriptorBufferInfo(
27258 stream, VK_STRUCTURE_TYPE_MAX_ENUM,
27259 (VkDescriptorBufferInfo*)(local_pBufferInfos + i), streamPtrPtr);
27260 }
27261 }
27262 // WARNING PTR CHECK
27263 uint64_t cgen_var_8 = (uint64_t)(uintptr_t)local_pBufferViews;
27264 memcpy((*streamPtrPtr), &cgen_var_8, 8);
27265 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
27266 *streamPtrPtr += 8;
27267 if (local_pBufferViews) {
27268 if (((bufferViewCount))) {
27269 uint8_t* cgen_var_8_0_ptr = (uint8_t*)(*streamPtrPtr);
27270 for (uint32_t k = 0; k < ((bufferViewCount)); ++k) {
27271 uint64_t tmpval = get_host_u64_VkBufferView(local_pBufferViews[k]);
27272 memcpy(cgen_var_8_0_ptr + k * 8, &tmpval, sizeof(uint64_t));
27273 }
27274 *streamPtrPtr += 8 * ((bufferViewCount));
27275 }
27276 }
27277 // WARNING PTR CHECK
27278 uint64_t cgen_var_9 = (uint64_t)(uintptr_t)local_pInlineUniformBlockData;
27279 memcpy((*streamPtrPtr), &cgen_var_9, 8);
27280 gfxstream::aemu::Stream::toBe64((uint8_t*)(*streamPtrPtr));
27281 *streamPtrPtr += 8;
27282 if (local_pInlineUniformBlockData) {
27283 memcpy(*streamPtrPtr, (uint8_t*)local_pInlineUniformBlockData,
27284 ((inlineUniformBlockCount)) * sizeof(uint8_t));
27285 *streamPtrPtr += ((inlineUniformBlockCount)) * sizeof(uint8_t);
27286 }
27287 stream->flush();
27288 ++encodeCount;
27289 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
27290 pool->freeAll();
27291 stream->clearPool();
27292 }
27293 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
27294 }
27295
vkQueueSubmitAsync2GOOGLE(VkQueue queue,uint32_t submitCount,const VkSubmitInfo2 * pSubmits,VkFence fence,uint32_t doLock)27296 void VkEncoder::vkQueueSubmitAsync2GOOGLE(VkQueue queue, uint32_t submitCount,
27297 const VkSubmitInfo2* pSubmits, VkFence fence,
27298 uint32_t doLock) {
27299 (void)doLock;
27300 bool queueSubmitWithCommandsEnabled =
27301 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
27302 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
27303 auto stream = mImpl->stream();
27304 auto pool = mImpl->pool();
27305 VkQueue local_queue;
27306 uint32_t local_submitCount;
27307 VkSubmitInfo2* local_pSubmits;
27308 VkFence local_fence;
27309 local_queue = queue;
27310 local_submitCount = submitCount;
27311 local_pSubmits = nullptr;
27312 if (pSubmits) {
27313 local_pSubmits = (VkSubmitInfo2*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo2));
27314 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
27315 deepcopy_VkSubmitInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubmits + i,
27316 (VkSubmitInfo2*)(local_pSubmits + i));
27317 }
27318 }
27319 local_fence = fence;
27320 if (local_pSubmits) {
27321 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
27322 transform_tohost_VkSubmitInfo2(sResourceTracker, (VkSubmitInfo2*)(local_pSubmits + i));
27323 }
27324 }
27325 size_t count = 0;
27326 size_t* countPtr = &count;
27327 {
27328 uint64_t cgen_var_0;
27329 *countPtr += 1 * 8;
27330 *countPtr += sizeof(uint32_t);
27331 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
27332 count_VkSubmitInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM,
27333 (VkSubmitInfo2*)(local_pSubmits + i), countPtr);
27334 }
27335 uint64_t cgen_var_1;
27336 *countPtr += 1 * 8;
27337 }
27338 uint32_t packetSize_vkQueueSubmitAsync2GOOGLE =
27339 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
27340 uint8_t* streamPtr = stream->reserve(packetSize_vkQueueSubmitAsync2GOOGLE);
27341 uint8_t* packetBeginPtr = streamPtr;
27342 uint8_t** streamPtrPtr = &streamPtr;
27343 uint32_t opcode_vkQueueSubmitAsync2GOOGLE = OP_vkQueueSubmitAsync2GOOGLE;
27344 uint32_t seqno;
27345 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
27346 memcpy(streamPtr, &opcode_vkQueueSubmitAsync2GOOGLE, sizeof(uint32_t));
27347 streamPtr += sizeof(uint32_t);
27348 memcpy(streamPtr, &packetSize_vkQueueSubmitAsync2GOOGLE, sizeof(uint32_t));
27349 streamPtr += sizeof(uint32_t);
27350 if (queueSubmitWithCommandsEnabled) {
27351 memcpy(streamPtr, &seqno, sizeof(uint32_t));
27352 streamPtr += sizeof(uint32_t);
27353 }
27354 uint64_t cgen_var_0;
27355 *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
27356 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
27357 *streamPtrPtr += 1 * 8;
27358 memcpy(*streamPtrPtr, (uint32_t*)&local_submitCount, sizeof(uint32_t));
27359 *streamPtrPtr += sizeof(uint32_t);
27360 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i) {
27361 reservedmarshal_VkSubmitInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM,
27362 (VkSubmitInfo2*)(local_pSubmits + i), streamPtrPtr);
27363 }
27364 uint64_t cgen_var_1;
27365 *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
27366 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
27367 *streamPtrPtr += 1 * 8;
27368 stream->flush();
27369 ++encodeCount;
27370 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
27371 pool->freeAll();
27372 stream->clearPool();
27373 }
27374 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
27375 }
27376
vkGetSemaphoreGOOGLE(VkDevice device,VkSemaphore semaphore,uint64_t syncId,uint32_t doLock)27377 VkResult VkEncoder::vkGetSemaphoreGOOGLE(VkDevice device, VkSemaphore semaphore, uint64_t syncId,
27378 uint32_t doLock) {
27379 (void)doLock;
27380 bool queueSubmitWithCommandsEnabled =
27381 sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
27382 if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
27383 auto stream = mImpl->stream();
27384 auto pool = mImpl->pool();
27385 VkDevice local_device;
27386 VkSemaphore local_semaphore;
27387 uint64_t local_syncId;
27388 local_device = device;
27389 local_semaphore = semaphore;
27390 local_syncId = syncId;
27391 size_t count = 0;
27392 size_t* countPtr = &count;
27393 {
27394 uint64_t cgen_var_0;
27395 *countPtr += 1 * 8;
27396 uint64_t cgen_var_1;
27397 *countPtr += 1 * 8;
27398 *countPtr += sizeof(uint64_t);
27399 }
27400 uint32_t packetSize_vkGetSemaphoreGOOGLE =
27401 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
27402 uint8_t* streamPtr = stream->reserve(packetSize_vkGetSemaphoreGOOGLE);
27403 uint8_t* packetBeginPtr = streamPtr;
27404 uint8_t** streamPtrPtr = &streamPtr;
27405 uint32_t opcode_vkGetSemaphoreGOOGLE = OP_vkGetSemaphoreGOOGLE;
27406 uint32_t seqno;
27407 if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
27408 memcpy(streamPtr, &opcode_vkGetSemaphoreGOOGLE, sizeof(uint32_t));
27409 streamPtr += sizeof(uint32_t);
27410 memcpy(streamPtr, &packetSize_vkGetSemaphoreGOOGLE, sizeof(uint32_t));
27411 streamPtr += sizeof(uint32_t);
27412 if (queueSubmitWithCommandsEnabled) {
27413 memcpy(streamPtr, &seqno, sizeof(uint32_t));
27414 streamPtr += sizeof(uint32_t);
27415 }
27416 uint64_t cgen_var_0;
27417 *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
27418 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
27419 *streamPtrPtr += 1 * 8;
27420 uint64_t cgen_var_1;
27421 *&cgen_var_1 = get_host_u64_VkSemaphore((*&local_semaphore));
27422 memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
27423 *streamPtrPtr += 1 * 8;
27424 memcpy(*streamPtrPtr, (uint64_t*)&local_syncId, sizeof(uint64_t));
27425 *streamPtrPtr += sizeof(uint64_t);
27426 VkResult vkGetSemaphoreGOOGLE_VkResult_return = (VkResult)0;
27427 stream->read(&vkGetSemaphoreGOOGLE_VkResult_return, sizeof(VkResult));
27428 ++encodeCount;
27429 if (0 == encodeCount % POOL_CLEAR_INTERVAL) {
27430 pool->freeAll();
27431 stream->clearPool();
27432 }
27433 if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
27434 return vkGetSemaphoreGOOGLE_VkResult_return;
27435 }
27436
27437 #endif
27438 } // namespace vk
27439 } // namespace gfxstream
27440