blob: 0eeba15305dd3ee192dc74418766382bcb02b22f [file] [log] [blame]
Lingfeng Yang6a283672018-11-01 13:37:56 -07001// Copyright (C) 2018 The Android Open Source Project
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002// Copyright (C) 2018 Google Inc.
Lingfeng Yang6a283672018-11-01 13:37:56 -07003//
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.
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015
16// Autogenerated module VkEncoder
17// (impl) generated by android/android-emugl/host/libs/libOpenglRender/vulkan-registry/xml/genvk.py -registry android/android-emugl/host/libs/libOpenglRender/vulkan-registry/xml/vk.xml cereal -o android/android-emugl/host/libs/libOpenglRender/vulkan/cereal
18// Please do not modify directly;
19// re-run android/scripts/generate-vulkan-sources.sh,
20// or directly from Python by defining:
21// VULKAN_REGISTRY_XML_DIR : Directory containing genvk.py and vk.xml
22// CEREAL_OUTPUT_DIR: Where to put the generated sources.
23// python3 $VULKAN_REGISTRY_XML_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
24
Lingfeng Yanga126a8a2018-11-01 18:21:40 -070025#include "VkEncoder.h"
Lingfeng Yang6a283672018-11-01 13:37:56 -070026
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070027
Lingfeng Yanga126a8a2018-11-01 18:21:40 -070028#include "IOStream.h"
Lingfeng Yange30d3382018-11-09 08:24:37 -080029#include "Resources.h"
Lingfeng Yang71b596b2018-11-07 18:03:25 -080030#include "ResourceTracker.h"
Lingfeng Yang60b411d2018-11-29 00:26:45 -080031#include "Validation.h"
Lingfeng Yang42ac1792019-02-22 20:13:44 -080032#include "VulkanStreamGuest.h"
Lingfeng Yanga126a8a2018-11-01 18:21:40 -070033
Lingfeng Yang6f3b6c52018-11-05 14:22:37 -080034#include "android/base/AlignedBuf.h"
Lingfeng Yang71b596b2018-11-07 18:03:25 -080035#include "android/base/Pool.h"
Lingfeng Yang3cfb1a22019-06-17 13:22:30 -070036#include "android/base/synchronization/AndroidLock.h"
Lingfeng Yang6f3b6c52018-11-05 14:22:37 -080037
Lingfeng Yang858ebe22019-01-22 15:53:52 -080038#include <cutils/properties.h>
39
Lingfeng Yange71c6422018-11-01 19:29:49 -070040#include "goldfish_vk_marshaling_guest.h"
Lingfeng Yang71b596b2018-11-07 18:03:25 -080041#include "goldfish_vk_deepcopy_guest.h"
42#include "goldfish_vk_handlemap_guest.h"
Lingfeng Yang808a6312018-11-13 21:06:15 -080043#include "goldfish_vk_private_defs.h"
Lingfeng Yang2b1b8cf2019-02-08 09:53:36 -080044#include "goldfish_vk_transform_guest.h"
Lingfeng Yange71c6422018-11-01 19:29:49 -070045
Lingfeng Yang39a276e2019-06-17 13:27:22 -070046#include <unordered_map>
47
48
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070049
Lingfeng Yangb1d90102018-11-29 16:10:36 -080050namespace goldfish_vk {
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070051
52
53
Lingfeng Yang71b596b2018-11-07 18:03:25 -080054using namespace goldfish_vk;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070055
Lingfeng Yang6f3b6c52018-11-05 14:22:37 -080056using android::aligned_buf_alloc;
57using android::aligned_buf_free;
Lingfeng Yang3cfb1a22019-06-17 13:22:30 -070058using android::base::guest::AutoLock;
59using android::base::guest::Lock;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080060using android::base::Pool;
Lingfeng Yang6f3b6c52018-11-05 14:22:37 -080061
Lingfeng Yanga126a8a2018-11-01 18:21:40 -070062class VkEncoder::Impl {
63public:
Lingfeng Yang858ebe22019-01-22 15:53:52 -080064 Impl(IOStream* stream) : m_stream(stream), m_logEncodes(false) {
65 const char* emuVkLogEncodesPropName = "qemu.vk.log";
66 char encodeProp[PROPERTY_VALUE_MAX];
67 if (property_get(emuVkLogEncodesPropName, encodeProp, nullptr) > 0) {
68 m_logEncodes = atoi(encodeProp) > 0;
69 }
70 }
Lingfeng Yang39a276e2019-06-17 13:27:22 -070071
Lingfeng Yang256f9252020-07-14 14:27:33 -070072 ~Impl() { }
Lingfeng Yang39a276e2019-06-17 13:27:22 -070073
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070074 VulkanCountingStream* countingStream() { return &m_countingStream; }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080075 VulkanStreamGuest* stream() { return &m_stream; }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080076 Pool* pool() { return &m_pool; }
77 ResourceTracker* resources() { return ResourceTracker::get(); }
Lingfeng Yang29c99d92018-11-30 11:15:29 -080078 Validation* validation() { return &m_validation; }
Lingfeng Yang858ebe22019-01-22 15:53:52 -080079
80 void log(const char* text) {
81 if (!m_logEncodes) return;
82 ALOGD("encoder log: %s", text);
83 }
Lingfeng Yang3cfb1a22019-06-17 13:22:30 -070084
85 void flush() {
Lingfeng Yang256f9252020-07-14 14:27:33 -070086 lock();
Lingfeng Yang3cfb1a22019-06-17 13:22:30 -070087 m_stream.flush();
Lingfeng Yang256f9252020-07-14 14:27:33 -070088 unlock();
Lingfeng Yang3cfb1a22019-06-17 13:22:30 -070089 }
90
Lingfeng Yang256f9252020-07-14 14:27:33 -070091 // can be recursive
92 void lock() {
93 if (this == sAcquiredEncoderThreadLocal) {
94 ++sAcquiredEncoderThreadLockLevels;
95 return; // recursive
96 }
97 while (mLock.test_and_set(std::memory_order_acquire));
98 sAcquiredEncoderThreadLocal = this;
99 sAcquiredEncoderThreadLockLevels = 1;
100 }
101
102 void unlock() {
103 if (this != sAcquiredEncoderThreadLocal) {
104 // error, trying to unlock without having locked first
Lingfeng Yang87f11962019-06-27 16:28:53 +0000105 return;
106 }
Lingfeng Yang39a276e2019-06-17 13:27:22 -0700107
Lingfeng Yang256f9252020-07-14 14:27:33 -0700108 --sAcquiredEncoderThreadLockLevels;
109 if (0 == sAcquiredEncoderThreadLockLevels) {
110 mLock.clear(std::memory_order_release);
111 sAcquiredEncoderThreadLocal = nullptr;
112 }
Lingfeng Yang39a276e2019-06-17 13:27:22 -0700113 }
114
Lingfeng Yanga126a8a2018-11-01 18:21:40 -0700115private:
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700116 VulkanCountingStream m_countingStream;
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800117 VulkanStreamGuest m_stream;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800118 Pool m_pool { 8, 4096, 64 };
Lingfeng Yang29c99d92018-11-30 11:15:29 -0800119
120 Validation m_validation;
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800121 bool m_logEncodes;
Lingfeng Yang256f9252020-07-14 14:27:33 -0700122 std::atomic_flag mLock = ATOMIC_FLAG_INIT;
123 static thread_local Impl* sAcquiredEncoderThreadLocal;
124 static thread_local uint32_t sAcquiredEncoderThreadLockLevels;
125};
Lingfeng Yang39a276e2019-06-17 13:27:22 -0700126
Lingfeng Yang256f9252020-07-14 14:27:33 -0700127VkEncoder::~VkEncoder() {
128 auto rt = ResourceTracker::get();
129 if (!rt) return;
130 rt->onEncoderDeleted(this);
131}
132
133// static
134thread_local VkEncoder::Impl* VkEncoder::Impl::sAcquiredEncoderThreadLocal = nullptr;
135thread_local uint32_t VkEncoder::Impl::sAcquiredEncoderThreadLockLevels = 0;
136
137struct EncoderAutoLock {
138 EncoderAutoLock(VkEncoder* enc) : mEnc(enc) {
139 mEnc->lock();
140 }
141 ~EncoderAutoLock() {
142 mEnc->unlock();
143 }
144 VkEncoder* mEnc;
Lingfeng Yanga126a8a2018-11-01 18:21:40 -0700145};
146
147VkEncoder::VkEncoder(IOStream *stream) :
148 mImpl(new VkEncoder::Impl(stream)) { }
Lingfeng Yang60b411d2018-11-29 00:26:45 -0800149
Lingfeng Yang3cfb1a22019-06-17 13:22:30 -0700150void VkEncoder::flush() {
151 mImpl->flush();
152}
153
Lingfeng Yang256f9252020-07-14 14:27:33 -0700154void VkEncoder::lock() {
155 mImpl->lock();
Lingfeng Yang39a276e2019-06-17 13:27:22 -0700156}
157
Lingfeng Yang256f9252020-07-14 14:27:33 -0700158void VkEncoder::unlock() {
159 mImpl->unlock();
Lingfeng Yang39a276e2019-06-17 13:27:22 -0700160}
161
Lingfeng Yang60b411d2018-11-29 00:26:45 -0800162#define VALIDATE_RET(retType, success, validate) \
163 retType goldfish_vk_validateResult = validate; \
164 if (goldfish_vk_validateResult != success) return goldfish_vk_validateResult; \
165
166#define VALIDATE_VOID(validate) \
167 VkResult goldfish_vk_validateResult = validate; \
168 if (goldfish_vk_validateResult != VK_SUCCESS) return; \
169
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700170#ifdef VK_VERSION_1_0
171VkResult VkEncoder::vkCreateInstance(
172 const VkInstanceCreateInfo* pCreateInfo,
173 const VkAllocationCallbacks* pAllocator,
174 VkInstance* pInstance)
175{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700176 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800177 AEMU_SCOPED_TRACE("vkCreateInstance encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800178 mImpl->log("start vkCreateInstance");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700179 auto stream = mImpl->stream();
180 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800181 auto resources = mImpl->resources();
182 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800183 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800184 VkInstanceCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -0800185 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800186 local_pCreateInfo = nullptr;
187 if (pCreateInfo)
188 {
189 local_pCreateInfo = (VkInstanceCreateInfo*)pool->alloc(sizeof(const VkInstanceCreateInfo));
190 deepcopy_VkInstanceCreateInfo(pool, pCreateInfo, (VkInstanceCreateInfo*)(local_pCreateInfo));
191 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800192 local_pAllocator = nullptr;
193 if (pAllocator)
194 {
195 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
196 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
197 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -0800198 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -0800199 if (local_pCreateInfo)
200 {
Lingfeng Yang97a06702018-12-24 17:02:43 -0800201 transform_tohost_VkInstanceCreateInfo(mImpl->resources(), (VkInstanceCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -0800202 }
203 if (local_pAllocator)
204 {
Lingfeng Yang97a06702018-12-24 17:02:43 -0800205 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -0800206 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700207 countingStream->rewind();
208 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800209 marshal_VkInstanceCreateInfo(countingStream, (VkInstanceCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800210 // WARNING PTR CHECK
211 uint64_t cgen_var_0 = (uint64_t)(uintptr_t)local_pAllocator;
212 countingStream->putBe64(cgen_var_0);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800213 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700214 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800215 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700216 }
Lingfeng Yang2285df12018-11-17 16:25:11 -0800217 uint64_t cgen_var_1;
218 countingStream->handleMapping()->mapHandles_VkInstance_u64(pInstance, &cgen_var_1, 1);
219 countingStream->write((uint64_t*)&cgen_var_1, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700220 }
221 uint32_t packetSize_vkCreateInstance = 4 + 4 + (uint32_t)countingStream->bytesWritten();
222 countingStream->rewind();
223 uint32_t opcode_vkCreateInstance = OP_vkCreateInstance;
224 stream->write(&opcode_vkCreateInstance, sizeof(uint32_t));
225 stream->write(&packetSize_vkCreateInstance, sizeof(uint32_t));
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800226 marshal_VkInstanceCreateInfo(stream, (VkInstanceCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800227 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800228 uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
229 stream->putBe64(cgen_var_2);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800230 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700231 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800232 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700233 }
Lingfeng Yange4008a02018-11-18 12:22:48 -0800234 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
Lingfeng Yang2285df12018-11-17 16:25:11 -0800235 uint64_t cgen_var_3;
236 stream->handleMapping()->mapHandles_VkInstance_u64(pInstance, &cgen_var_3, 1);
237 stream->write((uint64_t*)&cgen_var_3, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800238 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800239 AEMU_SCOPED_TRACE("vkCreateInstance readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -0800240 stream->setHandleMapping(resources->createMapping());
Lingfeng Yang2285df12018-11-17 16:25:11 -0800241 uint64_t cgen_var_4;
242 stream->read((uint64_t*)&cgen_var_4, 8);
243 stream->handleMapping()->mapHandles_u64_VkInstance(&cgen_var_4, (VkInstance*)pInstance, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800244 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800245 AEMU_SCOPED_TRACE("vkCreateInstance returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700246 VkResult vkCreateInstance_VkResult_return = (VkResult)0;
247 stream->read(&vkCreateInstance_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -0700248 mImpl->resources()->on_vkCreateInstance(this, vkCreateInstance_VkResult_return, pCreateInfo, pAllocator, pInstance);
249 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -0800250 countingStream->clearPool();
251 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800252 mImpl->log("finish vkCreateInstance");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700253 return vkCreateInstance_VkResult_return;
254}
255
256void VkEncoder::vkDestroyInstance(
257 VkInstance instance,
258 const VkAllocationCallbacks* pAllocator)
259{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700260 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800261 AEMU_SCOPED_TRACE("vkDestroyInstance encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800262 mImpl->log("start vkDestroyInstance");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700263 auto stream = mImpl->stream();
264 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800265 auto resources = mImpl->resources();
266 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800267 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang9d02e102018-11-10 01:51:46 -0800268 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800269 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -0800270 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800271 local_pAllocator = nullptr;
272 if (pAllocator)
273 {
274 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
275 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
276 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -0800277 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -0800278 if (local_pAllocator)
279 {
Lingfeng Yang97a06702018-12-24 17:02:43 -0800280 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -0800281 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700282 countingStream->rewind();
283 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800284 uint64_t cgen_var_5;
285 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_5, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800286 countingStream->write((uint64_t*)&cgen_var_5, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800287 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800288 uint64_t cgen_var_6 = (uint64_t)(uintptr_t)local_pAllocator;
289 countingStream->putBe64(cgen_var_6);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800290 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700291 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800292 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700293 }
294 }
295 uint32_t packetSize_vkDestroyInstance = 4 + 4 + (uint32_t)countingStream->bytesWritten();
296 countingStream->rewind();
297 uint32_t opcode_vkDestroyInstance = OP_vkDestroyInstance;
298 stream->write(&opcode_vkDestroyInstance, sizeof(uint32_t));
299 stream->write(&packetSize_vkDestroyInstance, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -0800300 uint64_t cgen_var_7;
301 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_7, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800302 stream->write((uint64_t*)&cgen_var_7, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800303 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800304 uint64_t cgen_var_8 = (uint64_t)(uintptr_t)local_pAllocator;
305 stream->putBe64(cgen_var_8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800306 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700307 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800308 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700309 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800310 AEMU_SCOPED_TRACE("vkDestroyInstance readParams");
311 AEMU_SCOPED_TRACE("vkDestroyInstance returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800312 resources->destroyMapping()->mapHandles_VkInstance((VkInstance*)&instance);
Lingfeng Yang256f9252020-07-14 14:27:33 -0700313 pool->freeAll();
314 countingStream->clearPool();
315 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800316 mImpl->log("finish vkDestroyInstance");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700317}
318
319VkResult VkEncoder::vkEnumeratePhysicalDevices(
320 VkInstance instance,
321 uint32_t* pPhysicalDeviceCount,
322 VkPhysicalDevice* pPhysicalDevices)
323{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700324 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800325 AEMU_SCOPED_TRACE("vkEnumeratePhysicalDevices encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800326 mImpl->log("start vkEnumeratePhysicalDevices");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700327 auto stream = mImpl->stream();
328 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800329 auto resources = mImpl->resources();
330 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800331 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800332 VkInstance local_instance;
333 local_instance = instance;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700334 countingStream->rewind();
335 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800336 uint64_t cgen_var_9;
337 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_9, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800338 countingStream->write((uint64_t*)&cgen_var_9, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800339 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800340 uint64_t cgen_var_10 = (uint64_t)(uintptr_t)pPhysicalDeviceCount;
341 countingStream->putBe64(cgen_var_10);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700342 if (pPhysicalDeviceCount)
343 {
344 countingStream->write((uint32_t*)pPhysicalDeviceCount, sizeof(uint32_t));
345 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800346 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800347 uint64_t cgen_var_11 = (uint64_t)(uintptr_t)pPhysicalDevices;
348 countingStream->putBe64(cgen_var_11);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700349 if (pPhysicalDevices)
350 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800351 if ((*(pPhysicalDeviceCount)))
352 {
353 uint64_t* cgen_var_12;
354 countingStream->alloc((void**)&cgen_var_12, (*(pPhysicalDeviceCount)) * 8);
355 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(pPhysicalDevices, cgen_var_12, (*(pPhysicalDeviceCount)));
Lingfeng Yange4008a02018-11-18 12:22:48 -0800356 countingStream->write((uint64_t*)cgen_var_12, (*(pPhysicalDeviceCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -0800357 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700358 }
359 }
360 uint32_t packetSize_vkEnumeratePhysicalDevices = 4 + 4 + (uint32_t)countingStream->bytesWritten();
361 countingStream->rewind();
362 uint32_t opcode_vkEnumeratePhysicalDevices = OP_vkEnumeratePhysicalDevices;
363 stream->write(&opcode_vkEnumeratePhysicalDevices, sizeof(uint32_t));
364 stream->write(&packetSize_vkEnumeratePhysicalDevices, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -0800365 uint64_t cgen_var_13;
366 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_13, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800367 stream->write((uint64_t*)&cgen_var_13, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800368 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800369 uint64_t cgen_var_14 = (uint64_t)(uintptr_t)pPhysicalDeviceCount;
370 stream->putBe64(cgen_var_14);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700371 if (pPhysicalDeviceCount)
372 {
373 stream->write((uint32_t*)pPhysicalDeviceCount, sizeof(uint32_t));
374 }
Lingfeng Yange4008a02018-11-18 12:22:48 -0800375 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800376 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800377 uint64_t cgen_var_15 = (uint64_t)(uintptr_t)pPhysicalDevices;
378 stream->putBe64(cgen_var_15);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700379 if (pPhysicalDevices)
380 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800381 if ((*(pPhysicalDeviceCount)))
382 {
383 uint64_t* cgen_var_16;
384 stream->alloc((void**)&cgen_var_16, (*(pPhysicalDeviceCount)) * 8);
385 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(pPhysicalDevices, cgen_var_16, (*(pPhysicalDeviceCount)));
Lingfeng Yange4008a02018-11-18 12:22:48 -0800386 stream->write((uint64_t*)cgen_var_16, (*(pPhysicalDeviceCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -0800387 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700388 }
Lingfeng Yange4008a02018-11-18 12:22:48 -0800389 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800390 AEMU_SCOPED_TRACE("vkEnumeratePhysicalDevices readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800391 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700392 uint32_t* check_pPhysicalDeviceCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800393 check_pPhysicalDeviceCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700394 if (pPhysicalDeviceCount)
395 {
396 if (!(check_pPhysicalDeviceCount))
397 {
398 fprintf(stderr, "fatal: pPhysicalDeviceCount inconsistent between guest and host\n");
399 }
400 stream->read((uint32_t*)pPhysicalDeviceCount, sizeof(uint32_t));
401 }
Lingfeng Yange4008a02018-11-18 12:22:48 -0800402 stream->setHandleMapping(resources->createMapping());
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800403 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700404 VkPhysicalDevice* check_pPhysicalDevices;
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800405 check_pPhysicalDevices = (VkPhysicalDevice*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700406 if (pPhysicalDevices)
407 {
408 if (!(check_pPhysicalDevices))
409 {
410 fprintf(stderr, "fatal: pPhysicalDevices inconsistent between guest and host\n");
411 }
Lingfeng Yang2285df12018-11-17 16:25:11 -0800412 if ((*(pPhysicalDeviceCount)))
413 {
414 uint64_t* cgen_var_19;
415 stream->alloc((void**)&cgen_var_19, (*(pPhysicalDeviceCount)) * 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800416 stream->read((uint64_t*)cgen_var_19, (*(pPhysicalDeviceCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -0800417 stream->handleMapping()->mapHandles_u64_VkPhysicalDevice(cgen_var_19, (VkPhysicalDevice*)pPhysicalDevices, (*(pPhysicalDeviceCount)));
418 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700419 }
Lingfeng Yange4008a02018-11-18 12:22:48 -0800420 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800421 AEMU_SCOPED_TRACE("vkEnumeratePhysicalDevices returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700422 VkResult vkEnumeratePhysicalDevices_VkResult_return = (VkResult)0;
423 stream->read(&vkEnumeratePhysicalDevices_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -0700424 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -0800425 countingStream->clearPool();
426 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800427 mImpl->log("finish vkEnumeratePhysicalDevices");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700428 return vkEnumeratePhysicalDevices_VkResult_return;
429}
430
431void VkEncoder::vkGetPhysicalDeviceFeatures(
432 VkPhysicalDevice physicalDevice,
433 VkPhysicalDeviceFeatures* pFeatures)
434{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700435 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800436 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800437 mImpl->log("start vkGetPhysicalDeviceFeatures");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700438 auto stream = mImpl->stream();
439 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800440 auto resources = mImpl->resources();
441 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800442 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800443 VkPhysicalDevice local_physicalDevice;
444 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700445 countingStream->rewind();
446 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800447 uint64_t cgen_var_20;
448 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_20, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800449 countingStream->write((uint64_t*)&cgen_var_20, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700450 marshal_VkPhysicalDeviceFeatures(countingStream, (VkPhysicalDeviceFeatures*)(pFeatures));
451 }
452 uint32_t packetSize_vkGetPhysicalDeviceFeatures = 4 + 4 + (uint32_t)countingStream->bytesWritten();
453 countingStream->rewind();
454 uint32_t opcode_vkGetPhysicalDeviceFeatures = OP_vkGetPhysicalDeviceFeatures;
455 stream->write(&opcode_vkGetPhysicalDeviceFeatures, sizeof(uint32_t));
456 stream->write(&packetSize_vkGetPhysicalDeviceFeatures, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -0800457 uint64_t cgen_var_21;
458 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_21, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800459 stream->write((uint64_t*)&cgen_var_21, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700460 marshal_VkPhysicalDeviceFeatures(stream, (VkPhysicalDeviceFeatures*)(pFeatures));
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800461 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700462 unmarshal_VkPhysicalDeviceFeatures(stream, (VkPhysicalDeviceFeatures*)(pFeatures));
Lingfeng Yang97a06702018-12-24 17:02:43 -0800463 if (pFeatures)
464 {
465 transform_fromhost_VkPhysicalDeviceFeatures(mImpl->resources(), (VkPhysicalDeviceFeatures*)(pFeatures));
466 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800467 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -0700468 pool->freeAll();
469 countingStream->clearPool();
470 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800471 mImpl->log("finish vkGetPhysicalDeviceFeatures");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700472}
473
474void VkEncoder::vkGetPhysicalDeviceFormatProperties(
475 VkPhysicalDevice physicalDevice,
476 VkFormat format,
477 VkFormatProperties* pFormatProperties)
478{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700479 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800480 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800481 mImpl->log("start vkGetPhysicalDeviceFormatProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700482 auto stream = mImpl->stream();
483 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800484 auto resources = mImpl->resources();
485 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800486 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800487 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800488 VkFormat local_format;
Lingfeng Yang9666b852018-11-13 23:09:59 -0800489 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800490 local_format = format;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700491 countingStream->rewind();
492 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800493 uint64_t cgen_var_22;
494 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_22, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800495 countingStream->write((uint64_t*)&cgen_var_22, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800496 countingStream->write((VkFormat*)&local_format, sizeof(VkFormat));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700497 marshal_VkFormatProperties(countingStream, (VkFormatProperties*)(pFormatProperties));
498 }
499 uint32_t packetSize_vkGetPhysicalDeviceFormatProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
500 countingStream->rewind();
501 uint32_t opcode_vkGetPhysicalDeviceFormatProperties = OP_vkGetPhysicalDeviceFormatProperties;
502 stream->write(&opcode_vkGetPhysicalDeviceFormatProperties, sizeof(uint32_t));
503 stream->write(&packetSize_vkGetPhysicalDeviceFormatProperties, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -0800504 uint64_t cgen_var_23;
505 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_23, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800506 stream->write((uint64_t*)&cgen_var_23, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800507 stream->write((VkFormat*)&local_format, sizeof(VkFormat));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700508 marshal_VkFormatProperties(stream, (VkFormatProperties*)(pFormatProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800509 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700510 unmarshal_VkFormatProperties(stream, (VkFormatProperties*)(pFormatProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -0800511 if (pFormatProperties)
512 {
513 transform_fromhost_VkFormatProperties(mImpl->resources(), (VkFormatProperties*)(pFormatProperties));
514 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800515 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -0700516 pool->freeAll();
517 countingStream->clearPool();
518 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800519 mImpl->log("finish vkGetPhysicalDeviceFormatProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700520}
521
522VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties(
523 VkPhysicalDevice physicalDevice,
524 VkFormat format,
525 VkImageType type,
526 VkImageTiling tiling,
527 VkImageUsageFlags usage,
528 VkImageCreateFlags flags,
529 VkImageFormatProperties* pImageFormatProperties)
530{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700531 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800532 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800533 mImpl->log("start vkGetPhysicalDeviceImageFormatProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700534 auto stream = mImpl->stream();
535 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800536 auto resources = mImpl->resources();
537 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800538 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800539 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800540 VkFormat local_format;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800541 VkImageType local_type;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800542 VkImageTiling local_tiling;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800543 VkImageUsageFlags local_usage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800544 VkImageCreateFlags local_flags;
Lingfeng Yang9666b852018-11-13 23:09:59 -0800545 local_physicalDevice = physicalDevice;
546 local_format = format;
547 local_type = type;
548 local_tiling = tiling;
549 local_usage = usage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800550 local_flags = flags;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700551 countingStream->rewind();
552 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800553 uint64_t cgen_var_24;
554 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_24, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800555 countingStream->write((uint64_t*)&cgen_var_24, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800556 countingStream->write((VkFormat*)&local_format, sizeof(VkFormat));
557 countingStream->write((VkImageType*)&local_type, sizeof(VkImageType));
558 countingStream->write((VkImageTiling*)&local_tiling, sizeof(VkImageTiling));
559 countingStream->write((VkImageUsageFlags*)&local_usage, sizeof(VkImageUsageFlags));
560 countingStream->write((VkImageCreateFlags*)&local_flags, sizeof(VkImageCreateFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700561 marshal_VkImageFormatProperties(countingStream, (VkImageFormatProperties*)(pImageFormatProperties));
562 }
563 uint32_t packetSize_vkGetPhysicalDeviceImageFormatProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
564 countingStream->rewind();
565 uint32_t opcode_vkGetPhysicalDeviceImageFormatProperties = OP_vkGetPhysicalDeviceImageFormatProperties;
566 stream->write(&opcode_vkGetPhysicalDeviceImageFormatProperties, sizeof(uint32_t));
567 stream->write(&packetSize_vkGetPhysicalDeviceImageFormatProperties, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -0800568 uint64_t cgen_var_25;
569 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_25, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800570 stream->write((uint64_t*)&cgen_var_25, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800571 stream->write((VkFormat*)&local_format, sizeof(VkFormat));
572 stream->write((VkImageType*)&local_type, sizeof(VkImageType));
573 stream->write((VkImageTiling*)&local_tiling, sizeof(VkImageTiling));
574 stream->write((VkImageUsageFlags*)&local_usage, sizeof(VkImageUsageFlags));
575 stream->write((VkImageCreateFlags*)&local_flags, sizeof(VkImageCreateFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700576 marshal_VkImageFormatProperties(stream, (VkImageFormatProperties*)(pImageFormatProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800577 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700578 unmarshal_VkImageFormatProperties(stream, (VkImageFormatProperties*)(pImageFormatProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -0800579 if (pImageFormatProperties)
580 {
581 transform_fromhost_VkImageFormatProperties(mImpl->resources(), (VkImageFormatProperties*)(pImageFormatProperties));
582 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800583 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700584 VkResult vkGetPhysicalDeviceImageFormatProperties_VkResult_return = (VkResult)0;
585 stream->read(&vkGetPhysicalDeviceImageFormatProperties_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -0700586 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -0800587 countingStream->clearPool();
588 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800589 mImpl->log("finish vkGetPhysicalDeviceImageFormatProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700590 return vkGetPhysicalDeviceImageFormatProperties_VkResult_return;
591}
592
593void VkEncoder::vkGetPhysicalDeviceProperties(
594 VkPhysicalDevice physicalDevice,
595 VkPhysicalDeviceProperties* pProperties)
596{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700597 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800598 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800599 mImpl->log("start vkGetPhysicalDeviceProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700600 auto stream = mImpl->stream();
601 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800602 auto resources = mImpl->resources();
603 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800604 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800605 VkPhysicalDevice local_physicalDevice;
606 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700607 countingStream->rewind();
608 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800609 uint64_t cgen_var_26;
610 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_26, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800611 countingStream->write((uint64_t*)&cgen_var_26, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700612 marshal_VkPhysicalDeviceProperties(countingStream, (VkPhysicalDeviceProperties*)(pProperties));
613 }
614 uint32_t packetSize_vkGetPhysicalDeviceProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
615 countingStream->rewind();
616 uint32_t opcode_vkGetPhysicalDeviceProperties = OP_vkGetPhysicalDeviceProperties;
617 stream->write(&opcode_vkGetPhysicalDeviceProperties, sizeof(uint32_t));
618 stream->write(&packetSize_vkGetPhysicalDeviceProperties, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -0800619 uint64_t cgen_var_27;
620 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_27, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800621 stream->write((uint64_t*)&cgen_var_27, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700622 marshal_VkPhysicalDeviceProperties(stream, (VkPhysicalDeviceProperties*)(pProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800623 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700624 unmarshal_VkPhysicalDeviceProperties(stream, (VkPhysicalDeviceProperties*)(pProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -0800625 if (pProperties)
626 {
627 transform_fromhost_VkPhysicalDeviceProperties(mImpl->resources(), (VkPhysicalDeviceProperties*)(pProperties));
628 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800629 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties returnUnmarshal");
Yilong Lif3369082020-06-25 03:39:24 -0700630 mImpl->resources()->on_vkGetPhysicalDeviceProperties(this, physicalDevice, pProperties);
Lingfeng Yang256f9252020-07-14 14:27:33 -0700631 pool->freeAll();
632 countingStream->clearPool();
633 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800634 mImpl->log("finish vkGetPhysicalDeviceProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700635}
636
637void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties(
638 VkPhysicalDevice physicalDevice,
639 uint32_t* pQueueFamilyPropertyCount,
640 VkQueueFamilyProperties* pQueueFamilyProperties)
641{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700642 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800643 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800644 mImpl->log("start vkGetPhysicalDeviceQueueFamilyProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700645 auto stream = mImpl->stream();
646 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800647 auto resources = mImpl->resources();
648 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800649 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800650 VkPhysicalDevice local_physicalDevice;
651 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700652 countingStream->rewind();
653 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800654 uint64_t cgen_var_28;
655 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_28, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800656 countingStream->write((uint64_t*)&cgen_var_28, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800657 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800658 uint64_t cgen_var_29 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
659 countingStream->putBe64(cgen_var_29);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700660 if (pQueueFamilyPropertyCount)
661 {
662 countingStream->write((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
663 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800664 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800665 uint64_t cgen_var_30 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
666 countingStream->putBe64(cgen_var_30);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700667 if (pQueueFamilyProperties)
668 {
669 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
670 {
671 marshal_VkQueueFamilyProperties(countingStream, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
672 }
673 }
674 }
675 uint32_t packetSize_vkGetPhysicalDeviceQueueFamilyProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
676 countingStream->rewind();
677 uint32_t opcode_vkGetPhysicalDeviceQueueFamilyProperties = OP_vkGetPhysicalDeviceQueueFamilyProperties;
678 stream->write(&opcode_vkGetPhysicalDeviceQueueFamilyProperties, sizeof(uint32_t));
679 stream->write(&packetSize_vkGetPhysicalDeviceQueueFamilyProperties, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -0800680 uint64_t cgen_var_31;
681 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_31, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800682 stream->write((uint64_t*)&cgen_var_31, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800683 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800684 uint64_t cgen_var_32 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
685 stream->putBe64(cgen_var_32);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700686 if (pQueueFamilyPropertyCount)
687 {
688 stream->write((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
689 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800690 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800691 uint64_t cgen_var_33 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
692 stream->putBe64(cgen_var_33);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700693 if (pQueueFamilyProperties)
694 {
695 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
696 {
697 marshal_VkQueueFamilyProperties(stream, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
698 }
699 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800700 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800701 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700702 uint32_t* check_pQueueFamilyPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800703 check_pQueueFamilyPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700704 if (pQueueFamilyPropertyCount)
705 {
706 if (!(check_pQueueFamilyPropertyCount))
707 {
708 fprintf(stderr, "fatal: pQueueFamilyPropertyCount inconsistent between guest and host\n");
709 }
710 stream->read((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
711 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800712 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700713 VkQueueFamilyProperties* check_pQueueFamilyProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800714 check_pQueueFamilyProperties = (VkQueueFamilyProperties*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700715 if (pQueueFamilyProperties)
716 {
717 if (!(check_pQueueFamilyProperties))
718 {
719 fprintf(stderr, "fatal: pQueueFamilyProperties inconsistent between guest and host\n");
720 }
721 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
722 {
723 unmarshal_VkQueueFamilyProperties(stream, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
724 }
725 }
Lingfeng Yang97a06702018-12-24 17:02:43 -0800726 if (pQueueFamilyProperties)
727 {
728 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
729 {
730 transform_fromhost_VkQueueFamilyProperties(mImpl->resources(), (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
731 }
732 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800733 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -0700734 pool->freeAll();
735 countingStream->clearPool();
736 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800737 mImpl->log("finish vkGetPhysicalDeviceQueueFamilyProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700738}
739
740void VkEncoder::vkGetPhysicalDeviceMemoryProperties(
741 VkPhysicalDevice physicalDevice,
742 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
743{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700744 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800745 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800746 mImpl->log("start vkGetPhysicalDeviceMemoryProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700747 auto stream = mImpl->stream();
748 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800749 auto resources = mImpl->resources();
750 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800751 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800752 VkPhysicalDevice local_physicalDevice;
753 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700754 countingStream->rewind();
755 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800756 uint64_t cgen_var_36;
757 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_36, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800758 countingStream->write((uint64_t*)&cgen_var_36, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700759 marshal_VkPhysicalDeviceMemoryProperties(countingStream, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
760 }
761 uint32_t packetSize_vkGetPhysicalDeviceMemoryProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
762 countingStream->rewind();
763 uint32_t opcode_vkGetPhysicalDeviceMemoryProperties = OP_vkGetPhysicalDeviceMemoryProperties;
764 stream->write(&opcode_vkGetPhysicalDeviceMemoryProperties, sizeof(uint32_t));
765 stream->write(&packetSize_vkGetPhysicalDeviceMemoryProperties, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -0800766 uint64_t cgen_var_37;
767 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_37, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800768 stream->write((uint64_t*)&cgen_var_37, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700769 marshal_VkPhysicalDeviceMemoryProperties(stream, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800770 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700771 unmarshal_VkPhysicalDeviceMemoryProperties(stream, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -0800772 if (pMemoryProperties)
773 {
774 transform_fromhost_VkPhysicalDeviceMemoryProperties(mImpl->resources(), (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
775 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800776 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties returnUnmarshal");
Lingfeng Yang97a06702018-12-24 17:02:43 -0800777 mImpl->resources()->on_vkGetPhysicalDeviceMemoryProperties(this, physicalDevice, pMemoryProperties);
Lingfeng Yang256f9252020-07-14 14:27:33 -0700778 pool->freeAll();
779 countingStream->clearPool();
780 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800781 mImpl->log("finish vkGetPhysicalDeviceMemoryProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700782}
783
784PFN_vkVoidFunction VkEncoder::vkGetInstanceProcAddr(
785 VkInstance instance,
786 const char* pName)
787{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700788 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800789 AEMU_SCOPED_TRACE("vkGetInstanceProcAddr encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800790 mImpl->log("start vkGetInstanceProcAddr");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700791 auto stream = mImpl->stream();
792 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800793 auto resources = mImpl->resources();
794 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800795 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800796 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800797 char* local_pName;
Lingfeng Yang9666b852018-11-13 23:09:59 -0800798 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800799 local_pName = nullptr;
800 if (pName)
801 {
802 local_pName = pool->strDup(pName);
803 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700804 countingStream->rewind();
805 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800806 uint64_t cgen_var_38;
807 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_38, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800808 countingStream->write((uint64_t*)&cgen_var_38, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800809 countingStream->putString(local_pName);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700810 }
811 uint32_t packetSize_vkGetInstanceProcAddr = 4 + 4 + (uint32_t)countingStream->bytesWritten();
812 countingStream->rewind();
813 uint32_t opcode_vkGetInstanceProcAddr = OP_vkGetInstanceProcAddr;
814 stream->write(&opcode_vkGetInstanceProcAddr, sizeof(uint32_t));
815 stream->write(&packetSize_vkGetInstanceProcAddr, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -0800816 uint64_t cgen_var_39;
817 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_39, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800818 stream->write((uint64_t*)&cgen_var_39, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800819 stream->putString(local_pName);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800820 AEMU_SCOPED_TRACE("vkGetInstanceProcAddr readParams");
821 AEMU_SCOPED_TRACE("vkGetInstanceProcAddr returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700822 PFN_vkVoidFunction vkGetInstanceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
823 stream->read(&vkGetInstanceProcAddr_PFN_vkVoidFunction_return, sizeof(PFN_vkVoidFunction));
Lingfeng Yang256f9252020-07-14 14:27:33 -0700824 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -0800825 countingStream->clearPool();
826 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800827 mImpl->log("finish vkGetInstanceProcAddr");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700828 return vkGetInstanceProcAddr_PFN_vkVoidFunction_return;
829}
830
831PFN_vkVoidFunction VkEncoder::vkGetDeviceProcAddr(
832 VkDevice device,
833 const char* pName)
834{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700835 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800836 AEMU_SCOPED_TRACE("vkGetDeviceProcAddr encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800837 mImpl->log("start vkGetDeviceProcAddr");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700838 auto stream = mImpl->stream();
839 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800840 auto resources = mImpl->resources();
841 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800842 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800843 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800844 char* local_pName;
Lingfeng Yang9666b852018-11-13 23:09:59 -0800845 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800846 local_pName = nullptr;
847 if (pName)
848 {
849 local_pName = pool->strDup(pName);
850 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700851 countingStream->rewind();
852 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800853 uint64_t cgen_var_40;
854 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_40, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800855 countingStream->write((uint64_t*)&cgen_var_40, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800856 countingStream->putString(local_pName);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700857 }
858 uint32_t packetSize_vkGetDeviceProcAddr = 4 + 4 + (uint32_t)countingStream->bytesWritten();
859 countingStream->rewind();
860 uint32_t opcode_vkGetDeviceProcAddr = OP_vkGetDeviceProcAddr;
861 stream->write(&opcode_vkGetDeviceProcAddr, sizeof(uint32_t));
862 stream->write(&packetSize_vkGetDeviceProcAddr, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -0800863 uint64_t cgen_var_41;
864 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_41, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800865 stream->write((uint64_t*)&cgen_var_41, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800866 stream->putString(local_pName);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800867 AEMU_SCOPED_TRACE("vkGetDeviceProcAddr readParams");
868 AEMU_SCOPED_TRACE("vkGetDeviceProcAddr returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700869 PFN_vkVoidFunction vkGetDeviceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
870 stream->read(&vkGetDeviceProcAddr_PFN_vkVoidFunction_return, sizeof(PFN_vkVoidFunction));
Lingfeng Yang256f9252020-07-14 14:27:33 -0700871 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -0800872 countingStream->clearPool();
873 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800874 mImpl->log("finish vkGetDeviceProcAddr");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700875 return vkGetDeviceProcAddr_PFN_vkVoidFunction_return;
876}
877
878VkResult VkEncoder::vkCreateDevice(
879 VkPhysicalDevice physicalDevice,
880 const VkDeviceCreateInfo* pCreateInfo,
881 const VkAllocationCallbacks* pAllocator,
882 VkDevice* pDevice)
883{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700884 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800885 AEMU_SCOPED_TRACE("vkCreateDevice encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800886 mImpl->log("start vkCreateDevice");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700887 auto stream = mImpl->stream();
888 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800889 auto resources = mImpl->resources();
890 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800891 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800892 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800893 VkDeviceCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -0800894 VkAllocationCallbacks* local_pAllocator;
895 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800896 local_pCreateInfo = nullptr;
897 if (pCreateInfo)
898 {
899 local_pCreateInfo = (VkDeviceCreateInfo*)pool->alloc(sizeof(const VkDeviceCreateInfo));
900 deepcopy_VkDeviceCreateInfo(pool, pCreateInfo, (VkDeviceCreateInfo*)(local_pCreateInfo));
901 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800902 local_pAllocator = nullptr;
903 if (pAllocator)
904 {
905 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
906 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
907 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -0800908 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -0800909 if (local_pCreateInfo)
910 {
Lingfeng Yang97a06702018-12-24 17:02:43 -0800911 transform_tohost_VkDeviceCreateInfo(mImpl->resources(), (VkDeviceCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -0800912 }
913 if (local_pAllocator)
914 {
Lingfeng Yang97a06702018-12-24 17:02:43 -0800915 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -0800916 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700917 countingStream->rewind();
918 {
Lingfeng Yang2285df12018-11-17 16:25:11 -0800919 uint64_t cgen_var_42;
920 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_42, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800921 countingStream->write((uint64_t*)&cgen_var_42, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800922 marshal_VkDeviceCreateInfo(countingStream, (VkDeviceCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800923 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800924 uint64_t cgen_var_43 = (uint64_t)(uintptr_t)local_pAllocator;
925 countingStream->putBe64(cgen_var_43);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800926 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700927 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800928 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700929 }
Lingfeng Yang2285df12018-11-17 16:25:11 -0800930 uint64_t cgen_var_44;
931 countingStream->handleMapping()->mapHandles_VkDevice_u64(pDevice, &cgen_var_44, 1);
932 countingStream->write((uint64_t*)&cgen_var_44, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700933 }
934 uint32_t packetSize_vkCreateDevice = 4 + 4 + (uint32_t)countingStream->bytesWritten();
935 countingStream->rewind();
936 uint32_t opcode_vkCreateDevice = OP_vkCreateDevice;
937 stream->write(&opcode_vkCreateDevice, sizeof(uint32_t));
938 stream->write(&packetSize_vkCreateDevice, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -0800939 uint64_t cgen_var_45;
940 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_45, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800941 stream->write((uint64_t*)&cgen_var_45, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800942 marshal_VkDeviceCreateInfo(stream, (VkDeviceCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -0800943 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -0800944 uint64_t cgen_var_46 = (uint64_t)(uintptr_t)local_pAllocator;
945 stream->putBe64(cgen_var_46);
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800946 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700947 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800948 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700949 }
Lingfeng Yange4008a02018-11-18 12:22:48 -0800950 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
Lingfeng Yang2285df12018-11-17 16:25:11 -0800951 uint64_t cgen_var_47;
952 stream->handleMapping()->mapHandles_VkDevice_u64(pDevice, &cgen_var_47, 1);
953 stream->write((uint64_t*)&cgen_var_47, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800954 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800955 AEMU_SCOPED_TRACE("vkCreateDevice readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -0800956 stream->setHandleMapping(resources->createMapping());
Lingfeng Yang2285df12018-11-17 16:25:11 -0800957 uint64_t cgen_var_48;
958 stream->read((uint64_t*)&cgen_var_48, 8);
959 stream->handleMapping()->mapHandles_u64_VkDevice(&cgen_var_48, (VkDevice*)pDevice, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -0800960 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800961 AEMU_SCOPED_TRACE("vkCreateDevice returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700962 VkResult vkCreateDevice_VkResult_return = (VkResult)0;
963 stream->read(&vkCreateDevice_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -0700964 mImpl->resources()->on_vkCreateDevice(this, vkCreateDevice_VkResult_return, physicalDevice, pCreateInfo, pAllocator, pDevice);
965 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -0800966 countingStream->clearPool();
967 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800968 mImpl->log("finish vkCreateDevice");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700969 return vkCreateDevice_VkResult_return;
970}
971
972void VkEncoder::vkDestroyDevice(
973 VkDevice device,
974 const VkAllocationCallbacks* pAllocator)
975{
Lingfeng Yang256f9252020-07-14 14:27:33 -0700976 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -0800977 AEMU_SCOPED_TRACE("vkDestroyDevice encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -0800978 mImpl->log("start vkDestroyDevice");
Lingfeng Yang35e9c6a2018-12-25 17:13:36 -0800979 mImpl->resources()->on_vkDestroyDevice_pre(this, device, pAllocator);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700980 auto stream = mImpl->stream();
981 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800982 auto resources = mImpl->resources();
983 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -0800984 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang9d02e102018-11-10 01:51:46 -0800985 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800986 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -0800987 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -0800988 local_pAllocator = nullptr;
989 if (pAllocator)
990 {
991 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
992 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
993 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -0800994 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -0800995 if (local_pAllocator)
996 {
Lingfeng Yang97a06702018-12-24 17:02:43 -0800997 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -0800998 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -0700999 countingStream->rewind();
1000 {
Lingfeng Yang2285df12018-11-17 16:25:11 -08001001 uint64_t cgen_var_49;
1002 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_49, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08001003 countingStream->write((uint64_t*)&cgen_var_49, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001004 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -08001005 uint64_t cgen_var_50 = (uint64_t)(uintptr_t)local_pAllocator;
1006 countingStream->putBe64(cgen_var_50);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001007 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001008 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001009 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001010 }
1011 }
1012 uint32_t packetSize_vkDestroyDevice = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1013 countingStream->rewind();
1014 uint32_t opcode_vkDestroyDevice = OP_vkDestroyDevice;
1015 stream->write(&opcode_vkDestroyDevice, sizeof(uint32_t));
1016 stream->write(&packetSize_vkDestroyDevice, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08001017 uint64_t cgen_var_51;
1018 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_51, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08001019 stream->write((uint64_t*)&cgen_var_51, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001020 // WARNING PTR CHECK
Lingfeng Yang2285df12018-11-17 16:25:11 -08001021 uint64_t cgen_var_52 = (uint64_t)(uintptr_t)local_pAllocator;
1022 stream->putBe64(cgen_var_52);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001023 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001024 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001025 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001026 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001027 AEMU_SCOPED_TRACE("vkDestroyDevice readParams");
1028 AEMU_SCOPED_TRACE("vkDestroyDevice returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001029 resources->destroyMapping()->mapHandles_VkDevice((VkDevice*)&device);
Lingfeng Yang35e9c6a2018-12-25 17:13:36 -08001030 stream->flush();
Lingfeng Yang256f9252020-07-14 14:27:33 -07001031 pool->freeAll();
1032 countingStream->clearPool();
1033 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001034 mImpl->log("finish vkDestroyDevice");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001035}
1036
1037VkResult VkEncoder::vkEnumerateInstanceExtensionProperties(
1038 const char* pLayerName,
1039 uint32_t* pPropertyCount,
1040 VkExtensionProperties* pProperties)
1041{
Lingfeng Yang256f9252020-07-14 14:27:33 -07001042 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001043 AEMU_SCOPED_TRACE("vkEnumerateInstanceExtensionProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001044 mImpl->log("start vkEnumerateInstanceExtensionProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001045 auto stream = mImpl->stream();
1046 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001047 auto resources = mImpl->resources();
1048 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08001049 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001050 char* local_pLayerName;
1051 local_pLayerName = nullptr;
1052 if (pLayerName)
1053 {
1054 local_pLayerName = pool->strDup(pLayerName);
1055 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001056 countingStream->rewind();
1057 {
Lingfeng Yangb55ed1c2019-06-20 15:57:08 -07001058 if (countingStream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
1059 {
1060 // WARNING PTR CHECK
1061 uint64_t cgen_var_53 = (uint64_t)(uintptr_t)local_pLayerName;
1062 countingStream->putBe64(cgen_var_53);
1063 if (local_pLayerName)
1064 {
1065 countingStream->putString(local_pLayerName);
1066 }
1067 }
1068 else
David Reveman9875f2c2019-06-11 21:47:12 -04001069 {
1070 countingStream->putString(local_pLayerName);
1071 }
1072 // WARNING PTR CHECK
1073 uint64_t cgen_var_54 = (uint64_t)(uintptr_t)pPropertyCount;
1074 countingStream->putBe64(cgen_var_54);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001075 if (pPropertyCount)
1076 {
1077 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
1078 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001079 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001080 uint64_t cgen_var_55 = (uint64_t)(uintptr_t)pProperties;
1081 countingStream->putBe64(cgen_var_55);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001082 if (pProperties)
1083 {
1084 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1085 {
1086 marshal_VkExtensionProperties(countingStream, (VkExtensionProperties*)(pProperties + i));
1087 }
1088 }
1089 }
1090 uint32_t packetSize_vkEnumerateInstanceExtensionProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1091 countingStream->rewind();
1092 uint32_t opcode_vkEnumerateInstanceExtensionProperties = OP_vkEnumerateInstanceExtensionProperties;
1093 stream->write(&opcode_vkEnumerateInstanceExtensionProperties, sizeof(uint32_t));
1094 stream->write(&packetSize_vkEnumerateInstanceExtensionProperties, sizeof(uint32_t));
Lingfeng Yangb55ed1c2019-06-20 15:57:08 -07001095 if (stream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
1096 {
1097 // WARNING PTR CHECK
1098 uint64_t cgen_var_56 = (uint64_t)(uintptr_t)local_pLayerName;
1099 stream->putBe64(cgen_var_56);
1100 if (local_pLayerName)
1101 {
1102 stream->putString(local_pLayerName);
1103 }
1104 }
1105 else
David Reveman9875f2c2019-06-11 21:47:12 -04001106 {
1107 stream->putString(local_pLayerName);
1108 }
1109 // WARNING PTR CHECK
1110 uint64_t cgen_var_57 = (uint64_t)(uintptr_t)pPropertyCount;
1111 stream->putBe64(cgen_var_57);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001112 if (pPropertyCount)
1113 {
1114 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
1115 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001116 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001117 uint64_t cgen_var_58 = (uint64_t)(uintptr_t)pProperties;
1118 stream->putBe64(cgen_var_58);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001119 if (pProperties)
1120 {
1121 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1122 {
1123 marshal_VkExtensionProperties(stream, (VkExtensionProperties*)(pProperties + i));
1124 }
1125 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001126 AEMU_SCOPED_TRACE("vkEnumerateInstanceExtensionProperties readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001127 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001128 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001129 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001130 if (pPropertyCount)
1131 {
1132 if (!(check_pPropertyCount))
1133 {
1134 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
1135 }
1136 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
1137 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001138 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001139 VkExtensionProperties* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001140 check_pProperties = (VkExtensionProperties*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001141 if (pProperties)
1142 {
1143 if (!(check_pProperties))
1144 {
1145 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
1146 }
1147 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1148 {
1149 unmarshal_VkExtensionProperties(stream, (VkExtensionProperties*)(pProperties + i));
1150 }
1151 }
Lingfeng Yang97a06702018-12-24 17:02:43 -08001152 if (pProperties)
1153 {
1154 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1155 {
1156 transform_fromhost_VkExtensionProperties(mImpl->resources(), (VkExtensionProperties*)(pProperties + i));
1157 }
1158 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001159 AEMU_SCOPED_TRACE("vkEnumerateInstanceExtensionProperties returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001160 VkResult vkEnumerateInstanceExtensionProperties_VkResult_return = (VkResult)0;
1161 stream->read(&vkEnumerateInstanceExtensionProperties_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07001162 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08001163 countingStream->clearPool();
1164 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001165 mImpl->log("finish vkEnumerateInstanceExtensionProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001166 return vkEnumerateInstanceExtensionProperties_VkResult_return;
1167}
1168
1169VkResult VkEncoder::vkEnumerateDeviceExtensionProperties(
1170 VkPhysicalDevice physicalDevice,
1171 const char* pLayerName,
1172 uint32_t* pPropertyCount,
1173 VkExtensionProperties* pProperties)
1174{
Lingfeng Yang256f9252020-07-14 14:27:33 -07001175 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001176 AEMU_SCOPED_TRACE("vkEnumerateDeviceExtensionProperties encode");
Lingfeng Yang154a33c2019-01-29 19:06:23 -08001177 mImpl->log("start vkEnumerateDeviceExtensionProperties");
1178 auto stream = mImpl->stream();
1179 auto countingStream = mImpl->countingStream();
1180 auto resources = mImpl->resources();
1181 auto pool = mImpl->pool();
1182 stream->setHandleMapping(resources->unwrapMapping());
1183 VkPhysicalDevice local_physicalDevice;
1184 char* local_pLayerName;
1185 local_physicalDevice = physicalDevice;
1186 local_pLayerName = nullptr;
1187 if (pLayerName)
1188 {
1189 local_pLayerName = pool->strDup(pLayerName);
1190 }
1191 countingStream->rewind();
1192 {
David Reveman9875f2c2019-06-11 21:47:12 -04001193 uint64_t cgen_var_61;
1194 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_61, 1);
1195 countingStream->write((uint64_t*)&cgen_var_61, 1 * 8);
Lingfeng Yangb55ed1c2019-06-20 15:57:08 -07001196 if (countingStream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
1197 {
1198 // WARNING PTR CHECK
1199 uint64_t cgen_var_62 = (uint64_t)(uintptr_t)local_pLayerName;
1200 countingStream->putBe64(cgen_var_62);
1201 if (local_pLayerName)
1202 {
1203 countingStream->putString(local_pLayerName);
1204 }
1205 }
1206 else
David Reveman9875f2c2019-06-11 21:47:12 -04001207 {
1208 countingStream->putString(local_pLayerName);
1209 }
1210 // WARNING PTR CHECK
1211 uint64_t cgen_var_63 = (uint64_t)(uintptr_t)pPropertyCount;
1212 countingStream->putBe64(cgen_var_63);
Lingfeng Yang154a33c2019-01-29 19:06:23 -08001213 if (pPropertyCount)
1214 {
1215 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
1216 }
1217 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001218 uint64_t cgen_var_64 = (uint64_t)(uintptr_t)pProperties;
1219 countingStream->putBe64(cgen_var_64);
Lingfeng Yang154a33c2019-01-29 19:06:23 -08001220 if (pProperties)
1221 {
1222 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1223 {
1224 marshal_VkExtensionProperties(countingStream, (VkExtensionProperties*)(pProperties + i));
1225 }
1226 }
1227 }
1228 uint32_t packetSize_vkEnumerateDeviceExtensionProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1229 countingStream->rewind();
1230 uint32_t opcode_vkEnumerateDeviceExtensionProperties = OP_vkEnumerateDeviceExtensionProperties;
1231 stream->write(&opcode_vkEnumerateDeviceExtensionProperties, sizeof(uint32_t));
1232 stream->write(&packetSize_vkEnumerateDeviceExtensionProperties, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04001233 uint64_t cgen_var_65;
1234 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_65, 1);
1235 stream->write((uint64_t*)&cgen_var_65, 1 * 8);
Lingfeng Yangb55ed1c2019-06-20 15:57:08 -07001236 if (stream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
1237 {
1238 // WARNING PTR CHECK
1239 uint64_t cgen_var_66 = (uint64_t)(uintptr_t)local_pLayerName;
1240 stream->putBe64(cgen_var_66);
1241 if (local_pLayerName)
1242 {
1243 stream->putString(local_pLayerName);
1244 }
1245 }
1246 else
David Reveman9875f2c2019-06-11 21:47:12 -04001247 {
1248 stream->putString(local_pLayerName);
1249 }
1250 // WARNING PTR CHECK
1251 uint64_t cgen_var_67 = (uint64_t)(uintptr_t)pPropertyCount;
1252 stream->putBe64(cgen_var_67);
Lingfeng Yang154a33c2019-01-29 19:06:23 -08001253 if (pPropertyCount)
1254 {
1255 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
1256 }
1257 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001258 uint64_t cgen_var_68 = (uint64_t)(uintptr_t)pProperties;
1259 stream->putBe64(cgen_var_68);
Lingfeng Yang154a33c2019-01-29 19:06:23 -08001260 if (pProperties)
1261 {
1262 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1263 {
1264 marshal_VkExtensionProperties(stream, (VkExtensionProperties*)(pProperties + i));
1265 }
1266 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001267 AEMU_SCOPED_TRACE("vkEnumerateDeviceExtensionProperties readParams");
Lingfeng Yang154a33c2019-01-29 19:06:23 -08001268 // WARNING PTR CHECK
1269 uint32_t* check_pPropertyCount;
1270 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
1271 if (pPropertyCount)
1272 {
1273 if (!(check_pPropertyCount))
1274 {
1275 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
1276 }
1277 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
1278 }
1279 // WARNING PTR CHECK
1280 VkExtensionProperties* check_pProperties;
1281 check_pProperties = (VkExtensionProperties*)(uintptr_t)stream->getBe64();
1282 if (pProperties)
1283 {
1284 if (!(check_pProperties))
1285 {
1286 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
1287 }
1288 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1289 {
1290 unmarshal_VkExtensionProperties(stream, (VkExtensionProperties*)(pProperties + i));
1291 }
1292 }
1293 if (pProperties)
1294 {
1295 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1296 {
1297 transform_fromhost_VkExtensionProperties(mImpl->resources(), (VkExtensionProperties*)(pProperties + i));
1298 }
1299 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001300 AEMU_SCOPED_TRACE("vkEnumerateDeviceExtensionProperties returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001301 VkResult vkEnumerateDeviceExtensionProperties_VkResult_return = (VkResult)0;
Lingfeng Yang154a33c2019-01-29 19:06:23 -08001302 stream->read(&vkEnumerateDeviceExtensionProperties_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07001303 pool->freeAll();
Lingfeng Yang154a33c2019-01-29 19:06:23 -08001304 countingStream->clearPool();
1305 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001306 mImpl->log("finish vkEnumerateDeviceExtensionProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001307 return vkEnumerateDeviceExtensionProperties_VkResult_return;
1308}
1309
1310VkResult VkEncoder::vkEnumerateInstanceLayerProperties(
1311 uint32_t* pPropertyCount,
1312 VkLayerProperties* pProperties)
1313{
Lingfeng Yang256f9252020-07-14 14:27:33 -07001314 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001315 AEMU_SCOPED_TRACE("vkEnumerateInstanceLayerProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001316 mImpl->log("start vkEnumerateInstanceLayerProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001317 auto stream = mImpl->stream();
1318 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001319 auto resources = mImpl->resources();
1320 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08001321 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001322 countingStream->rewind();
1323 {
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001324 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001325 uint64_t cgen_var_71 = (uint64_t)(uintptr_t)pPropertyCount;
1326 countingStream->putBe64(cgen_var_71);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001327 if (pPropertyCount)
1328 {
1329 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
1330 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001331 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001332 uint64_t cgen_var_72 = (uint64_t)(uintptr_t)pProperties;
1333 countingStream->putBe64(cgen_var_72);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001334 if (pProperties)
1335 {
1336 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1337 {
1338 marshal_VkLayerProperties(countingStream, (VkLayerProperties*)(pProperties + i));
1339 }
1340 }
1341 }
1342 uint32_t packetSize_vkEnumerateInstanceLayerProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1343 countingStream->rewind();
1344 uint32_t opcode_vkEnumerateInstanceLayerProperties = OP_vkEnumerateInstanceLayerProperties;
1345 stream->write(&opcode_vkEnumerateInstanceLayerProperties, sizeof(uint32_t));
1346 stream->write(&packetSize_vkEnumerateInstanceLayerProperties, sizeof(uint32_t));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001347 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001348 uint64_t cgen_var_73 = (uint64_t)(uintptr_t)pPropertyCount;
1349 stream->putBe64(cgen_var_73);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001350 if (pPropertyCount)
1351 {
1352 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
1353 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001354 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001355 uint64_t cgen_var_74 = (uint64_t)(uintptr_t)pProperties;
1356 stream->putBe64(cgen_var_74);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001357 if (pProperties)
1358 {
1359 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1360 {
1361 marshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i));
1362 }
1363 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001364 AEMU_SCOPED_TRACE("vkEnumerateInstanceLayerProperties readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001365 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001366 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001367 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001368 if (pPropertyCount)
1369 {
1370 if (!(check_pPropertyCount))
1371 {
1372 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
1373 }
1374 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
1375 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001376 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001377 VkLayerProperties* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001378 check_pProperties = (VkLayerProperties*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001379 if (pProperties)
1380 {
1381 if (!(check_pProperties))
1382 {
1383 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
1384 }
1385 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1386 {
1387 unmarshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i));
1388 }
1389 }
Lingfeng Yang97a06702018-12-24 17:02:43 -08001390 if (pProperties)
1391 {
1392 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1393 {
1394 transform_fromhost_VkLayerProperties(mImpl->resources(), (VkLayerProperties*)(pProperties + i));
1395 }
1396 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001397 AEMU_SCOPED_TRACE("vkEnumerateInstanceLayerProperties returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001398 VkResult vkEnumerateInstanceLayerProperties_VkResult_return = (VkResult)0;
1399 stream->read(&vkEnumerateInstanceLayerProperties_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07001400 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08001401 countingStream->clearPool();
1402 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001403 mImpl->log("finish vkEnumerateInstanceLayerProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001404 return vkEnumerateInstanceLayerProperties_VkResult_return;
1405}
1406
1407VkResult VkEncoder::vkEnumerateDeviceLayerProperties(
1408 VkPhysicalDevice physicalDevice,
1409 uint32_t* pPropertyCount,
1410 VkLayerProperties* pProperties)
1411{
Lingfeng Yang256f9252020-07-14 14:27:33 -07001412 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001413 AEMU_SCOPED_TRACE("vkEnumerateDeviceLayerProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001414 mImpl->log("start vkEnumerateDeviceLayerProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001415 auto stream = mImpl->stream();
1416 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001417 auto resources = mImpl->resources();
1418 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08001419 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001420 VkPhysicalDevice local_physicalDevice;
1421 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001422 countingStream->rewind();
1423 {
David Reveman9875f2c2019-06-11 21:47:12 -04001424 uint64_t cgen_var_77;
1425 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_77, 1);
1426 countingStream->write((uint64_t*)&cgen_var_77, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001427 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001428 uint64_t cgen_var_78 = (uint64_t)(uintptr_t)pPropertyCount;
1429 countingStream->putBe64(cgen_var_78);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001430 if (pPropertyCount)
1431 {
1432 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
1433 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001434 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001435 uint64_t cgen_var_79 = (uint64_t)(uintptr_t)pProperties;
1436 countingStream->putBe64(cgen_var_79);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001437 if (pProperties)
1438 {
1439 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1440 {
1441 marshal_VkLayerProperties(countingStream, (VkLayerProperties*)(pProperties + i));
1442 }
1443 }
1444 }
1445 uint32_t packetSize_vkEnumerateDeviceLayerProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1446 countingStream->rewind();
1447 uint32_t opcode_vkEnumerateDeviceLayerProperties = OP_vkEnumerateDeviceLayerProperties;
1448 stream->write(&opcode_vkEnumerateDeviceLayerProperties, sizeof(uint32_t));
1449 stream->write(&packetSize_vkEnumerateDeviceLayerProperties, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04001450 uint64_t cgen_var_80;
1451 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_80, 1);
1452 stream->write((uint64_t*)&cgen_var_80, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001453 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001454 uint64_t cgen_var_81 = (uint64_t)(uintptr_t)pPropertyCount;
1455 stream->putBe64(cgen_var_81);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001456 if (pPropertyCount)
1457 {
1458 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
1459 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001460 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001461 uint64_t cgen_var_82 = (uint64_t)(uintptr_t)pProperties;
1462 stream->putBe64(cgen_var_82);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001463 if (pProperties)
1464 {
1465 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1466 {
1467 marshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i));
1468 }
1469 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001470 AEMU_SCOPED_TRACE("vkEnumerateDeviceLayerProperties readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001471 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001472 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001473 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001474 if (pPropertyCount)
1475 {
1476 if (!(check_pPropertyCount))
1477 {
1478 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
1479 }
1480 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
1481 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001482 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001483 VkLayerProperties* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001484 check_pProperties = (VkLayerProperties*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001485 if (pProperties)
1486 {
1487 if (!(check_pProperties))
1488 {
1489 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
1490 }
1491 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1492 {
1493 unmarshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i));
1494 }
1495 }
Lingfeng Yang97a06702018-12-24 17:02:43 -08001496 if (pProperties)
1497 {
1498 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
1499 {
1500 transform_fromhost_VkLayerProperties(mImpl->resources(), (VkLayerProperties*)(pProperties + i));
1501 }
1502 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001503 AEMU_SCOPED_TRACE("vkEnumerateDeviceLayerProperties returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001504 VkResult vkEnumerateDeviceLayerProperties_VkResult_return = (VkResult)0;
1505 stream->read(&vkEnumerateDeviceLayerProperties_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07001506 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08001507 countingStream->clearPool();
1508 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001509 mImpl->log("finish vkEnumerateDeviceLayerProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001510 return vkEnumerateDeviceLayerProperties_VkResult_return;
1511}
1512
1513void VkEncoder::vkGetDeviceQueue(
1514 VkDevice device,
1515 uint32_t queueFamilyIndex,
1516 uint32_t queueIndex,
1517 VkQueue* pQueue)
1518{
Lingfeng Yang256f9252020-07-14 14:27:33 -07001519 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001520 AEMU_SCOPED_TRACE("vkGetDeviceQueue encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001521 mImpl->log("start vkGetDeviceQueue");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001522 auto stream = mImpl->stream();
1523 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001524 auto resources = mImpl->resources();
1525 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08001526 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001527 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001528 uint32_t local_queueFamilyIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001529 uint32_t local_queueIndex;
Lingfeng Yang9666b852018-11-13 23:09:59 -08001530 local_device = device;
1531 local_queueFamilyIndex = queueFamilyIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001532 local_queueIndex = queueIndex;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001533 countingStream->rewind();
1534 {
David Reveman9875f2c2019-06-11 21:47:12 -04001535 uint64_t cgen_var_85;
1536 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_85, 1);
1537 countingStream->write((uint64_t*)&cgen_var_85, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001538 countingStream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
1539 countingStream->write((uint32_t*)&local_queueIndex, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04001540 uint64_t cgen_var_86;
1541 countingStream->handleMapping()->mapHandles_VkQueue_u64(pQueue, &cgen_var_86, 1);
1542 countingStream->write((uint64_t*)&cgen_var_86, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001543 }
1544 uint32_t packetSize_vkGetDeviceQueue = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1545 countingStream->rewind();
1546 uint32_t opcode_vkGetDeviceQueue = OP_vkGetDeviceQueue;
1547 stream->write(&opcode_vkGetDeviceQueue, sizeof(uint32_t));
1548 stream->write(&packetSize_vkGetDeviceQueue, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04001549 uint64_t cgen_var_87;
1550 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_87, 1);
1551 stream->write((uint64_t*)&cgen_var_87, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001552 stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
1553 stream->write((uint32_t*)&local_queueIndex, sizeof(uint32_t));
Lingfeng Yange4008a02018-11-18 12:22:48 -08001554 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04001555 uint64_t cgen_var_88;
1556 stream->handleMapping()->mapHandles_VkQueue_u64(pQueue, &cgen_var_88, 1);
1557 stream->write((uint64_t*)&cgen_var_88, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08001558 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001559 AEMU_SCOPED_TRACE("vkGetDeviceQueue readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08001560 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04001561 uint64_t cgen_var_89;
1562 stream->read((uint64_t*)&cgen_var_89, 8);
1563 stream->handleMapping()->mapHandles_u64_VkQueue(&cgen_var_89, (VkQueue*)pQueue, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08001564 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001565 AEMU_SCOPED_TRACE("vkGetDeviceQueue returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07001566 pool->freeAll();
1567 countingStream->clearPool();
1568 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001569 mImpl->log("finish vkGetDeviceQueue");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001570}
1571
1572VkResult VkEncoder::vkQueueSubmit(
1573 VkQueue queue,
1574 uint32_t submitCount,
1575 const VkSubmitInfo* pSubmits,
1576 VkFence fence)
1577{
Lingfeng Yang256f9252020-07-14 14:27:33 -07001578 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001579 AEMU_SCOPED_TRACE("vkQueueSubmit encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001580 mImpl->log("start vkQueueSubmit");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001581 auto stream = mImpl->stream();
1582 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001583 auto resources = mImpl->resources();
1584 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08001585 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001586 VkQueue local_queue;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001587 uint32_t local_submitCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001588 VkSubmitInfo* local_pSubmits;
Lingfeng Yang9666b852018-11-13 23:09:59 -08001589 VkFence local_fence;
1590 local_queue = queue;
1591 local_submitCount = submitCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001592 local_pSubmits = nullptr;
1593 if (pSubmits)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001594 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001595 local_pSubmits = (VkSubmitInfo*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001596 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
1597 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001598 deepcopy_VkSubmitInfo(pool, pSubmits + i, (VkSubmitInfo*)(local_pSubmits + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001599 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001600 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001601 local_fence = fence;
Lingfeng Yang62b23322018-12-24 12:45:47 -08001602 if (local_pSubmits)
1603 {
1604 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
1605 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08001606 transform_tohost_VkSubmitInfo(mImpl->resources(), (VkSubmitInfo*)(local_pSubmits + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08001607 }
1608 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001609 countingStream->rewind();
1610 {
David Reveman9875f2c2019-06-11 21:47:12 -04001611 uint64_t cgen_var_90;
1612 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_90, 1);
1613 countingStream->write((uint64_t*)&cgen_var_90, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001614 countingStream->write((uint32_t*)&local_submitCount, sizeof(uint32_t));
1615 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
1616 {
1617 marshal_VkSubmitInfo(countingStream, (VkSubmitInfo*)(local_pSubmits + i));
1618 }
David Reveman9875f2c2019-06-11 21:47:12 -04001619 uint64_t cgen_var_91;
1620 countingStream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_91, 1);
1621 countingStream->write((uint64_t*)&cgen_var_91, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001622 }
1623 uint32_t packetSize_vkQueueSubmit = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1624 countingStream->rewind();
1625 uint32_t opcode_vkQueueSubmit = OP_vkQueueSubmit;
1626 stream->write(&opcode_vkQueueSubmit, sizeof(uint32_t));
1627 stream->write(&packetSize_vkQueueSubmit, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04001628 uint64_t cgen_var_92;
1629 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_92, 1);
1630 stream->write((uint64_t*)&cgen_var_92, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001631 stream->write((uint32_t*)&local_submitCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001632 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
1633 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001634 marshal_VkSubmitInfo(stream, (VkSubmitInfo*)(local_pSubmits + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001635 }
David Reveman9875f2c2019-06-11 21:47:12 -04001636 uint64_t cgen_var_93;
1637 stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_93, 1);
1638 stream->write((uint64_t*)&cgen_var_93, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001639 AEMU_SCOPED_TRACE("vkQueueSubmit readParams");
1640 AEMU_SCOPED_TRACE("vkQueueSubmit returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001641 VkResult vkQueueSubmit_VkResult_return = (VkResult)0;
1642 stream->read(&vkQueueSubmit_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07001643 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08001644 countingStream->clearPool();
1645 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001646 mImpl->log("finish vkQueueSubmit");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001647 return vkQueueSubmit_VkResult_return;
1648}
1649
1650VkResult VkEncoder::vkQueueWaitIdle(
1651 VkQueue queue)
1652{
Lingfeng Yang256f9252020-07-14 14:27:33 -07001653 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001654 AEMU_SCOPED_TRACE("vkQueueWaitIdle encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001655 mImpl->log("start vkQueueWaitIdle");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001656 auto stream = mImpl->stream();
1657 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001658 auto resources = mImpl->resources();
1659 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08001660 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001661 VkQueue local_queue;
1662 local_queue = queue;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001663 countingStream->rewind();
1664 {
David Reveman9875f2c2019-06-11 21:47:12 -04001665 uint64_t cgen_var_94;
1666 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_94, 1);
1667 countingStream->write((uint64_t*)&cgen_var_94, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001668 }
1669 uint32_t packetSize_vkQueueWaitIdle = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1670 countingStream->rewind();
1671 uint32_t opcode_vkQueueWaitIdle = OP_vkQueueWaitIdle;
1672 stream->write(&opcode_vkQueueWaitIdle, sizeof(uint32_t));
1673 stream->write(&packetSize_vkQueueWaitIdle, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04001674 uint64_t cgen_var_95;
1675 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_95, 1);
1676 stream->write((uint64_t*)&cgen_var_95, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001677 AEMU_SCOPED_TRACE("vkQueueWaitIdle readParams");
1678 AEMU_SCOPED_TRACE("vkQueueWaitIdle returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001679 VkResult vkQueueWaitIdle_VkResult_return = (VkResult)0;
1680 stream->read(&vkQueueWaitIdle_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07001681 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08001682 countingStream->clearPool();
1683 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001684 mImpl->log("finish vkQueueWaitIdle");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001685 return vkQueueWaitIdle_VkResult_return;
1686}
1687
1688VkResult VkEncoder::vkDeviceWaitIdle(
1689 VkDevice device)
1690{
Lingfeng Yang256f9252020-07-14 14:27:33 -07001691 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001692 AEMU_SCOPED_TRACE("vkDeviceWaitIdle encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001693 mImpl->log("start vkDeviceWaitIdle");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001694 auto stream = mImpl->stream();
1695 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001696 auto resources = mImpl->resources();
1697 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08001698 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001699 VkDevice local_device;
1700 local_device = device;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001701 countingStream->rewind();
1702 {
David Reveman9875f2c2019-06-11 21:47:12 -04001703 uint64_t cgen_var_96;
1704 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_96, 1);
1705 countingStream->write((uint64_t*)&cgen_var_96, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001706 }
1707 uint32_t packetSize_vkDeviceWaitIdle = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1708 countingStream->rewind();
1709 uint32_t opcode_vkDeviceWaitIdle = OP_vkDeviceWaitIdle;
1710 stream->write(&opcode_vkDeviceWaitIdle, sizeof(uint32_t));
1711 stream->write(&packetSize_vkDeviceWaitIdle, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04001712 uint64_t cgen_var_97;
1713 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_97, 1);
1714 stream->write((uint64_t*)&cgen_var_97, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001715 AEMU_SCOPED_TRACE("vkDeviceWaitIdle readParams");
1716 AEMU_SCOPED_TRACE("vkDeviceWaitIdle returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001717 VkResult vkDeviceWaitIdle_VkResult_return = (VkResult)0;
1718 stream->read(&vkDeviceWaitIdle_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07001719 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08001720 countingStream->clearPool();
1721 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001722 mImpl->log("finish vkDeviceWaitIdle");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001723 return vkDeviceWaitIdle_VkResult_return;
1724}
1725
1726VkResult VkEncoder::vkAllocateMemory(
1727 VkDevice device,
1728 const VkMemoryAllocateInfo* pAllocateInfo,
1729 const VkAllocationCallbacks* pAllocator,
1730 VkDeviceMemory* pMemory)
1731{
Lingfeng Yang256f9252020-07-14 14:27:33 -07001732 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001733 AEMU_SCOPED_TRACE("vkAllocateMemory encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001734 mImpl->log("start vkAllocateMemory");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001735 auto stream = mImpl->stream();
1736 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001737 auto resources = mImpl->resources();
1738 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08001739 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001740 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001741 VkMemoryAllocateInfo* local_pAllocateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08001742 VkAllocationCallbacks* local_pAllocator;
1743 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001744 local_pAllocateInfo = nullptr;
1745 if (pAllocateInfo)
1746 {
1747 local_pAllocateInfo = (VkMemoryAllocateInfo*)pool->alloc(sizeof(const VkMemoryAllocateInfo));
1748 deepcopy_VkMemoryAllocateInfo(pool, pAllocateInfo, (VkMemoryAllocateInfo*)(local_pAllocateInfo));
1749 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001750 local_pAllocator = nullptr;
1751 if (pAllocator)
1752 {
1753 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
1754 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
1755 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08001756 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08001757 if (local_pAllocateInfo)
1758 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08001759 transform_tohost_VkMemoryAllocateInfo(mImpl->resources(), (VkMemoryAllocateInfo*)(local_pAllocateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08001760 }
1761 if (local_pAllocator)
1762 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08001763 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08001764 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001765 countingStream->rewind();
1766 {
David Reveman9875f2c2019-06-11 21:47:12 -04001767 uint64_t cgen_var_98;
1768 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_98, 1);
1769 countingStream->write((uint64_t*)&cgen_var_98, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001770 marshal_VkMemoryAllocateInfo(countingStream, (VkMemoryAllocateInfo*)(local_pAllocateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001771 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001772 uint64_t cgen_var_99 = (uint64_t)(uintptr_t)local_pAllocator;
1773 countingStream->putBe64(cgen_var_99);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001774 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001775 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001776 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001777 }
David Reveman9875f2c2019-06-11 21:47:12 -04001778 uint64_t cgen_var_100;
1779 countingStream->handleMapping()->mapHandles_VkDeviceMemory_u64(pMemory, &cgen_var_100, 1);
1780 countingStream->write((uint64_t*)&cgen_var_100, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001781 }
1782 uint32_t packetSize_vkAllocateMemory = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1783 countingStream->rewind();
1784 uint32_t opcode_vkAllocateMemory = OP_vkAllocateMemory;
1785 stream->write(&opcode_vkAllocateMemory, sizeof(uint32_t));
1786 stream->write(&packetSize_vkAllocateMemory, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04001787 uint64_t cgen_var_101;
1788 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_101, 1);
1789 stream->write((uint64_t*)&cgen_var_101, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001790 marshal_VkMemoryAllocateInfo(stream, (VkMemoryAllocateInfo*)(local_pAllocateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001791 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001792 uint64_t cgen_var_102 = (uint64_t)(uintptr_t)local_pAllocator;
1793 stream->putBe64(cgen_var_102);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001794 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001795 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001796 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001797 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08001798 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04001799 uint64_t cgen_var_103;
1800 stream->handleMapping()->mapHandles_VkDeviceMemory_u64(pMemory, &cgen_var_103, 1);
1801 stream->write((uint64_t*)&cgen_var_103, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08001802 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001803 AEMU_SCOPED_TRACE("vkAllocateMemory readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08001804 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04001805 uint64_t cgen_var_104;
1806 stream->read((uint64_t*)&cgen_var_104, 8);
1807 stream->handleMapping()->mapHandles_u64_VkDeviceMemory(&cgen_var_104, (VkDeviceMemory*)pMemory, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08001808 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001809 AEMU_SCOPED_TRACE("vkAllocateMemory returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001810 VkResult vkAllocateMemory_VkResult_return = (VkResult)0;
1811 stream->read(&vkAllocateMemory_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07001812 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08001813 countingStream->clearPool();
1814 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001815 mImpl->log("finish vkAllocateMemory");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001816 return vkAllocateMemory_VkResult_return;
1817}
1818
1819void VkEncoder::vkFreeMemory(
1820 VkDevice device,
1821 VkDeviceMemory memory,
1822 const VkAllocationCallbacks* pAllocator)
1823{
Lingfeng Yang256f9252020-07-14 14:27:33 -07001824 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001825 AEMU_SCOPED_TRACE("vkFreeMemory encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001826 mImpl->log("start vkFreeMemory");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001827 auto stream = mImpl->stream();
1828 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001829 auto resources = mImpl->resources();
1830 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08001831 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001832 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08001833 VkDeviceMemory local_memory;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001834 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08001835 local_device = device;
1836 local_memory = memory;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001837 local_pAllocator = nullptr;
1838 if (pAllocator)
1839 {
1840 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
1841 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
1842 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08001843 local_pAllocator = nullptr;
Lingfeng Yang2b1b8cf2019-02-08 09:53:36 -08001844 mImpl->resources()->deviceMemoryTransform_tohost((VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001845 countingStream->rewind();
1846 {
David Reveman9875f2c2019-06-11 21:47:12 -04001847 uint64_t cgen_var_105;
1848 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_105, 1);
1849 countingStream->write((uint64_t*)&cgen_var_105, 1 * 8);
1850 uint64_t cgen_var_106;
1851 countingStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_106, 1);
1852 countingStream->write((uint64_t*)&cgen_var_106, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001853 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001854 uint64_t cgen_var_107 = (uint64_t)(uintptr_t)local_pAllocator;
1855 countingStream->putBe64(cgen_var_107);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001856 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001857 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001858 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001859 }
1860 }
1861 uint32_t packetSize_vkFreeMemory = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1862 countingStream->rewind();
1863 uint32_t opcode_vkFreeMemory = OP_vkFreeMemory;
1864 stream->write(&opcode_vkFreeMemory, sizeof(uint32_t));
1865 stream->write(&packetSize_vkFreeMemory, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04001866 uint64_t cgen_var_108;
1867 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_108, 1);
1868 stream->write((uint64_t*)&cgen_var_108, 1 * 8);
1869 uint64_t cgen_var_109;
1870 stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_109, 1);
1871 stream->write((uint64_t*)&cgen_var_109, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08001872 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04001873 uint64_t cgen_var_110 = (uint64_t)(uintptr_t)local_pAllocator;
1874 stream->putBe64(cgen_var_110);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001875 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001876 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001877 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001878 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001879 AEMU_SCOPED_TRACE("vkFreeMemory readParams");
1880 AEMU_SCOPED_TRACE("vkFreeMemory returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001881 resources->destroyMapping()->mapHandles_VkDeviceMemory((VkDeviceMemory*)&memory);
Lingfeng Yang256f9252020-07-14 14:27:33 -07001882 pool->freeAll();
1883 countingStream->clearPool();
1884 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001885 mImpl->log("finish vkFreeMemory");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001886}
1887
1888VkResult VkEncoder::vkMapMemory(
1889 VkDevice device,
1890 VkDeviceMemory memory,
1891 VkDeviceSize offset,
1892 VkDeviceSize size,
1893 VkMemoryMapFlags flags,
1894 void** ppData)
1895{
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001896 AEMU_SCOPED_TRACE("vkMapMemory resourceEvent");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001897 VkResult vkMapMemory_VkResult_return = (VkResult)0;
Lingfeng Yangdef88ba2018-12-13 12:43:17 -08001898 vkMapMemory_VkResult_return = mImpl->resources()->on_vkMapMemory(this, VK_SUCCESS, device, memory, offset, size, flags, ppData);
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001899 mImpl->log("finish vkMapMemory");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001900 return vkMapMemory_VkResult_return;
1901}
1902
1903void VkEncoder::vkUnmapMemory(
1904 VkDevice device,
1905 VkDeviceMemory memory)
1906{
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001907 AEMU_SCOPED_TRACE("vkUnmapMemory resourceEvent");
Lingfeng Yangdef88ba2018-12-13 12:43:17 -08001908 mImpl->resources()->on_vkUnmapMemory(this, device, memory);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001909}
1910
1911VkResult VkEncoder::vkFlushMappedMemoryRanges(
1912 VkDevice device,
1913 uint32_t memoryRangeCount,
1914 const VkMappedMemoryRange* pMemoryRanges)
1915{
Lingfeng Yang256f9252020-07-14 14:27:33 -07001916 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08001917 AEMU_SCOPED_TRACE("vkFlushMappedMemoryRanges encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08001918 mImpl->log("start vkFlushMappedMemoryRanges");
Lingfeng Yang29c99d92018-11-30 11:15:29 -08001919 VALIDATE_RET(VkResult, VK_SUCCESS, mImpl->validation()->on_vkFlushMappedMemoryRanges(this, VK_SUCCESS, device, memoryRangeCount, pMemoryRanges));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001920 auto stream = mImpl->stream();
1921 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001922 auto resources = mImpl->resources();
1923 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08001924 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001925 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001926 uint32_t local_memoryRangeCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001927 VkMappedMemoryRange* local_pMemoryRanges;
Lingfeng Yang9666b852018-11-13 23:09:59 -08001928 local_device = device;
1929 local_memoryRangeCount = memoryRangeCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001930 local_pMemoryRanges = nullptr;
1931 if (pMemoryRanges)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001932 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001933 local_pMemoryRanges = (VkMappedMemoryRange*)pool->alloc(((memoryRangeCount)) * sizeof(const VkMappedMemoryRange));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001934 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
1935 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001936 deepcopy_VkMappedMemoryRange(pool, pMemoryRanges + i, (VkMappedMemoryRange*)(local_pMemoryRanges + i));
1937 }
1938 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08001939 if (local_pMemoryRanges)
1940 {
1941 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
1942 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08001943 transform_tohost_VkMappedMemoryRange(mImpl->resources(), (VkMappedMemoryRange*)(local_pMemoryRanges + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08001944 }
1945 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001946 countingStream->rewind();
1947 {
David Reveman9875f2c2019-06-11 21:47:12 -04001948 uint64_t cgen_var_111;
1949 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_111, 1);
1950 countingStream->write((uint64_t*)&cgen_var_111, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001951 countingStream->write((uint32_t*)&local_memoryRangeCount, sizeof(uint32_t));
1952 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
1953 {
1954 marshal_VkMappedMemoryRange(countingStream, (VkMappedMemoryRange*)(local_pMemoryRanges + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001955 }
1956 }
Lingfeng Yang5c63afd2018-12-22 01:21:14 -08001957 if (!resources->usingDirectMapping())
Lingfeng Yange30d3382018-11-09 08:24:37 -08001958 {
Lingfeng Yang5c63afd2018-12-22 01:21:14 -08001959 for (uint32_t i = 0; i < memoryRangeCount; ++i)
1960 {
1961 auto range = pMemoryRanges[i];
1962 auto memory = pMemoryRanges[i].memory;
1963 auto size = pMemoryRanges[i].size;
1964 auto offset = pMemoryRanges[i].offset;
1965 uint64_t streamSize = 0;
1966 if (!memory) { countingStream->write(&streamSize, sizeof(uint64_t)); continue; };
1967 auto hostPtr = resources->getMappedPointer(memory);
1968 auto actualSize = size == VK_WHOLE_SIZE ? resources->getMappedSize(memory) : size;
1969 if (!hostPtr) { countingStream->write(&streamSize, sizeof(uint64_t)); continue; };
1970 streamSize = actualSize;
1971 countingStream->write(&streamSize, sizeof(uint64_t));
1972 uint8_t* targetRange = hostPtr + offset;
1973 countingStream->write(targetRange, actualSize);
1974 }
Lingfeng Yange30d3382018-11-09 08:24:37 -08001975 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001976 uint32_t packetSize_vkFlushMappedMemoryRanges = 4 + 4 + (uint32_t)countingStream->bytesWritten();
1977 countingStream->rewind();
1978 uint32_t opcode_vkFlushMappedMemoryRanges = OP_vkFlushMappedMemoryRanges;
1979 stream->write(&opcode_vkFlushMappedMemoryRanges, sizeof(uint32_t));
1980 stream->write(&packetSize_vkFlushMappedMemoryRanges, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04001981 uint64_t cgen_var_112;
1982 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_112, 1);
1983 stream->write((uint64_t*)&cgen_var_112, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001984 stream->write((uint32_t*)&local_memoryRangeCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001985 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
1986 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08001987 marshal_VkMappedMemoryRange(stream, (VkMappedMemoryRange*)(local_pMemoryRanges + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07001988 }
Lingfeng Yang5c63afd2018-12-22 01:21:14 -08001989 if (!resources->usingDirectMapping())
Lingfeng Yange30d3382018-11-09 08:24:37 -08001990 {
Lingfeng Yang5c63afd2018-12-22 01:21:14 -08001991 for (uint32_t i = 0; i < memoryRangeCount; ++i)
1992 {
1993 auto range = pMemoryRanges[i];
1994 auto memory = pMemoryRanges[i].memory;
1995 auto size = pMemoryRanges[i].size;
1996 auto offset = pMemoryRanges[i].offset;
1997 uint64_t streamSize = 0;
1998 if (!memory) { stream->write(&streamSize, sizeof(uint64_t)); continue; };
1999 auto hostPtr = resources->getMappedPointer(memory);
2000 auto actualSize = size == VK_WHOLE_SIZE ? resources->getMappedSize(memory) : size;
2001 if (!hostPtr) { stream->write(&streamSize, sizeof(uint64_t)); continue; };
2002 streamSize = actualSize;
2003 stream->write(&streamSize, sizeof(uint64_t));
2004 uint8_t* targetRange = hostPtr + offset;
2005 stream->write(targetRange, actualSize);
2006 }
Lingfeng Yange30d3382018-11-09 08:24:37 -08002007 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002008 AEMU_SCOPED_TRACE("vkFlushMappedMemoryRanges readParams");
2009 AEMU_SCOPED_TRACE("vkFlushMappedMemoryRanges returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002010 VkResult vkFlushMappedMemoryRanges_VkResult_return = (VkResult)0;
2011 stream->read(&vkFlushMappedMemoryRanges_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07002012 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08002013 countingStream->clearPool();
2014 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002015 mImpl->log("finish vkFlushMappedMemoryRanges");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002016 return vkFlushMappedMemoryRanges_VkResult_return;
2017}
2018
2019VkResult VkEncoder::vkInvalidateMappedMemoryRanges(
2020 VkDevice device,
2021 uint32_t memoryRangeCount,
2022 const VkMappedMemoryRange* pMemoryRanges)
2023{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002024 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002025 AEMU_SCOPED_TRACE("vkInvalidateMappedMemoryRanges encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002026 mImpl->log("start vkInvalidateMappedMemoryRanges");
Lingfeng Yang29c99d92018-11-30 11:15:29 -08002027 VALIDATE_RET(VkResult, VK_SUCCESS, mImpl->validation()->on_vkInvalidateMappedMemoryRanges(this, VK_SUCCESS, device, memoryRangeCount, pMemoryRanges));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002028 auto stream = mImpl->stream();
2029 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002030 auto resources = mImpl->resources();
2031 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002032 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002033 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002034 uint32_t local_memoryRangeCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002035 VkMappedMemoryRange* local_pMemoryRanges;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002036 local_device = device;
2037 local_memoryRangeCount = memoryRangeCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002038 local_pMemoryRanges = nullptr;
2039 if (pMemoryRanges)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002040 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002041 local_pMemoryRanges = (VkMappedMemoryRange*)pool->alloc(((memoryRangeCount)) * sizeof(const VkMappedMemoryRange));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002042 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
2043 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002044 deepcopy_VkMappedMemoryRange(pool, pMemoryRanges + i, (VkMappedMemoryRange*)(local_pMemoryRanges + i));
2045 }
2046 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08002047 if (local_pMemoryRanges)
2048 {
2049 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
2050 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08002051 transform_tohost_VkMappedMemoryRange(mImpl->resources(), (VkMappedMemoryRange*)(local_pMemoryRanges + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08002052 }
2053 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002054 countingStream->rewind();
2055 {
David Reveman9875f2c2019-06-11 21:47:12 -04002056 uint64_t cgen_var_113;
2057 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_113, 1);
2058 countingStream->write((uint64_t*)&cgen_var_113, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002059 countingStream->write((uint32_t*)&local_memoryRangeCount, sizeof(uint32_t));
2060 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
2061 {
2062 marshal_VkMappedMemoryRange(countingStream, (VkMappedMemoryRange*)(local_pMemoryRanges + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002063 }
2064 }
2065 uint32_t packetSize_vkInvalidateMappedMemoryRanges = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2066 countingStream->rewind();
2067 uint32_t opcode_vkInvalidateMappedMemoryRanges = OP_vkInvalidateMappedMemoryRanges;
2068 stream->write(&opcode_vkInvalidateMappedMemoryRanges, sizeof(uint32_t));
2069 stream->write(&packetSize_vkInvalidateMappedMemoryRanges, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002070 uint64_t cgen_var_114;
2071 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_114, 1);
2072 stream->write((uint64_t*)&cgen_var_114, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002073 stream->write((uint32_t*)&local_memoryRangeCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002074 for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
2075 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002076 marshal_VkMappedMemoryRange(stream, (VkMappedMemoryRange*)(local_pMemoryRanges + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002077 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002078 AEMU_SCOPED_TRACE("vkInvalidateMappedMemoryRanges readParams");
2079 AEMU_SCOPED_TRACE("vkInvalidateMappedMemoryRanges returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002080 VkResult vkInvalidateMappedMemoryRanges_VkResult_return = (VkResult)0;
2081 stream->read(&vkInvalidateMappedMemoryRanges_VkResult_return, sizeof(VkResult));
Lingfeng Yang5c63afd2018-12-22 01:21:14 -08002082 if (!resources->usingDirectMapping())
Lingfeng Yang9d02e102018-11-10 01:51:46 -08002083 {
Lingfeng Yang5c63afd2018-12-22 01:21:14 -08002084 for (uint32_t i = 0; i < memoryRangeCount; ++i)
2085 {
2086 auto range = pMemoryRanges[i];
2087 auto memory = pMemoryRanges[i].memory;
2088 auto size = pMemoryRanges[i].size;
2089 auto offset = pMemoryRanges[i].offset;
2090 uint64_t streamSize = 0;
2091 if (!memory) { stream->read(&streamSize, sizeof(uint64_t)); continue; };
2092 auto hostPtr = resources->getMappedPointer(memory);
2093 auto actualSize = size == VK_WHOLE_SIZE ? resources->getMappedSize(memory) : size;
2094 if (!hostPtr) { stream->read(&streamSize, sizeof(uint64_t)); continue; };
2095 streamSize = actualSize;
2096 stream->read(&streamSize, sizeof(uint64_t));
2097 uint8_t* targetRange = hostPtr + offset;
2098 stream->read(targetRange, actualSize);
2099 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08002100 }
Lingfeng Yang256f9252020-07-14 14:27:33 -07002101 pool->freeAll();
2102 countingStream->clearPool();
2103 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002104 mImpl->log("finish vkInvalidateMappedMemoryRanges");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002105 return vkInvalidateMappedMemoryRanges_VkResult_return;
2106}
2107
2108void VkEncoder::vkGetDeviceMemoryCommitment(
2109 VkDevice device,
2110 VkDeviceMemory memory,
2111 VkDeviceSize* pCommittedMemoryInBytes)
2112{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002113 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002114 AEMU_SCOPED_TRACE("vkGetDeviceMemoryCommitment encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002115 mImpl->log("start vkGetDeviceMemoryCommitment");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002116 auto stream = mImpl->stream();
2117 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002118 auto resources = mImpl->resources();
2119 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002120 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002121 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002122 VkDeviceMemory local_memory;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002123 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002124 local_memory = memory;
Lingfeng Yang2b1b8cf2019-02-08 09:53:36 -08002125 mImpl->resources()->deviceMemoryTransform_tohost((VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002126 countingStream->rewind();
2127 {
David Reveman9875f2c2019-06-11 21:47:12 -04002128 uint64_t cgen_var_115;
2129 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_115, 1);
2130 countingStream->write((uint64_t*)&cgen_var_115, 1 * 8);
2131 uint64_t cgen_var_116;
2132 countingStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_116, 1);
2133 countingStream->write((uint64_t*)&cgen_var_116, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002134 countingStream->write((VkDeviceSize*)pCommittedMemoryInBytes, sizeof(VkDeviceSize));
2135 }
2136 uint32_t packetSize_vkGetDeviceMemoryCommitment = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2137 countingStream->rewind();
2138 uint32_t opcode_vkGetDeviceMemoryCommitment = OP_vkGetDeviceMemoryCommitment;
2139 stream->write(&opcode_vkGetDeviceMemoryCommitment, sizeof(uint32_t));
2140 stream->write(&packetSize_vkGetDeviceMemoryCommitment, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002141 uint64_t cgen_var_117;
2142 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_117, 1);
2143 stream->write((uint64_t*)&cgen_var_117, 1 * 8);
2144 uint64_t cgen_var_118;
2145 stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_118, 1);
2146 stream->write((uint64_t*)&cgen_var_118, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002147 stream->write((VkDeviceSize*)pCommittedMemoryInBytes, sizeof(VkDeviceSize));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002148 AEMU_SCOPED_TRACE("vkGetDeviceMemoryCommitment readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002149 stream->read((VkDeviceSize*)pCommittedMemoryInBytes, sizeof(VkDeviceSize));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002150 AEMU_SCOPED_TRACE("vkGetDeviceMemoryCommitment returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07002151 pool->freeAll();
2152 countingStream->clearPool();
2153 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002154 mImpl->log("finish vkGetDeviceMemoryCommitment");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002155}
2156
2157VkResult VkEncoder::vkBindBufferMemory(
2158 VkDevice device,
2159 VkBuffer buffer,
2160 VkDeviceMemory memory,
2161 VkDeviceSize memoryOffset)
2162{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002163 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002164 AEMU_SCOPED_TRACE("vkBindBufferMemory encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002165 mImpl->log("start vkBindBufferMemory");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002166 auto stream = mImpl->stream();
2167 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002168 auto resources = mImpl->resources();
2169 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002170 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002171 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002172 VkBuffer local_buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002173 VkDeviceMemory local_memory;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002174 VkDeviceSize local_memoryOffset;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002175 local_device = device;
2176 local_buffer = buffer;
2177 local_memory = memory;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002178 local_memoryOffset = memoryOffset;
Lingfeng Yang2b1b8cf2019-02-08 09:53:36 -08002179 mImpl->resources()->deviceMemoryTransform_tohost((VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)&local_memoryOffset, 1, (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002180 countingStream->rewind();
2181 {
David Reveman9875f2c2019-06-11 21:47:12 -04002182 uint64_t cgen_var_119;
2183 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_119, 1);
2184 countingStream->write((uint64_t*)&cgen_var_119, 1 * 8);
2185 uint64_t cgen_var_120;
2186 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_120, 1);
2187 countingStream->write((uint64_t*)&cgen_var_120, 1 * 8);
2188 uint64_t cgen_var_121;
2189 countingStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_121, 1);
2190 countingStream->write((uint64_t*)&cgen_var_121, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002191 countingStream->write((VkDeviceSize*)&local_memoryOffset, sizeof(VkDeviceSize));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002192 }
2193 uint32_t packetSize_vkBindBufferMemory = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2194 countingStream->rewind();
2195 uint32_t opcode_vkBindBufferMemory = OP_vkBindBufferMemory;
2196 stream->write(&opcode_vkBindBufferMemory, sizeof(uint32_t));
2197 stream->write(&packetSize_vkBindBufferMemory, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002198 uint64_t cgen_var_122;
2199 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_122, 1);
2200 stream->write((uint64_t*)&cgen_var_122, 1 * 8);
2201 uint64_t cgen_var_123;
2202 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_123, 1);
2203 stream->write((uint64_t*)&cgen_var_123, 1 * 8);
2204 uint64_t cgen_var_124;
2205 stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_124, 1);
2206 stream->write((uint64_t*)&cgen_var_124, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002207 stream->write((VkDeviceSize*)&local_memoryOffset, sizeof(VkDeviceSize));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002208 AEMU_SCOPED_TRACE("vkBindBufferMemory readParams");
2209 AEMU_SCOPED_TRACE("vkBindBufferMemory returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002210 VkResult vkBindBufferMemory_VkResult_return = (VkResult)0;
2211 stream->read(&vkBindBufferMemory_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07002212 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08002213 countingStream->clearPool();
2214 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002215 mImpl->log("finish vkBindBufferMemory");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002216 return vkBindBufferMemory_VkResult_return;
2217}
2218
2219VkResult VkEncoder::vkBindImageMemory(
2220 VkDevice device,
2221 VkImage image,
2222 VkDeviceMemory memory,
2223 VkDeviceSize memoryOffset)
2224{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002225 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002226 AEMU_SCOPED_TRACE("vkBindImageMemory encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002227 mImpl->log("start vkBindImageMemory");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002228 auto stream = mImpl->stream();
2229 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002230 auto resources = mImpl->resources();
2231 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002232 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002233 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002234 VkImage local_image;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002235 VkDeviceMemory local_memory;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002236 VkDeviceSize local_memoryOffset;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002237 local_device = device;
2238 local_image = image;
2239 local_memory = memory;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002240 local_memoryOffset = memoryOffset;
Lingfeng Yang2b1b8cf2019-02-08 09:53:36 -08002241 mImpl->resources()->deviceMemoryTransform_tohost((VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)&local_memoryOffset, 1, (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002242 countingStream->rewind();
2243 {
David Reveman9875f2c2019-06-11 21:47:12 -04002244 uint64_t cgen_var_125;
2245 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_125, 1);
2246 countingStream->write((uint64_t*)&cgen_var_125, 1 * 8);
2247 uint64_t cgen_var_126;
2248 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_126, 1);
2249 countingStream->write((uint64_t*)&cgen_var_126, 1 * 8);
2250 uint64_t cgen_var_127;
2251 countingStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_127, 1);
2252 countingStream->write((uint64_t*)&cgen_var_127, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002253 countingStream->write((VkDeviceSize*)&local_memoryOffset, sizeof(VkDeviceSize));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002254 }
2255 uint32_t packetSize_vkBindImageMemory = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2256 countingStream->rewind();
2257 uint32_t opcode_vkBindImageMemory = OP_vkBindImageMemory;
2258 stream->write(&opcode_vkBindImageMemory, sizeof(uint32_t));
2259 stream->write(&packetSize_vkBindImageMemory, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002260 uint64_t cgen_var_128;
2261 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_128, 1);
2262 stream->write((uint64_t*)&cgen_var_128, 1 * 8);
2263 uint64_t cgen_var_129;
2264 stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_129, 1);
2265 stream->write((uint64_t*)&cgen_var_129, 1 * 8);
2266 uint64_t cgen_var_130;
2267 stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_130, 1);
2268 stream->write((uint64_t*)&cgen_var_130, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002269 stream->write((VkDeviceSize*)&local_memoryOffset, sizeof(VkDeviceSize));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002270 AEMU_SCOPED_TRACE("vkBindImageMemory readParams");
2271 AEMU_SCOPED_TRACE("vkBindImageMemory returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002272 VkResult vkBindImageMemory_VkResult_return = (VkResult)0;
2273 stream->read(&vkBindImageMemory_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07002274 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08002275 countingStream->clearPool();
2276 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002277 mImpl->log("finish vkBindImageMemory");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002278 return vkBindImageMemory_VkResult_return;
2279}
2280
2281void VkEncoder::vkGetBufferMemoryRequirements(
2282 VkDevice device,
2283 VkBuffer buffer,
2284 VkMemoryRequirements* pMemoryRequirements)
2285{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002286 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002287 AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002288 mImpl->log("start vkGetBufferMemoryRequirements");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002289 auto stream = mImpl->stream();
2290 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002291 auto resources = mImpl->resources();
2292 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002293 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002294 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002295 VkBuffer local_buffer;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002296 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002297 local_buffer = buffer;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002298 countingStream->rewind();
2299 {
David Reveman9875f2c2019-06-11 21:47:12 -04002300 uint64_t cgen_var_131;
2301 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_131, 1);
2302 countingStream->write((uint64_t*)&cgen_var_131, 1 * 8);
2303 uint64_t cgen_var_132;
2304 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_132, 1);
2305 countingStream->write((uint64_t*)&cgen_var_132, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002306 marshal_VkMemoryRequirements(countingStream, (VkMemoryRequirements*)(pMemoryRequirements));
2307 }
2308 uint32_t packetSize_vkGetBufferMemoryRequirements = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2309 countingStream->rewind();
2310 uint32_t opcode_vkGetBufferMemoryRequirements = OP_vkGetBufferMemoryRequirements;
2311 stream->write(&opcode_vkGetBufferMemoryRequirements, sizeof(uint32_t));
2312 stream->write(&packetSize_vkGetBufferMemoryRequirements, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002313 uint64_t cgen_var_133;
2314 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_133, 1);
2315 stream->write((uint64_t*)&cgen_var_133, 1 * 8);
2316 uint64_t cgen_var_134;
2317 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_134, 1);
2318 stream->write((uint64_t*)&cgen_var_134, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002319 marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002320 AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002321 unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
Lingfeng Yang97a06702018-12-24 17:02:43 -08002322 if (pMemoryRequirements)
2323 {
2324 transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
2325 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002326 AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07002327 pool->freeAll();
2328 countingStream->clearPool();
2329 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002330 mImpl->log("finish vkGetBufferMemoryRequirements");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002331}
2332
2333void VkEncoder::vkGetImageMemoryRequirements(
2334 VkDevice device,
2335 VkImage image,
2336 VkMemoryRequirements* pMemoryRequirements)
2337{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002338 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002339 AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002340 mImpl->log("start vkGetImageMemoryRequirements");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002341 auto stream = mImpl->stream();
2342 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002343 auto resources = mImpl->resources();
2344 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002345 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002346 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002347 VkImage local_image;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002348 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002349 local_image = image;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002350 countingStream->rewind();
2351 {
David Reveman9875f2c2019-06-11 21:47:12 -04002352 uint64_t cgen_var_135;
2353 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_135, 1);
2354 countingStream->write((uint64_t*)&cgen_var_135, 1 * 8);
2355 uint64_t cgen_var_136;
2356 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_136, 1);
2357 countingStream->write((uint64_t*)&cgen_var_136, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002358 marshal_VkMemoryRequirements(countingStream, (VkMemoryRequirements*)(pMemoryRequirements));
2359 }
2360 uint32_t packetSize_vkGetImageMemoryRequirements = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2361 countingStream->rewind();
2362 uint32_t opcode_vkGetImageMemoryRequirements = OP_vkGetImageMemoryRequirements;
2363 stream->write(&opcode_vkGetImageMemoryRequirements, sizeof(uint32_t));
2364 stream->write(&packetSize_vkGetImageMemoryRequirements, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002365 uint64_t cgen_var_137;
2366 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_137, 1);
2367 stream->write((uint64_t*)&cgen_var_137, 1 * 8);
2368 uint64_t cgen_var_138;
2369 stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_138, 1);
2370 stream->write((uint64_t*)&cgen_var_138, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002371 marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002372 AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002373 unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
Lingfeng Yang97a06702018-12-24 17:02:43 -08002374 if (pMemoryRequirements)
2375 {
2376 transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
2377 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002378 AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07002379 pool->freeAll();
2380 countingStream->clearPool();
2381 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002382 mImpl->log("finish vkGetImageMemoryRequirements");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002383}
2384
2385void VkEncoder::vkGetImageSparseMemoryRequirements(
2386 VkDevice device,
2387 VkImage image,
2388 uint32_t* pSparseMemoryRequirementCount,
2389 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2390{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002391 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002392 AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002393 mImpl->log("start vkGetImageSparseMemoryRequirements");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002394 auto stream = mImpl->stream();
2395 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002396 auto resources = mImpl->resources();
2397 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002398 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002399 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002400 VkImage local_image;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002401 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002402 local_image = image;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002403 countingStream->rewind();
2404 {
David Reveman9875f2c2019-06-11 21:47:12 -04002405 uint64_t cgen_var_139;
2406 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_139, 1);
2407 countingStream->write((uint64_t*)&cgen_var_139, 1 * 8);
2408 uint64_t cgen_var_140;
2409 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_140, 1);
2410 countingStream->write((uint64_t*)&cgen_var_140, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002411 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002412 uint64_t cgen_var_141 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
2413 countingStream->putBe64(cgen_var_141);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002414 if (pSparseMemoryRequirementCount)
2415 {
2416 countingStream->write((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
2417 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002418 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002419 uint64_t cgen_var_142 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
2420 countingStream->putBe64(cgen_var_142);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002421 if (pSparseMemoryRequirements)
2422 {
2423 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
2424 {
2425 marshal_VkSparseImageMemoryRequirements(countingStream, (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
2426 }
2427 }
2428 }
2429 uint32_t packetSize_vkGetImageSparseMemoryRequirements = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2430 countingStream->rewind();
2431 uint32_t opcode_vkGetImageSparseMemoryRequirements = OP_vkGetImageSparseMemoryRequirements;
2432 stream->write(&opcode_vkGetImageSparseMemoryRequirements, sizeof(uint32_t));
2433 stream->write(&packetSize_vkGetImageSparseMemoryRequirements, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002434 uint64_t cgen_var_143;
2435 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_143, 1);
2436 stream->write((uint64_t*)&cgen_var_143, 1 * 8);
2437 uint64_t cgen_var_144;
2438 stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_144, 1);
2439 stream->write((uint64_t*)&cgen_var_144, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002440 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002441 uint64_t cgen_var_145 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
2442 stream->putBe64(cgen_var_145);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002443 if (pSparseMemoryRequirementCount)
2444 {
2445 stream->write((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
2446 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002447 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002448 uint64_t cgen_var_146 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
2449 stream->putBe64(cgen_var_146);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002450 if (pSparseMemoryRequirements)
2451 {
2452 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
2453 {
2454 marshal_VkSparseImageMemoryRequirements(stream, (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
2455 }
2456 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002457 AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002458 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002459 uint32_t* check_pSparseMemoryRequirementCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002460 check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002461 if (pSparseMemoryRequirementCount)
2462 {
2463 if (!(check_pSparseMemoryRequirementCount))
2464 {
2465 fprintf(stderr, "fatal: pSparseMemoryRequirementCount inconsistent between guest and host\n");
2466 }
2467 stream->read((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
2468 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002469 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002470 VkSparseImageMemoryRequirements* check_pSparseMemoryRequirements;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002471 check_pSparseMemoryRequirements = (VkSparseImageMemoryRequirements*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002472 if (pSparseMemoryRequirements)
2473 {
2474 if (!(check_pSparseMemoryRequirements))
2475 {
2476 fprintf(stderr, "fatal: pSparseMemoryRequirements inconsistent between guest and host\n");
2477 }
2478 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
2479 {
2480 unmarshal_VkSparseImageMemoryRequirements(stream, (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
2481 }
2482 }
Lingfeng Yang97a06702018-12-24 17:02:43 -08002483 if (pSparseMemoryRequirements)
2484 {
2485 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
2486 {
2487 transform_fromhost_VkSparseImageMemoryRequirements(mImpl->resources(), (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
2488 }
2489 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002490 AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07002491 pool->freeAll();
2492 countingStream->clearPool();
2493 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002494 mImpl->log("finish vkGetImageSparseMemoryRequirements");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002495}
2496
2497void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties(
2498 VkPhysicalDevice physicalDevice,
2499 VkFormat format,
2500 VkImageType type,
2501 VkSampleCountFlagBits samples,
2502 VkImageUsageFlags usage,
2503 VkImageTiling tiling,
2504 uint32_t* pPropertyCount,
2505 VkSparseImageFormatProperties* pProperties)
2506{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002507 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002508 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002509 mImpl->log("start vkGetPhysicalDeviceSparseImageFormatProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002510 auto stream = mImpl->stream();
2511 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002512 auto resources = mImpl->resources();
2513 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002514 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002515 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002516 VkFormat local_format;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002517 VkImageType local_type;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002518 VkSampleCountFlagBits local_samples;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002519 VkImageUsageFlags local_usage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002520 VkImageTiling local_tiling;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002521 local_physicalDevice = physicalDevice;
2522 local_format = format;
2523 local_type = type;
2524 local_samples = samples;
2525 local_usage = usage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002526 local_tiling = tiling;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002527 countingStream->rewind();
2528 {
David Reveman9875f2c2019-06-11 21:47:12 -04002529 uint64_t cgen_var_149;
2530 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_149, 1);
2531 countingStream->write((uint64_t*)&cgen_var_149, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002532 countingStream->write((VkFormat*)&local_format, sizeof(VkFormat));
2533 countingStream->write((VkImageType*)&local_type, sizeof(VkImageType));
2534 countingStream->write((VkSampleCountFlagBits*)&local_samples, sizeof(VkSampleCountFlagBits));
2535 countingStream->write((VkImageUsageFlags*)&local_usage, sizeof(VkImageUsageFlags));
2536 countingStream->write((VkImageTiling*)&local_tiling, sizeof(VkImageTiling));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002537 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002538 uint64_t cgen_var_150 = (uint64_t)(uintptr_t)pPropertyCount;
2539 countingStream->putBe64(cgen_var_150);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002540 if (pPropertyCount)
2541 {
2542 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
2543 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002544 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002545 uint64_t cgen_var_151 = (uint64_t)(uintptr_t)pProperties;
2546 countingStream->putBe64(cgen_var_151);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002547 if (pProperties)
2548 {
2549 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
2550 {
2551 marshal_VkSparseImageFormatProperties(countingStream, (VkSparseImageFormatProperties*)(pProperties + i));
2552 }
2553 }
2554 }
2555 uint32_t packetSize_vkGetPhysicalDeviceSparseImageFormatProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2556 countingStream->rewind();
2557 uint32_t opcode_vkGetPhysicalDeviceSparseImageFormatProperties = OP_vkGetPhysicalDeviceSparseImageFormatProperties;
2558 stream->write(&opcode_vkGetPhysicalDeviceSparseImageFormatProperties, sizeof(uint32_t));
2559 stream->write(&packetSize_vkGetPhysicalDeviceSparseImageFormatProperties, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002560 uint64_t cgen_var_152;
2561 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_152, 1);
2562 stream->write((uint64_t*)&cgen_var_152, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002563 stream->write((VkFormat*)&local_format, sizeof(VkFormat));
2564 stream->write((VkImageType*)&local_type, sizeof(VkImageType));
2565 stream->write((VkSampleCountFlagBits*)&local_samples, sizeof(VkSampleCountFlagBits));
2566 stream->write((VkImageUsageFlags*)&local_usage, sizeof(VkImageUsageFlags));
2567 stream->write((VkImageTiling*)&local_tiling, sizeof(VkImageTiling));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002568 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002569 uint64_t cgen_var_153 = (uint64_t)(uintptr_t)pPropertyCount;
2570 stream->putBe64(cgen_var_153);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002571 if (pPropertyCount)
2572 {
2573 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
2574 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002575 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002576 uint64_t cgen_var_154 = (uint64_t)(uintptr_t)pProperties;
2577 stream->putBe64(cgen_var_154);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002578 if (pProperties)
2579 {
2580 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
2581 {
2582 marshal_VkSparseImageFormatProperties(stream, (VkSparseImageFormatProperties*)(pProperties + i));
2583 }
2584 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002585 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002586 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002587 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002588 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002589 if (pPropertyCount)
2590 {
2591 if (!(check_pPropertyCount))
2592 {
2593 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
2594 }
2595 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
2596 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002597 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002598 VkSparseImageFormatProperties* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002599 check_pProperties = (VkSparseImageFormatProperties*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002600 if (pProperties)
2601 {
2602 if (!(check_pProperties))
2603 {
2604 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
2605 }
2606 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
2607 {
2608 unmarshal_VkSparseImageFormatProperties(stream, (VkSparseImageFormatProperties*)(pProperties + i));
2609 }
2610 }
Lingfeng Yang97a06702018-12-24 17:02:43 -08002611 if (pProperties)
2612 {
2613 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
2614 {
2615 transform_fromhost_VkSparseImageFormatProperties(mImpl->resources(), (VkSparseImageFormatProperties*)(pProperties + i));
2616 }
2617 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002618 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07002619 pool->freeAll();
2620 countingStream->clearPool();
2621 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002622 mImpl->log("finish vkGetPhysicalDeviceSparseImageFormatProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002623}
2624
2625VkResult VkEncoder::vkQueueBindSparse(
2626 VkQueue queue,
2627 uint32_t bindInfoCount,
2628 const VkBindSparseInfo* pBindInfo,
2629 VkFence fence)
2630{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002631 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002632 AEMU_SCOPED_TRACE("vkQueueBindSparse encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002633 mImpl->log("start vkQueueBindSparse");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002634 auto stream = mImpl->stream();
2635 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002636 auto resources = mImpl->resources();
2637 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002638 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002639 VkQueue local_queue;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002640 uint32_t local_bindInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002641 VkBindSparseInfo* local_pBindInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002642 VkFence local_fence;
2643 local_queue = queue;
2644 local_bindInfoCount = bindInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002645 local_pBindInfo = nullptr;
2646 if (pBindInfo)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002647 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002648 local_pBindInfo = (VkBindSparseInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindSparseInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002649 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
2650 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002651 deepcopy_VkBindSparseInfo(pool, pBindInfo + i, (VkBindSparseInfo*)(local_pBindInfo + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002652 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002653 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002654 local_fence = fence;
Lingfeng Yang62b23322018-12-24 12:45:47 -08002655 if (local_pBindInfo)
2656 {
2657 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
2658 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08002659 transform_tohost_VkBindSparseInfo(mImpl->resources(), (VkBindSparseInfo*)(local_pBindInfo + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08002660 }
2661 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002662 countingStream->rewind();
2663 {
David Reveman9875f2c2019-06-11 21:47:12 -04002664 uint64_t cgen_var_157;
2665 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_157, 1);
2666 countingStream->write((uint64_t*)&cgen_var_157, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002667 countingStream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
2668 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
2669 {
2670 marshal_VkBindSparseInfo(countingStream, (VkBindSparseInfo*)(local_pBindInfo + i));
2671 }
David Reveman9875f2c2019-06-11 21:47:12 -04002672 uint64_t cgen_var_158;
2673 countingStream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_158, 1);
2674 countingStream->write((uint64_t*)&cgen_var_158, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002675 }
2676 uint32_t packetSize_vkQueueBindSparse = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2677 countingStream->rewind();
2678 uint32_t opcode_vkQueueBindSparse = OP_vkQueueBindSparse;
2679 stream->write(&opcode_vkQueueBindSparse, sizeof(uint32_t));
2680 stream->write(&packetSize_vkQueueBindSparse, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002681 uint64_t cgen_var_159;
2682 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_159, 1);
2683 stream->write((uint64_t*)&cgen_var_159, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002684 stream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002685 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
2686 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002687 marshal_VkBindSparseInfo(stream, (VkBindSparseInfo*)(local_pBindInfo + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002688 }
David Reveman9875f2c2019-06-11 21:47:12 -04002689 uint64_t cgen_var_160;
2690 stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_160, 1);
2691 stream->write((uint64_t*)&cgen_var_160, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002692 AEMU_SCOPED_TRACE("vkQueueBindSparse readParams");
2693 AEMU_SCOPED_TRACE("vkQueueBindSparse returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002694 VkResult vkQueueBindSparse_VkResult_return = (VkResult)0;
2695 stream->read(&vkQueueBindSparse_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07002696 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08002697 countingStream->clearPool();
2698 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002699 mImpl->log("finish vkQueueBindSparse");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002700 return vkQueueBindSparse_VkResult_return;
2701}
2702
2703VkResult VkEncoder::vkCreateFence(
2704 VkDevice device,
2705 const VkFenceCreateInfo* pCreateInfo,
2706 const VkAllocationCallbacks* pAllocator,
2707 VkFence* pFence)
2708{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002709 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002710 AEMU_SCOPED_TRACE("vkCreateFence encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002711 mImpl->log("start vkCreateFence");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002712 auto stream = mImpl->stream();
2713 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002714 auto resources = mImpl->resources();
2715 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002716 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002717 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002718 VkFenceCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002719 VkAllocationCallbacks* local_pAllocator;
2720 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002721 local_pCreateInfo = nullptr;
2722 if (pCreateInfo)
2723 {
2724 local_pCreateInfo = (VkFenceCreateInfo*)pool->alloc(sizeof(const VkFenceCreateInfo));
2725 deepcopy_VkFenceCreateInfo(pool, pCreateInfo, (VkFenceCreateInfo*)(local_pCreateInfo));
2726 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002727 local_pAllocator = nullptr;
2728 if (pAllocator)
2729 {
2730 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
2731 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
2732 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08002733 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08002734 if (local_pCreateInfo)
2735 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08002736 transform_tohost_VkFenceCreateInfo(mImpl->resources(), (VkFenceCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08002737 }
2738 if (local_pAllocator)
2739 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08002740 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08002741 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002742 countingStream->rewind();
2743 {
David Reveman9875f2c2019-06-11 21:47:12 -04002744 uint64_t cgen_var_161;
2745 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_161, 1);
2746 countingStream->write((uint64_t*)&cgen_var_161, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002747 marshal_VkFenceCreateInfo(countingStream, (VkFenceCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002748 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002749 uint64_t cgen_var_162 = (uint64_t)(uintptr_t)local_pAllocator;
2750 countingStream->putBe64(cgen_var_162);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002751 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002752 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002753 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002754 }
David Reveman9875f2c2019-06-11 21:47:12 -04002755 uint64_t cgen_var_163;
2756 countingStream->handleMapping()->mapHandles_VkFence_u64(pFence, &cgen_var_163, 1);
2757 countingStream->write((uint64_t*)&cgen_var_163, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002758 }
2759 uint32_t packetSize_vkCreateFence = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2760 countingStream->rewind();
2761 uint32_t opcode_vkCreateFence = OP_vkCreateFence;
2762 stream->write(&opcode_vkCreateFence, sizeof(uint32_t));
2763 stream->write(&packetSize_vkCreateFence, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002764 uint64_t cgen_var_164;
2765 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_164, 1);
2766 stream->write((uint64_t*)&cgen_var_164, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002767 marshal_VkFenceCreateInfo(stream, (VkFenceCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002768 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002769 uint64_t cgen_var_165 = (uint64_t)(uintptr_t)local_pAllocator;
2770 stream->putBe64(cgen_var_165);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002771 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002772 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002773 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002774 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08002775 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04002776 uint64_t cgen_var_166;
2777 stream->handleMapping()->mapHandles_VkFence_u64(pFence, &cgen_var_166, 1);
2778 stream->write((uint64_t*)&cgen_var_166, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08002779 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002780 AEMU_SCOPED_TRACE("vkCreateFence readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08002781 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04002782 uint64_t cgen_var_167;
2783 stream->read((uint64_t*)&cgen_var_167, 8);
2784 stream->handleMapping()->mapHandles_u64_VkFence(&cgen_var_167, (VkFence*)pFence, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08002785 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002786 AEMU_SCOPED_TRACE("vkCreateFence returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002787 VkResult vkCreateFence_VkResult_return = (VkResult)0;
2788 stream->read(&vkCreateFence_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07002789 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08002790 countingStream->clearPool();
2791 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002792 mImpl->log("finish vkCreateFence");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002793 return vkCreateFence_VkResult_return;
2794}
2795
2796void VkEncoder::vkDestroyFence(
2797 VkDevice device,
2798 VkFence fence,
2799 const VkAllocationCallbacks* pAllocator)
2800{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002801 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002802 AEMU_SCOPED_TRACE("vkDestroyFence encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002803 mImpl->log("start vkDestroyFence");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002804 auto stream = mImpl->stream();
2805 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002806 auto resources = mImpl->resources();
2807 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002808 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002809 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08002810 VkFence local_fence;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002811 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002812 local_device = device;
2813 local_fence = fence;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002814 local_pAllocator = nullptr;
2815 if (pAllocator)
2816 {
2817 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
2818 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
2819 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08002820 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08002821 if (local_pAllocator)
2822 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08002823 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08002824 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002825 countingStream->rewind();
2826 {
David Reveman9875f2c2019-06-11 21:47:12 -04002827 uint64_t cgen_var_168;
2828 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_168, 1);
2829 countingStream->write((uint64_t*)&cgen_var_168, 1 * 8);
2830 uint64_t cgen_var_169;
2831 countingStream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_169, 1);
2832 countingStream->write((uint64_t*)&cgen_var_169, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002833 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002834 uint64_t cgen_var_170 = (uint64_t)(uintptr_t)local_pAllocator;
2835 countingStream->putBe64(cgen_var_170);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002836 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002837 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002838 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002839 }
2840 }
2841 uint32_t packetSize_vkDestroyFence = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2842 countingStream->rewind();
2843 uint32_t opcode_vkDestroyFence = OP_vkDestroyFence;
2844 stream->write(&opcode_vkDestroyFence, sizeof(uint32_t));
2845 stream->write(&packetSize_vkDestroyFence, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002846 uint64_t cgen_var_171;
2847 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_171, 1);
2848 stream->write((uint64_t*)&cgen_var_171, 1 * 8);
2849 uint64_t cgen_var_172;
2850 stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_172, 1);
2851 stream->write((uint64_t*)&cgen_var_172, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08002852 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04002853 uint64_t cgen_var_173 = (uint64_t)(uintptr_t)local_pAllocator;
2854 stream->putBe64(cgen_var_173);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002855 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002856 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002857 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002858 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002859 AEMU_SCOPED_TRACE("vkDestroyFence readParams");
2860 AEMU_SCOPED_TRACE("vkDestroyFence returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002861 resources->destroyMapping()->mapHandles_VkFence((VkFence*)&fence);
Lingfeng Yang256f9252020-07-14 14:27:33 -07002862 pool->freeAll();
2863 countingStream->clearPool();
2864 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002865 mImpl->log("finish vkDestroyFence");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002866}
2867
2868VkResult VkEncoder::vkResetFences(
2869 VkDevice device,
2870 uint32_t fenceCount,
2871 const VkFence* pFences)
2872{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002873 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002874 AEMU_SCOPED_TRACE("vkResetFences encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002875 mImpl->log("start vkResetFences");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002876 auto stream = mImpl->stream();
2877 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002878 auto resources = mImpl->resources();
2879 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002880 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002881 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002882 uint32_t local_fenceCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002883 VkFence* local_pFences;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002884 local_device = device;
2885 local_fenceCount = fenceCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002886 local_pFences = nullptr;
2887 if (pFences)
2888 {
2889 local_pFences = (VkFence*)pool->dupArray(pFences, ((fenceCount)) * sizeof(const VkFence));
2890 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002891 countingStream->rewind();
2892 {
David Reveman9875f2c2019-06-11 21:47:12 -04002893 uint64_t cgen_var_174;
2894 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_174, 1);
2895 countingStream->write((uint64_t*)&cgen_var_174, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002896 countingStream->write((uint32_t*)&local_fenceCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08002897 if (((fenceCount)))
2898 {
David Reveman9875f2c2019-06-11 21:47:12 -04002899 uint64_t* cgen_var_175;
2900 countingStream->alloc((void**)&cgen_var_175, ((fenceCount)) * 8);
2901 countingStream->handleMapping()->mapHandles_VkFence_u64(local_pFences, cgen_var_175, ((fenceCount)));
2902 countingStream->write((uint64_t*)cgen_var_175, ((fenceCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08002903 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002904 }
2905 uint32_t packetSize_vkResetFences = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2906 countingStream->rewind();
2907 uint32_t opcode_vkResetFences = OP_vkResetFences;
2908 stream->write(&opcode_vkResetFences, sizeof(uint32_t));
2909 stream->write(&packetSize_vkResetFences, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002910 uint64_t cgen_var_176;
2911 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_176, 1);
2912 stream->write((uint64_t*)&cgen_var_176, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002913 stream->write((uint32_t*)&local_fenceCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08002914 if (((fenceCount)))
2915 {
David Reveman9875f2c2019-06-11 21:47:12 -04002916 uint64_t* cgen_var_177;
2917 stream->alloc((void**)&cgen_var_177, ((fenceCount)) * 8);
2918 stream->handleMapping()->mapHandles_VkFence_u64(local_pFences, cgen_var_177, ((fenceCount)));
2919 stream->write((uint64_t*)cgen_var_177, ((fenceCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08002920 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002921 AEMU_SCOPED_TRACE("vkResetFences readParams");
2922 AEMU_SCOPED_TRACE("vkResetFences returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002923 VkResult vkResetFences_VkResult_return = (VkResult)0;
2924 stream->read(&vkResetFences_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07002925 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08002926 countingStream->clearPool();
2927 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002928 mImpl->log("finish vkResetFences");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002929 return vkResetFences_VkResult_return;
2930}
2931
2932VkResult VkEncoder::vkGetFenceStatus(
2933 VkDevice device,
2934 VkFence fence)
2935{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002936 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002937 AEMU_SCOPED_TRACE("vkGetFenceStatus encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002938 mImpl->log("start vkGetFenceStatus");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002939 auto stream = mImpl->stream();
2940 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002941 auto resources = mImpl->resources();
2942 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002943 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002944 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002945 VkFence local_fence;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002946 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002947 local_fence = fence;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002948 countingStream->rewind();
2949 {
David Reveman9875f2c2019-06-11 21:47:12 -04002950 uint64_t cgen_var_178;
2951 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_178, 1);
2952 countingStream->write((uint64_t*)&cgen_var_178, 1 * 8);
2953 uint64_t cgen_var_179;
2954 countingStream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_179, 1);
2955 countingStream->write((uint64_t*)&cgen_var_179, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002956 }
2957 uint32_t packetSize_vkGetFenceStatus = 4 + 4 + (uint32_t)countingStream->bytesWritten();
2958 countingStream->rewind();
2959 uint32_t opcode_vkGetFenceStatus = OP_vkGetFenceStatus;
2960 stream->write(&opcode_vkGetFenceStatus, sizeof(uint32_t));
2961 stream->write(&packetSize_vkGetFenceStatus, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04002962 uint64_t cgen_var_180;
2963 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_180, 1);
2964 stream->write((uint64_t*)&cgen_var_180, 1 * 8);
2965 uint64_t cgen_var_181;
2966 stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_181, 1);
2967 stream->write((uint64_t*)&cgen_var_181, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002968 AEMU_SCOPED_TRACE("vkGetFenceStatus readParams");
2969 AEMU_SCOPED_TRACE("vkGetFenceStatus returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002970 VkResult vkGetFenceStatus_VkResult_return = (VkResult)0;
2971 stream->read(&vkGetFenceStatus_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07002972 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08002973 countingStream->clearPool();
2974 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002975 mImpl->log("finish vkGetFenceStatus");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002976 return vkGetFenceStatus_VkResult_return;
2977}
2978
2979VkResult VkEncoder::vkWaitForFences(
2980 VkDevice device,
2981 uint32_t fenceCount,
2982 const VkFence* pFences,
2983 VkBool32 waitAll,
2984 uint64_t timeout)
2985{
Lingfeng Yang256f9252020-07-14 14:27:33 -07002986 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08002987 AEMU_SCOPED_TRACE("vkWaitForFences encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08002988 mImpl->log("start vkWaitForFences");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07002989 auto stream = mImpl->stream();
2990 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002991 auto resources = mImpl->resources();
2992 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08002993 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002994 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002995 uint32_t local_fenceCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08002996 VkFence* local_pFences;
Lingfeng Yang9666b852018-11-13 23:09:59 -08002997 VkBool32 local_waitAll;
2998 uint64_t local_timeout;
2999 local_device = device;
3000 local_fenceCount = fenceCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003001 local_pFences = nullptr;
3002 if (pFences)
3003 {
3004 local_pFences = (VkFence*)pool->dupArray(pFences, ((fenceCount)) * sizeof(const VkFence));
3005 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003006 local_waitAll = waitAll;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003007 local_timeout = timeout;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003008 countingStream->rewind();
3009 {
David Reveman9875f2c2019-06-11 21:47:12 -04003010 uint64_t cgen_var_182;
3011 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_182, 1);
3012 countingStream->write((uint64_t*)&cgen_var_182, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003013 countingStream->write((uint32_t*)&local_fenceCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08003014 if (((fenceCount)))
3015 {
David Reveman9875f2c2019-06-11 21:47:12 -04003016 uint64_t* cgen_var_183;
3017 countingStream->alloc((void**)&cgen_var_183, ((fenceCount)) * 8);
3018 countingStream->handleMapping()->mapHandles_VkFence_u64(local_pFences, cgen_var_183, ((fenceCount)));
3019 countingStream->write((uint64_t*)cgen_var_183, ((fenceCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08003020 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003021 countingStream->write((VkBool32*)&local_waitAll, sizeof(VkBool32));
3022 countingStream->write((uint64_t*)&local_timeout, sizeof(uint64_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003023 }
3024 uint32_t packetSize_vkWaitForFences = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3025 countingStream->rewind();
3026 uint32_t opcode_vkWaitForFences = OP_vkWaitForFences;
3027 stream->write(&opcode_vkWaitForFences, sizeof(uint32_t));
3028 stream->write(&packetSize_vkWaitForFences, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003029 uint64_t cgen_var_184;
3030 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_184, 1);
3031 stream->write((uint64_t*)&cgen_var_184, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003032 stream->write((uint32_t*)&local_fenceCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08003033 if (((fenceCount)))
3034 {
David Reveman9875f2c2019-06-11 21:47:12 -04003035 uint64_t* cgen_var_185;
3036 stream->alloc((void**)&cgen_var_185, ((fenceCount)) * 8);
3037 stream->handleMapping()->mapHandles_VkFence_u64(local_pFences, cgen_var_185, ((fenceCount)));
3038 stream->write((uint64_t*)cgen_var_185, ((fenceCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08003039 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003040 stream->write((VkBool32*)&local_waitAll, sizeof(VkBool32));
3041 stream->write((uint64_t*)&local_timeout, sizeof(uint64_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003042 AEMU_SCOPED_TRACE("vkWaitForFences readParams");
3043 AEMU_SCOPED_TRACE("vkWaitForFences returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003044 VkResult vkWaitForFences_VkResult_return = (VkResult)0;
3045 stream->read(&vkWaitForFences_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07003046 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08003047 countingStream->clearPool();
3048 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003049 mImpl->log("finish vkWaitForFences");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003050 return vkWaitForFences_VkResult_return;
3051}
3052
3053VkResult VkEncoder::vkCreateSemaphore(
3054 VkDevice device,
3055 const VkSemaphoreCreateInfo* pCreateInfo,
3056 const VkAllocationCallbacks* pAllocator,
3057 VkSemaphore* pSemaphore)
3058{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003059 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003060 AEMU_SCOPED_TRACE("vkCreateSemaphore encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003061 mImpl->log("start vkCreateSemaphore");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003062 auto stream = mImpl->stream();
3063 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003064 auto resources = mImpl->resources();
3065 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003066 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003067 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003068 VkSemaphoreCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003069 VkAllocationCallbacks* local_pAllocator;
3070 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003071 local_pCreateInfo = nullptr;
3072 if (pCreateInfo)
3073 {
3074 local_pCreateInfo = (VkSemaphoreCreateInfo*)pool->alloc(sizeof(const VkSemaphoreCreateInfo));
3075 deepcopy_VkSemaphoreCreateInfo(pool, pCreateInfo, (VkSemaphoreCreateInfo*)(local_pCreateInfo));
3076 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003077 local_pAllocator = nullptr;
3078 if (pAllocator)
3079 {
3080 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3081 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
3082 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003083 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08003084 if (local_pCreateInfo)
3085 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003086 transform_tohost_VkSemaphoreCreateInfo(mImpl->resources(), (VkSemaphoreCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003087 }
3088 if (local_pAllocator)
3089 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003090 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003091 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003092 countingStream->rewind();
3093 {
David Reveman9875f2c2019-06-11 21:47:12 -04003094 uint64_t cgen_var_186;
3095 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_186, 1);
3096 countingStream->write((uint64_t*)&cgen_var_186, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003097 marshal_VkSemaphoreCreateInfo(countingStream, (VkSemaphoreCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003098 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003099 uint64_t cgen_var_187 = (uint64_t)(uintptr_t)local_pAllocator;
3100 countingStream->putBe64(cgen_var_187);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003101 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003102 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003103 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003104 }
David Reveman9875f2c2019-06-11 21:47:12 -04003105 uint64_t cgen_var_188;
3106 countingStream->handleMapping()->mapHandles_VkSemaphore_u64(pSemaphore, &cgen_var_188, 1);
3107 countingStream->write((uint64_t*)&cgen_var_188, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003108 }
3109 uint32_t packetSize_vkCreateSemaphore = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3110 countingStream->rewind();
3111 uint32_t opcode_vkCreateSemaphore = OP_vkCreateSemaphore;
3112 stream->write(&opcode_vkCreateSemaphore, sizeof(uint32_t));
3113 stream->write(&packetSize_vkCreateSemaphore, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003114 uint64_t cgen_var_189;
3115 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_189, 1);
3116 stream->write((uint64_t*)&cgen_var_189, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003117 marshal_VkSemaphoreCreateInfo(stream, (VkSemaphoreCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003118 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003119 uint64_t cgen_var_190 = (uint64_t)(uintptr_t)local_pAllocator;
3120 stream->putBe64(cgen_var_190);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003121 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003122 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003123 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003124 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08003125 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04003126 uint64_t cgen_var_191;
3127 stream->handleMapping()->mapHandles_VkSemaphore_u64(pSemaphore, &cgen_var_191, 1);
3128 stream->write((uint64_t*)&cgen_var_191, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08003129 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003130 AEMU_SCOPED_TRACE("vkCreateSemaphore readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08003131 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04003132 uint64_t cgen_var_192;
3133 stream->read((uint64_t*)&cgen_var_192, 8);
3134 stream->handleMapping()->mapHandles_u64_VkSemaphore(&cgen_var_192, (VkSemaphore*)pSemaphore, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08003135 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003136 AEMU_SCOPED_TRACE("vkCreateSemaphore returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003137 VkResult vkCreateSemaphore_VkResult_return = (VkResult)0;
3138 stream->read(&vkCreateSemaphore_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07003139 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08003140 countingStream->clearPool();
3141 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003142 mImpl->log("finish vkCreateSemaphore");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003143 return vkCreateSemaphore_VkResult_return;
3144}
3145
3146void VkEncoder::vkDestroySemaphore(
3147 VkDevice device,
3148 VkSemaphore semaphore,
3149 const VkAllocationCallbacks* pAllocator)
3150{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003151 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003152 AEMU_SCOPED_TRACE("vkDestroySemaphore encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003153 mImpl->log("start vkDestroySemaphore");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003154 auto stream = mImpl->stream();
3155 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003156 auto resources = mImpl->resources();
3157 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003158 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003159 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003160 VkSemaphore local_semaphore;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003161 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003162 local_device = device;
3163 local_semaphore = semaphore;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003164 local_pAllocator = nullptr;
3165 if (pAllocator)
3166 {
3167 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3168 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
3169 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003170 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08003171 if (local_pAllocator)
3172 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003173 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003174 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003175 countingStream->rewind();
3176 {
David Reveman9875f2c2019-06-11 21:47:12 -04003177 uint64_t cgen_var_193;
3178 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_193, 1);
3179 countingStream->write((uint64_t*)&cgen_var_193, 1 * 8);
3180 uint64_t cgen_var_194;
3181 countingStream->handleMapping()->mapHandles_VkSemaphore_u64(&local_semaphore, &cgen_var_194, 1);
3182 countingStream->write((uint64_t*)&cgen_var_194, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003183 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003184 uint64_t cgen_var_195 = (uint64_t)(uintptr_t)local_pAllocator;
3185 countingStream->putBe64(cgen_var_195);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003186 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003187 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003188 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003189 }
3190 }
3191 uint32_t packetSize_vkDestroySemaphore = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3192 countingStream->rewind();
3193 uint32_t opcode_vkDestroySemaphore = OP_vkDestroySemaphore;
3194 stream->write(&opcode_vkDestroySemaphore, sizeof(uint32_t));
3195 stream->write(&packetSize_vkDestroySemaphore, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003196 uint64_t cgen_var_196;
3197 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_196, 1);
3198 stream->write((uint64_t*)&cgen_var_196, 1 * 8);
3199 uint64_t cgen_var_197;
3200 stream->handleMapping()->mapHandles_VkSemaphore_u64(&local_semaphore, &cgen_var_197, 1);
3201 stream->write((uint64_t*)&cgen_var_197, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003202 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003203 uint64_t cgen_var_198 = (uint64_t)(uintptr_t)local_pAllocator;
3204 stream->putBe64(cgen_var_198);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003205 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003206 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003207 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003208 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003209 AEMU_SCOPED_TRACE("vkDestroySemaphore readParams");
3210 AEMU_SCOPED_TRACE("vkDestroySemaphore returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003211 resources->destroyMapping()->mapHandles_VkSemaphore((VkSemaphore*)&semaphore);
Lingfeng Yang256f9252020-07-14 14:27:33 -07003212 pool->freeAll();
3213 countingStream->clearPool();
3214 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003215 mImpl->log("finish vkDestroySemaphore");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003216}
3217
3218VkResult VkEncoder::vkCreateEvent(
3219 VkDevice device,
3220 const VkEventCreateInfo* pCreateInfo,
3221 const VkAllocationCallbacks* pAllocator,
3222 VkEvent* pEvent)
3223{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003224 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003225 AEMU_SCOPED_TRACE("vkCreateEvent encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003226 mImpl->log("start vkCreateEvent");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003227 auto stream = mImpl->stream();
3228 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003229 auto resources = mImpl->resources();
3230 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003231 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003232 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003233 VkEventCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003234 VkAllocationCallbacks* local_pAllocator;
3235 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003236 local_pCreateInfo = nullptr;
3237 if (pCreateInfo)
3238 {
3239 local_pCreateInfo = (VkEventCreateInfo*)pool->alloc(sizeof(const VkEventCreateInfo));
3240 deepcopy_VkEventCreateInfo(pool, pCreateInfo, (VkEventCreateInfo*)(local_pCreateInfo));
3241 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003242 local_pAllocator = nullptr;
3243 if (pAllocator)
3244 {
3245 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3246 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
3247 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003248 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08003249 if (local_pCreateInfo)
3250 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003251 transform_tohost_VkEventCreateInfo(mImpl->resources(), (VkEventCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003252 }
3253 if (local_pAllocator)
3254 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003255 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003256 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003257 countingStream->rewind();
3258 {
David Reveman9875f2c2019-06-11 21:47:12 -04003259 uint64_t cgen_var_199;
3260 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_199, 1);
3261 countingStream->write((uint64_t*)&cgen_var_199, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003262 marshal_VkEventCreateInfo(countingStream, (VkEventCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003263 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003264 uint64_t cgen_var_200 = (uint64_t)(uintptr_t)local_pAllocator;
3265 countingStream->putBe64(cgen_var_200);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003266 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003267 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003268 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003269 }
David Reveman9875f2c2019-06-11 21:47:12 -04003270 uint64_t cgen_var_201;
3271 countingStream->handleMapping()->mapHandles_VkEvent_u64(pEvent, &cgen_var_201, 1);
3272 countingStream->write((uint64_t*)&cgen_var_201, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003273 }
3274 uint32_t packetSize_vkCreateEvent = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3275 countingStream->rewind();
3276 uint32_t opcode_vkCreateEvent = OP_vkCreateEvent;
3277 stream->write(&opcode_vkCreateEvent, sizeof(uint32_t));
3278 stream->write(&packetSize_vkCreateEvent, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003279 uint64_t cgen_var_202;
3280 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_202, 1);
3281 stream->write((uint64_t*)&cgen_var_202, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003282 marshal_VkEventCreateInfo(stream, (VkEventCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003283 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003284 uint64_t cgen_var_203 = (uint64_t)(uintptr_t)local_pAllocator;
3285 stream->putBe64(cgen_var_203);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003286 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003287 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003288 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003289 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08003290 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04003291 uint64_t cgen_var_204;
3292 stream->handleMapping()->mapHandles_VkEvent_u64(pEvent, &cgen_var_204, 1);
3293 stream->write((uint64_t*)&cgen_var_204, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08003294 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003295 AEMU_SCOPED_TRACE("vkCreateEvent readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08003296 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04003297 uint64_t cgen_var_205;
3298 stream->read((uint64_t*)&cgen_var_205, 8);
3299 stream->handleMapping()->mapHandles_u64_VkEvent(&cgen_var_205, (VkEvent*)pEvent, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08003300 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003301 AEMU_SCOPED_TRACE("vkCreateEvent returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003302 VkResult vkCreateEvent_VkResult_return = (VkResult)0;
3303 stream->read(&vkCreateEvent_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07003304 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08003305 countingStream->clearPool();
3306 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003307 mImpl->log("finish vkCreateEvent");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003308 return vkCreateEvent_VkResult_return;
3309}
3310
3311void VkEncoder::vkDestroyEvent(
3312 VkDevice device,
3313 VkEvent event,
3314 const VkAllocationCallbacks* pAllocator)
3315{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003316 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003317 AEMU_SCOPED_TRACE("vkDestroyEvent encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003318 mImpl->log("start vkDestroyEvent");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003319 auto stream = mImpl->stream();
3320 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003321 auto resources = mImpl->resources();
3322 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003323 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003324 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003325 VkEvent local_event;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003326 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003327 local_device = device;
3328 local_event = event;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003329 local_pAllocator = nullptr;
3330 if (pAllocator)
3331 {
3332 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3333 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
3334 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003335 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08003336 if (local_pAllocator)
3337 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003338 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003339 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003340 countingStream->rewind();
3341 {
David Reveman9875f2c2019-06-11 21:47:12 -04003342 uint64_t cgen_var_206;
3343 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_206, 1);
3344 countingStream->write((uint64_t*)&cgen_var_206, 1 * 8);
3345 uint64_t cgen_var_207;
3346 countingStream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_207, 1);
3347 countingStream->write((uint64_t*)&cgen_var_207, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003348 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003349 uint64_t cgen_var_208 = (uint64_t)(uintptr_t)local_pAllocator;
3350 countingStream->putBe64(cgen_var_208);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003351 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003352 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003353 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003354 }
3355 }
3356 uint32_t packetSize_vkDestroyEvent = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3357 countingStream->rewind();
3358 uint32_t opcode_vkDestroyEvent = OP_vkDestroyEvent;
3359 stream->write(&opcode_vkDestroyEvent, sizeof(uint32_t));
3360 stream->write(&packetSize_vkDestroyEvent, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003361 uint64_t cgen_var_209;
3362 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_209, 1);
3363 stream->write((uint64_t*)&cgen_var_209, 1 * 8);
3364 uint64_t cgen_var_210;
3365 stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_210, 1);
3366 stream->write((uint64_t*)&cgen_var_210, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003367 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003368 uint64_t cgen_var_211 = (uint64_t)(uintptr_t)local_pAllocator;
3369 stream->putBe64(cgen_var_211);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003370 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003371 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003372 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003373 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003374 AEMU_SCOPED_TRACE("vkDestroyEvent readParams");
3375 AEMU_SCOPED_TRACE("vkDestroyEvent returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003376 resources->destroyMapping()->mapHandles_VkEvent((VkEvent*)&event);
Lingfeng Yang256f9252020-07-14 14:27:33 -07003377 pool->freeAll();
3378 countingStream->clearPool();
3379 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003380 mImpl->log("finish vkDestroyEvent");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003381}
3382
3383VkResult VkEncoder::vkGetEventStatus(
3384 VkDevice device,
3385 VkEvent event)
3386{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003387 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003388 AEMU_SCOPED_TRACE("vkGetEventStatus encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003389 mImpl->log("start vkGetEventStatus");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003390 auto stream = mImpl->stream();
3391 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003392 auto resources = mImpl->resources();
3393 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003394 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003395 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003396 VkEvent local_event;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003397 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003398 local_event = event;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003399 countingStream->rewind();
3400 {
David Reveman9875f2c2019-06-11 21:47:12 -04003401 uint64_t cgen_var_212;
3402 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_212, 1);
3403 countingStream->write((uint64_t*)&cgen_var_212, 1 * 8);
3404 uint64_t cgen_var_213;
3405 countingStream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_213, 1);
3406 countingStream->write((uint64_t*)&cgen_var_213, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003407 }
3408 uint32_t packetSize_vkGetEventStatus = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3409 countingStream->rewind();
3410 uint32_t opcode_vkGetEventStatus = OP_vkGetEventStatus;
3411 stream->write(&opcode_vkGetEventStatus, sizeof(uint32_t));
3412 stream->write(&packetSize_vkGetEventStatus, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003413 uint64_t cgen_var_214;
3414 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_214, 1);
3415 stream->write((uint64_t*)&cgen_var_214, 1 * 8);
3416 uint64_t cgen_var_215;
3417 stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_215, 1);
3418 stream->write((uint64_t*)&cgen_var_215, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003419 AEMU_SCOPED_TRACE("vkGetEventStatus readParams");
3420 AEMU_SCOPED_TRACE("vkGetEventStatus returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003421 VkResult vkGetEventStatus_VkResult_return = (VkResult)0;
3422 stream->read(&vkGetEventStatus_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07003423 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08003424 countingStream->clearPool();
3425 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003426 mImpl->log("finish vkGetEventStatus");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003427 return vkGetEventStatus_VkResult_return;
3428}
3429
3430VkResult VkEncoder::vkSetEvent(
3431 VkDevice device,
3432 VkEvent event)
3433{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003434 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003435 AEMU_SCOPED_TRACE("vkSetEvent encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003436 mImpl->log("start vkSetEvent");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003437 auto stream = mImpl->stream();
3438 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003439 auto resources = mImpl->resources();
3440 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003441 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003442 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003443 VkEvent local_event;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003444 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003445 local_event = event;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003446 countingStream->rewind();
3447 {
David Reveman9875f2c2019-06-11 21:47:12 -04003448 uint64_t cgen_var_216;
3449 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_216, 1);
3450 countingStream->write((uint64_t*)&cgen_var_216, 1 * 8);
3451 uint64_t cgen_var_217;
3452 countingStream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_217, 1);
3453 countingStream->write((uint64_t*)&cgen_var_217, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003454 }
3455 uint32_t packetSize_vkSetEvent = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3456 countingStream->rewind();
3457 uint32_t opcode_vkSetEvent = OP_vkSetEvent;
3458 stream->write(&opcode_vkSetEvent, sizeof(uint32_t));
3459 stream->write(&packetSize_vkSetEvent, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003460 uint64_t cgen_var_218;
3461 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_218, 1);
3462 stream->write((uint64_t*)&cgen_var_218, 1 * 8);
3463 uint64_t cgen_var_219;
3464 stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_219, 1);
3465 stream->write((uint64_t*)&cgen_var_219, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003466 AEMU_SCOPED_TRACE("vkSetEvent readParams");
3467 AEMU_SCOPED_TRACE("vkSetEvent returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003468 VkResult vkSetEvent_VkResult_return = (VkResult)0;
3469 stream->read(&vkSetEvent_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07003470 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08003471 countingStream->clearPool();
3472 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003473 mImpl->log("finish vkSetEvent");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003474 return vkSetEvent_VkResult_return;
3475}
3476
3477VkResult VkEncoder::vkResetEvent(
3478 VkDevice device,
3479 VkEvent event)
3480{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003481 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003482 AEMU_SCOPED_TRACE("vkResetEvent encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003483 mImpl->log("start vkResetEvent");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003484 auto stream = mImpl->stream();
3485 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003486 auto resources = mImpl->resources();
3487 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003488 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003489 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003490 VkEvent local_event;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003491 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003492 local_event = event;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003493 countingStream->rewind();
3494 {
David Reveman9875f2c2019-06-11 21:47:12 -04003495 uint64_t cgen_var_220;
3496 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_220, 1);
3497 countingStream->write((uint64_t*)&cgen_var_220, 1 * 8);
3498 uint64_t cgen_var_221;
3499 countingStream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_221, 1);
3500 countingStream->write((uint64_t*)&cgen_var_221, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003501 }
3502 uint32_t packetSize_vkResetEvent = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3503 countingStream->rewind();
3504 uint32_t opcode_vkResetEvent = OP_vkResetEvent;
3505 stream->write(&opcode_vkResetEvent, sizeof(uint32_t));
3506 stream->write(&packetSize_vkResetEvent, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003507 uint64_t cgen_var_222;
3508 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_222, 1);
3509 stream->write((uint64_t*)&cgen_var_222, 1 * 8);
3510 uint64_t cgen_var_223;
3511 stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_223, 1);
3512 stream->write((uint64_t*)&cgen_var_223, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003513 AEMU_SCOPED_TRACE("vkResetEvent readParams");
3514 AEMU_SCOPED_TRACE("vkResetEvent returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003515 VkResult vkResetEvent_VkResult_return = (VkResult)0;
3516 stream->read(&vkResetEvent_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07003517 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08003518 countingStream->clearPool();
3519 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003520 mImpl->log("finish vkResetEvent");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003521 return vkResetEvent_VkResult_return;
3522}
3523
3524VkResult VkEncoder::vkCreateQueryPool(
3525 VkDevice device,
3526 const VkQueryPoolCreateInfo* pCreateInfo,
3527 const VkAllocationCallbacks* pAllocator,
3528 VkQueryPool* pQueryPool)
3529{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003530 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003531 AEMU_SCOPED_TRACE("vkCreateQueryPool encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003532 mImpl->log("start vkCreateQueryPool");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003533 auto stream = mImpl->stream();
3534 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003535 auto resources = mImpl->resources();
3536 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003537 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003538 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003539 VkQueryPoolCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003540 VkAllocationCallbacks* local_pAllocator;
3541 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003542 local_pCreateInfo = nullptr;
3543 if (pCreateInfo)
3544 {
3545 local_pCreateInfo = (VkQueryPoolCreateInfo*)pool->alloc(sizeof(const VkQueryPoolCreateInfo));
3546 deepcopy_VkQueryPoolCreateInfo(pool, pCreateInfo, (VkQueryPoolCreateInfo*)(local_pCreateInfo));
3547 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003548 local_pAllocator = nullptr;
3549 if (pAllocator)
3550 {
3551 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3552 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
3553 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003554 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08003555 if (local_pCreateInfo)
3556 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003557 transform_tohost_VkQueryPoolCreateInfo(mImpl->resources(), (VkQueryPoolCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003558 }
3559 if (local_pAllocator)
3560 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003561 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003562 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003563 countingStream->rewind();
3564 {
David Reveman9875f2c2019-06-11 21:47:12 -04003565 uint64_t cgen_var_224;
3566 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_224, 1);
3567 countingStream->write((uint64_t*)&cgen_var_224, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003568 marshal_VkQueryPoolCreateInfo(countingStream, (VkQueryPoolCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003569 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003570 uint64_t cgen_var_225 = (uint64_t)(uintptr_t)local_pAllocator;
3571 countingStream->putBe64(cgen_var_225);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003572 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003573 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003574 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003575 }
David Reveman9875f2c2019-06-11 21:47:12 -04003576 uint64_t cgen_var_226;
3577 countingStream->handleMapping()->mapHandles_VkQueryPool_u64(pQueryPool, &cgen_var_226, 1);
3578 countingStream->write((uint64_t*)&cgen_var_226, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003579 }
3580 uint32_t packetSize_vkCreateQueryPool = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3581 countingStream->rewind();
3582 uint32_t opcode_vkCreateQueryPool = OP_vkCreateQueryPool;
3583 stream->write(&opcode_vkCreateQueryPool, sizeof(uint32_t));
3584 stream->write(&packetSize_vkCreateQueryPool, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003585 uint64_t cgen_var_227;
3586 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_227, 1);
3587 stream->write((uint64_t*)&cgen_var_227, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003588 marshal_VkQueryPoolCreateInfo(stream, (VkQueryPoolCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003589 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003590 uint64_t cgen_var_228 = (uint64_t)(uintptr_t)local_pAllocator;
3591 stream->putBe64(cgen_var_228);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003592 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003593 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003594 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003595 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08003596 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04003597 uint64_t cgen_var_229;
3598 stream->handleMapping()->mapHandles_VkQueryPool_u64(pQueryPool, &cgen_var_229, 1);
3599 stream->write((uint64_t*)&cgen_var_229, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08003600 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003601 AEMU_SCOPED_TRACE("vkCreateQueryPool readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08003602 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04003603 uint64_t cgen_var_230;
3604 stream->read((uint64_t*)&cgen_var_230, 8);
3605 stream->handleMapping()->mapHandles_u64_VkQueryPool(&cgen_var_230, (VkQueryPool*)pQueryPool, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08003606 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003607 AEMU_SCOPED_TRACE("vkCreateQueryPool returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003608 VkResult vkCreateQueryPool_VkResult_return = (VkResult)0;
3609 stream->read(&vkCreateQueryPool_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07003610 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08003611 countingStream->clearPool();
3612 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003613 mImpl->log("finish vkCreateQueryPool");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003614 return vkCreateQueryPool_VkResult_return;
3615}
3616
3617void VkEncoder::vkDestroyQueryPool(
3618 VkDevice device,
3619 VkQueryPool queryPool,
3620 const VkAllocationCallbacks* pAllocator)
3621{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003622 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003623 AEMU_SCOPED_TRACE("vkDestroyQueryPool encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003624 mImpl->log("start vkDestroyQueryPool");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003625 auto stream = mImpl->stream();
3626 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003627 auto resources = mImpl->resources();
3628 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003629 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003630 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003631 VkQueryPool local_queryPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003632 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003633 local_device = device;
3634 local_queryPool = queryPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003635 local_pAllocator = nullptr;
3636 if (pAllocator)
3637 {
3638 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3639 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
3640 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003641 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08003642 if (local_pAllocator)
3643 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003644 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003645 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003646 countingStream->rewind();
3647 {
David Reveman9875f2c2019-06-11 21:47:12 -04003648 uint64_t cgen_var_231;
3649 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_231, 1);
3650 countingStream->write((uint64_t*)&cgen_var_231, 1 * 8);
3651 uint64_t cgen_var_232;
3652 countingStream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_232, 1);
3653 countingStream->write((uint64_t*)&cgen_var_232, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003654 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003655 uint64_t cgen_var_233 = (uint64_t)(uintptr_t)local_pAllocator;
3656 countingStream->putBe64(cgen_var_233);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003657 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003658 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003659 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003660 }
3661 }
3662 uint32_t packetSize_vkDestroyQueryPool = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3663 countingStream->rewind();
3664 uint32_t opcode_vkDestroyQueryPool = OP_vkDestroyQueryPool;
3665 stream->write(&opcode_vkDestroyQueryPool, sizeof(uint32_t));
3666 stream->write(&packetSize_vkDestroyQueryPool, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003667 uint64_t cgen_var_234;
3668 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_234, 1);
3669 stream->write((uint64_t*)&cgen_var_234, 1 * 8);
3670 uint64_t cgen_var_235;
3671 stream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_235, 1);
3672 stream->write((uint64_t*)&cgen_var_235, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003673 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003674 uint64_t cgen_var_236 = (uint64_t)(uintptr_t)local_pAllocator;
3675 stream->putBe64(cgen_var_236);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003676 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003677 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003678 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003679 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003680 AEMU_SCOPED_TRACE("vkDestroyQueryPool readParams");
3681 AEMU_SCOPED_TRACE("vkDestroyQueryPool returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003682 resources->destroyMapping()->mapHandles_VkQueryPool((VkQueryPool*)&queryPool);
Lingfeng Yang256f9252020-07-14 14:27:33 -07003683 pool->freeAll();
3684 countingStream->clearPool();
3685 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003686 mImpl->log("finish vkDestroyQueryPool");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003687}
3688
3689VkResult VkEncoder::vkGetQueryPoolResults(
3690 VkDevice device,
3691 VkQueryPool queryPool,
3692 uint32_t firstQuery,
3693 uint32_t queryCount,
3694 size_t dataSize,
3695 void* pData,
3696 VkDeviceSize stride,
3697 VkQueryResultFlags flags)
3698{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003699 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003700 AEMU_SCOPED_TRACE("vkGetQueryPoolResults encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003701 mImpl->log("start vkGetQueryPoolResults");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003702 auto stream = mImpl->stream();
3703 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003704 auto resources = mImpl->resources();
3705 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003706 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003707 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003708 VkQueryPool local_queryPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003709 uint32_t local_firstQuery;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003710 uint32_t local_queryCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003711 size_t local_dataSize;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003712 VkDeviceSize local_stride;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003713 VkQueryResultFlags local_flags;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003714 local_device = device;
3715 local_queryPool = queryPool;
3716 local_firstQuery = firstQuery;
3717 local_queryCount = queryCount;
3718 local_dataSize = dataSize;
3719 local_stride = stride;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003720 local_flags = flags;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003721 countingStream->rewind();
3722 {
David Reveman9875f2c2019-06-11 21:47:12 -04003723 uint64_t cgen_var_237;
3724 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_237, 1);
3725 countingStream->write((uint64_t*)&cgen_var_237, 1 * 8);
3726 uint64_t cgen_var_238;
3727 countingStream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_238, 1);
3728 countingStream->write((uint64_t*)&cgen_var_238, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003729 countingStream->write((uint32_t*)&local_firstQuery, sizeof(uint32_t));
3730 countingStream->write((uint32_t*)&local_queryCount, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003731 uint64_t cgen_var_239 = (uint64_t)local_dataSize;
3732 countingStream->putBe64(cgen_var_239);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003733 countingStream->write((void*)pData, ((dataSize)) * sizeof(uint8_t));
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003734 countingStream->write((VkDeviceSize*)&local_stride, sizeof(VkDeviceSize));
3735 countingStream->write((VkQueryResultFlags*)&local_flags, sizeof(VkQueryResultFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003736 }
3737 uint32_t packetSize_vkGetQueryPoolResults = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3738 countingStream->rewind();
3739 uint32_t opcode_vkGetQueryPoolResults = OP_vkGetQueryPoolResults;
3740 stream->write(&opcode_vkGetQueryPoolResults, sizeof(uint32_t));
3741 stream->write(&packetSize_vkGetQueryPoolResults, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003742 uint64_t cgen_var_240;
3743 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_240, 1);
3744 stream->write((uint64_t*)&cgen_var_240, 1 * 8);
3745 uint64_t cgen_var_241;
3746 stream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_241, 1);
3747 stream->write((uint64_t*)&cgen_var_241, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003748 stream->write((uint32_t*)&local_firstQuery, sizeof(uint32_t));
3749 stream->write((uint32_t*)&local_queryCount, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003750 uint64_t cgen_var_242 = (uint64_t)local_dataSize;
3751 stream->putBe64(cgen_var_242);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003752 stream->write((void*)pData, ((dataSize)) * sizeof(uint8_t));
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003753 stream->write((VkDeviceSize*)&local_stride, sizeof(VkDeviceSize));
3754 stream->write((VkQueryResultFlags*)&local_flags, sizeof(VkQueryResultFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003755 AEMU_SCOPED_TRACE("vkGetQueryPoolResults readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003756 stream->read((void*)pData, ((dataSize)) * sizeof(uint8_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003757 AEMU_SCOPED_TRACE("vkGetQueryPoolResults returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003758 VkResult vkGetQueryPoolResults_VkResult_return = (VkResult)0;
3759 stream->read(&vkGetQueryPoolResults_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07003760 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08003761 countingStream->clearPool();
3762 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003763 mImpl->log("finish vkGetQueryPoolResults");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003764 return vkGetQueryPoolResults_VkResult_return;
3765}
3766
3767VkResult VkEncoder::vkCreateBuffer(
3768 VkDevice device,
3769 const VkBufferCreateInfo* pCreateInfo,
3770 const VkAllocationCallbacks* pAllocator,
3771 VkBuffer* pBuffer)
3772{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003773 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003774 AEMU_SCOPED_TRACE("vkCreateBuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003775 mImpl->log("start vkCreateBuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003776 auto stream = mImpl->stream();
3777 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003778 auto resources = mImpl->resources();
3779 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003780 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003781 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003782 VkBufferCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003783 VkAllocationCallbacks* local_pAllocator;
3784 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003785 local_pCreateInfo = nullptr;
3786 if (pCreateInfo)
3787 {
3788 local_pCreateInfo = (VkBufferCreateInfo*)pool->alloc(sizeof(const VkBufferCreateInfo));
3789 deepcopy_VkBufferCreateInfo(pool, pCreateInfo, (VkBufferCreateInfo*)(local_pCreateInfo));
3790 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003791 local_pAllocator = nullptr;
3792 if (pAllocator)
3793 {
3794 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3795 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
3796 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003797 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08003798 if (local_pCreateInfo)
3799 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003800 transform_tohost_VkBufferCreateInfo(mImpl->resources(), (VkBufferCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003801 }
3802 if (local_pAllocator)
3803 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003804 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003805 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003806 countingStream->rewind();
3807 {
David Reveman9875f2c2019-06-11 21:47:12 -04003808 uint64_t cgen_var_243;
3809 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_243, 1);
3810 countingStream->write((uint64_t*)&cgen_var_243, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003811 marshal_VkBufferCreateInfo(countingStream, (VkBufferCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003812 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003813 uint64_t cgen_var_244 = (uint64_t)(uintptr_t)local_pAllocator;
3814 countingStream->putBe64(cgen_var_244);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003815 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003816 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003817 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003818 }
David Reveman9875f2c2019-06-11 21:47:12 -04003819 uint64_t cgen_var_245;
3820 countingStream->handleMapping()->mapHandles_VkBuffer_u64(pBuffer, &cgen_var_245, 1);
3821 countingStream->write((uint64_t*)&cgen_var_245, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003822 }
3823 uint32_t packetSize_vkCreateBuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3824 countingStream->rewind();
3825 uint32_t opcode_vkCreateBuffer = OP_vkCreateBuffer;
3826 stream->write(&opcode_vkCreateBuffer, sizeof(uint32_t));
3827 stream->write(&packetSize_vkCreateBuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003828 uint64_t cgen_var_246;
3829 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_246, 1);
3830 stream->write((uint64_t*)&cgen_var_246, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003831 marshal_VkBufferCreateInfo(stream, (VkBufferCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003832 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003833 uint64_t cgen_var_247 = (uint64_t)(uintptr_t)local_pAllocator;
3834 stream->putBe64(cgen_var_247);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003835 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003836 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003837 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003838 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08003839 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04003840 uint64_t cgen_var_248;
3841 stream->handleMapping()->mapHandles_VkBuffer_u64(pBuffer, &cgen_var_248, 1);
3842 stream->write((uint64_t*)&cgen_var_248, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08003843 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003844 AEMU_SCOPED_TRACE("vkCreateBuffer readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08003845 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04003846 uint64_t cgen_var_249;
3847 stream->read((uint64_t*)&cgen_var_249, 8);
3848 stream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_249, (VkBuffer*)pBuffer, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08003849 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003850 AEMU_SCOPED_TRACE("vkCreateBuffer returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003851 VkResult vkCreateBuffer_VkResult_return = (VkResult)0;
3852 stream->read(&vkCreateBuffer_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07003853 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08003854 countingStream->clearPool();
3855 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003856 mImpl->log("finish vkCreateBuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003857 return vkCreateBuffer_VkResult_return;
3858}
3859
3860void VkEncoder::vkDestroyBuffer(
3861 VkDevice device,
3862 VkBuffer buffer,
3863 const VkAllocationCallbacks* pAllocator)
3864{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003865 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003866 AEMU_SCOPED_TRACE("vkDestroyBuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003867 mImpl->log("start vkDestroyBuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003868 auto stream = mImpl->stream();
3869 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003870 auto resources = mImpl->resources();
3871 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003872 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003873 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003874 VkBuffer local_buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003875 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003876 local_device = device;
3877 local_buffer = buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003878 local_pAllocator = nullptr;
3879 if (pAllocator)
3880 {
3881 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3882 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
3883 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003884 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08003885 if (local_pAllocator)
3886 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003887 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003888 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003889 countingStream->rewind();
3890 {
David Reveman9875f2c2019-06-11 21:47:12 -04003891 uint64_t cgen_var_250;
3892 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_250, 1);
3893 countingStream->write((uint64_t*)&cgen_var_250, 1 * 8);
3894 uint64_t cgen_var_251;
3895 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_251, 1);
3896 countingStream->write((uint64_t*)&cgen_var_251, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003897 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003898 uint64_t cgen_var_252 = (uint64_t)(uintptr_t)local_pAllocator;
3899 countingStream->putBe64(cgen_var_252);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003900 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003901 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003902 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003903 }
3904 }
3905 uint32_t packetSize_vkDestroyBuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3906 countingStream->rewind();
3907 uint32_t opcode_vkDestroyBuffer = OP_vkDestroyBuffer;
3908 stream->write(&opcode_vkDestroyBuffer, sizeof(uint32_t));
3909 stream->write(&packetSize_vkDestroyBuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003910 uint64_t cgen_var_253;
3911 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_253, 1);
3912 stream->write((uint64_t*)&cgen_var_253, 1 * 8);
3913 uint64_t cgen_var_254;
3914 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_254, 1);
3915 stream->write((uint64_t*)&cgen_var_254, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003916 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003917 uint64_t cgen_var_255 = (uint64_t)(uintptr_t)local_pAllocator;
3918 stream->putBe64(cgen_var_255);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003919 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003920 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003921 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003922 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003923 AEMU_SCOPED_TRACE("vkDestroyBuffer readParams");
3924 AEMU_SCOPED_TRACE("vkDestroyBuffer returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003925 resources->destroyMapping()->mapHandles_VkBuffer((VkBuffer*)&buffer);
Lingfeng Yang256f9252020-07-14 14:27:33 -07003926 pool->freeAll();
3927 countingStream->clearPool();
3928 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003929 mImpl->log("finish vkDestroyBuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003930}
3931
3932VkResult VkEncoder::vkCreateBufferView(
3933 VkDevice device,
3934 const VkBufferViewCreateInfo* pCreateInfo,
3935 const VkAllocationCallbacks* pAllocator,
3936 VkBufferView* pView)
3937{
Lingfeng Yang256f9252020-07-14 14:27:33 -07003938 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08003939 AEMU_SCOPED_TRACE("vkCreateBufferView encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08003940 mImpl->log("start vkCreateBufferView");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003941 auto stream = mImpl->stream();
3942 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003943 auto resources = mImpl->resources();
3944 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08003945 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003946 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003947 VkBufferViewCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08003948 VkAllocationCallbacks* local_pAllocator;
3949 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003950 local_pCreateInfo = nullptr;
3951 if (pCreateInfo)
3952 {
3953 local_pCreateInfo = (VkBufferViewCreateInfo*)pool->alloc(sizeof(const VkBufferViewCreateInfo));
3954 deepcopy_VkBufferViewCreateInfo(pool, pCreateInfo, (VkBufferViewCreateInfo*)(local_pCreateInfo));
3955 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003956 local_pAllocator = nullptr;
3957 if (pAllocator)
3958 {
3959 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
3960 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
3961 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08003962 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08003963 if (local_pCreateInfo)
3964 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003965 transform_tohost_VkBufferViewCreateInfo(mImpl->resources(), (VkBufferViewCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003966 }
3967 if (local_pAllocator)
3968 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08003969 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08003970 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003971 countingStream->rewind();
3972 {
David Reveman9875f2c2019-06-11 21:47:12 -04003973 uint64_t cgen_var_256;
3974 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_256, 1);
3975 countingStream->write((uint64_t*)&cgen_var_256, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003976 marshal_VkBufferViewCreateInfo(countingStream, (VkBufferViewCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003977 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003978 uint64_t cgen_var_257 = (uint64_t)(uintptr_t)local_pAllocator;
3979 countingStream->putBe64(cgen_var_257);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003980 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003981 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003982 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003983 }
David Reveman9875f2c2019-06-11 21:47:12 -04003984 uint64_t cgen_var_258;
3985 countingStream->handleMapping()->mapHandles_VkBufferView_u64(pView, &cgen_var_258, 1);
3986 countingStream->write((uint64_t*)&cgen_var_258, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07003987 }
3988 uint32_t packetSize_vkCreateBufferView = 4 + 4 + (uint32_t)countingStream->bytesWritten();
3989 countingStream->rewind();
3990 uint32_t opcode_vkCreateBufferView = OP_vkCreateBufferView;
3991 stream->write(&opcode_vkCreateBufferView, sizeof(uint32_t));
3992 stream->write(&packetSize_vkCreateBufferView, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04003993 uint64_t cgen_var_259;
3994 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_259, 1);
3995 stream->write((uint64_t*)&cgen_var_259, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08003996 marshal_VkBufferViewCreateInfo(stream, (VkBufferViewCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08003997 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04003998 uint64_t cgen_var_260 = (uint64_t)(uintptr_t)local_pAllocator;
3999 stream->putBe64(cgen_var_260);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004000 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004001 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004002 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004003 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08004004 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04004005 uint64_t cgen_var_261;
4006 stream->handleMapping()->mapHandles_VkBufferView_u64(pView, &cgen_var_261, 1);
4007 stream->write((uint64_t*)&cgen_var_261, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08004008 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004009 AEMU_SCOPED_TRACE("vkCreateBufferView readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08004010 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04004011 uint64_t cgen_var_262;
4012 stream->read((uint64_t*)&cgen_var_262, 8);
4013 stream->handleMapping()->mapHandles_u64_VkBufferView(&cgen_var_262, (VkBufferView*)pView, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08004014 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004015 AEMU_SCOPED_TRACE("vkCreateBufferView returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004016 VkResult vkCreateBufferView_VkResult_return = (VkResult)0;
4017 stream->read(&vkCreateBufferView_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07004018 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08004019 countingStream->clearPool();
4020 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004021 mImpl->log("finish vkCreateBufferView");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004022 return vkCreateBufferView_VkResult_return;
4023}
4024
4025void VkEncoder::vkDestroyBufferView(
4026 VkDevice device,
4027 VkBufferView bufferView,
4028 const VkAllocationCallbacks* pAllocator)
4029{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004030 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004031 AEMU_SCOPED_TRACE("vkDestroyBufferView encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004032 mImpl->log("start vkDestroyBufferView");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004033 auto stream = mImpl->stream();
4034 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004035 auto resources = mImpl->resources();
4036 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004037 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004038 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004039 VkBufferView local_bufferView;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004040 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004041 local_device = device;
4042 local_bufferView = bufferView;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004043 local_pAllocator = nullptr;
4044 if (pAllocator)
4045 {
4046 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4047 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
4048 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004049 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08004050 if (local_pAllocator)
4051 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004052 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004053 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004054 countingStream->rewind();
4055 {
David Reveman9875f2c2019-06-11 21:47:12 -04004056 uint64_t cgen_var_263;
4057 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_263, 1);
4058 countingStream->write((uint64_t*)&cgen_var_263, 1 * 8);
4059 uint64_t cgen_var_264;
4060 countingStream->handleMapping()->mapHandles_VkBufferView_u64(&local_bufferView, &cgen_var_264, 1);
4061 countingStream->write((uint64_t*)&cgen_var_264, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004062 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004063 uint64_t cgen_var_265 = (uint64_t)(uintptr_t)local_pAllocator;
4064 countingStream->putBe64(cgen_var_265);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004065 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004066 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004067 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004068 }
4069 }
4070 uint32_t packetSize_vkDestroyBufferView = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4071 countingStream->rewind();
4072 uint32_t opcode_vkDestroyBufferView = OP_vkDestroyBufferView;
4073 stream->write(&opcode_vkDestroyBufferView, sizeof(uint32_t));
4074 stream->write(&packetSize_vkDestroyBufferView, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004075 uint64_t cgen_var_266;
4076 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_266, 1);
4077 stream->write((uint64_t*)&cgen_var_266, 1 * 8);
4078 uint64_t cgen_var_267;
4079 stream->handleMapping()->mapHandles_VkBufferView_u64(&local_bufferView, &cgen_var_267, 1);
4080 stream->write((uint64_t*)&cgen_var_267, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004081 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004082 uint64_t cgen_var_268 = (uint64_t)(uintptr_t)local_pAllocator;
4083 stream->putBe64(cgen_var_268);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004084 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004085 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004086 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004087 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004088 AEMU_SCOPED_TRACE("vkDestroyBufferView readParams");
4089 AEMU_SCOPED_TRACE("vkDestroyBufferView returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004090 resources->destroyMapping()->mapHandles_VkBufferView((VkBufferView*)&bufferView);
Lingfeng Yang256f9252020-07-14 14:27:33 -07004091 pool->freeAll();
4092 countingStream->clearPool();
4093 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004094 mImpl->log("finish vkDestroyBufferView");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004095}
4096
4097VkResult VkEncoder::vkCreateImage(
4098 VkDevice device,
4099 const VkImageCreateInfo* pCreateInfo,
4100 const VkAllocationCallbacks* pAllocator,
4101 VkImage* pImage)
4102{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004103 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004104 AEMU_SCOPED_TRACE("vkCreateImage encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004105 mImpl->log("start vkCreateImage");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004106 auto stream = mImpl->stream();
4107 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004108 auto resources = mImpl->resources();
4109 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004110 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004111 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004112 VkImageCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004113 VkAllocationCallbacks* local_pAllocator;
4114 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004115 local_pCreateInfo = nullptr;
4116 if (pCreateInfo)
4117 {
4118 local_pCreateInfo = (VkImageCreateInfo*)pool->alloc(sizeof(const VkImageCreateInfo));
4119 deepcopy_VkImageCreateInfo(pool, pCreateInfo, (VkImageCreateInfo*)(local_pCreateInfo));
4120 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004121 local_pAllocator = nullptr;
4122 if (pAllocator)
4123 {
4124 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4125 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
4126 }
Lingfeng Yangdef88ba2018-12-13 12:43:17 -08004127 mImpl->resources()->unwrap_VkNativeBufferANDROID(pCreateInfo, local_pCreateInfo);
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004128 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08004129 if (local_pCreateInfo)
4130 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004131 transform_tohost_VkImageCreateInfo(mImpl->resources(), (VkImageCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004132 }
4133 if (local_pAllocator)
4134 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004135 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004136 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004137 countingStream->rewind();
4138 {
David Reveman9875f2c2019-06-11 21:47:12 -04004139 uint64_t cgen_var_269;
4140 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_269, 1);
4141 countingStream->write((uint64_t*)&cgen_var_269, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004142 marshal_VkImageCreateInfo(countingStream, (VkImageCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004143 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004144 uint64_t cgen_var_270 = (uint64_t)(uintptr_t)local_pAllocator;
4145 countingStream->putBe64(cgen_var_270);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004146 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004147 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004148 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004149 }
David Reveman9875f2c2019-06-11 21:47:12 -04004150 uint64_t cgen_var_271;
4151 countingStream->handleMapping()->mapHandles_VkImage_u64(pImage, &cgen_var_271, 1);
4152 countingStream->write((uint64_t*)&cgen_var_271, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004153 }
4154 uint32_t packetSize_vkCreateImage = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4155 countingStream->rewind();
4156 uint32_t opcode_vkCreateImage = OP_vkCreateImage;
4157 stream->write(&opcode_vkCreateImage, sizeof(uint32_t));
4158 stream->write(&packetSize_vkCreateImage, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004159 uint64_t cgen_var_272;
4160 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_272, 1);
4161 stream->write((uint64_t*)&cgen_var_272, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004162 marshal_VkImageCreateInfo(stream, (VkImageCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004163 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004164 uint64_t cgen_var_273 = (uint64_t)(uintptr_t)local_pAllocator;
4165 stream->putBe64(cgen_var_273);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004166 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004167 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004168 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004169 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08004170 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04004171 uint64_t cgen_var_274;
4172 stream->handleMapping()->mapHandles_VkImage_u64(pImage, &cgen_var_274, 1);
4173 stream->write((uint64_t*)&cgen_var_274, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08004174 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004175 AEMU_SCOPED_TRACE("vkCreateImage readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08004176 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04004177 uint64_t cgen_var_275;
4178 stream->read((uint64_t*)&cgen_var_275, 8);
4179 stream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_275, (VkImage*)pImage, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08004180 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004181 AEMU_SCOPED_TRACE("vkCreateImage returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004182 VkResult vkCreateImage_VkResult_return = (VkResult)0;
4183 stream->read(&vkCreateImage_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07004184 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08004185 countingStream->clearPool();
4186 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004187 mImpl->log("finish vkCreateImage");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004188 return vkCreateImage_VkResult_return;
4189}
4190
4191void VkEncoder::vkDestroyImage(
4192 VkDevice device,
4193 VkImage image,
4194 const VkAllocationCallbacks* pAllocator)
4195{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004196 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004197 AEMU_SCOPED_TRACE("vkDestroyImage encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004198 mImpl->log("start vkDestroyImage");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004199 auto stream = mImpl->stream();
4200 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004201 auto resources = mImpl->resources();
4202 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004203 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004204 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004205 VkImage local_image;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004206 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004207 local_device = device;
4208 local_image = image;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004209 local_pAllocator = nullptr;
4210 if (pAllocator)
4211 {
4212 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4213 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
4214 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004215 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08004216 if (local_pAllocator)
4217 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004218 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004219 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004220 countingStream->rewind();
4221 {
David Reveman9875f2c2019-06-11 21:47:12 -04004222 uint64_t cgen_var_276;
4223 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_276, 1);
4224 countingStream->write((uint64_t*)&cgen_var_276, 1 * 8);
4225 uint64_t cgen_var_277;
4226 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_277, 1);
4227 countingStream->write((uint64_t*)&cgen_var_277, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004228 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004229 uint64_t cgen_var_278 = (uint64_t)(uintptr_t)local_pAllocator;
4230 countingStream->putBe64(cgen_var_278);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004231 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004232 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004233 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004234 }
4235 }
4236 uint32_t packetSize_vkDestroyImage = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4237 countingStream->rewind();
4238 uint32_t opcode_vkDestroyImage = OP_vkDestroyImage;
4239 stream->write(&opcode_vkDestroyImage, sizeof(uint32_t));
4240 stream->write(&packetSize_vkDestroyImage, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004241 uint64_t cgen_var_279;
4242 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_279, 1);
4243 stream->write((uint64_t*)&cgen_var_279, 1 * 8);
4244 uint64_t cgen_var_280;
4245 stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_280, 1);
4246 stream->write((uint64_t*)&cgen_var_280, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004247 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004248 uint64_t cgen_var_281 = (uint64_t)(uintptr_t)local_pAllocator;
4249 stream->putBe64(cgen_var_281);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004250 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004251 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004252 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004253 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004254 AEMU_SCOPED_TRACE("vkDestroyImage readParams");
4255 AEMU_SCOPED_TRACE("vkDestroyImage returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004256 resources->destroyMapping()->mapHandles_VkImage((VkImage*)&image);
Lingfeng Yang256f9252020-07-14 14:27:33 -07004257 pool->freeAll();
4258 countingStream->clearPool();
4259 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004260 mImpl->log("finish vkDestroyImage");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004261}
4262
4263void VkEncoder::vkGetImageSubresourceLayout(
4264 VkDevice device,
4265 VkImage image,
4266 const VkImageSubresource* pSubresource,
4267 VkSubresourceLayout* pLayout)
4268{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004269 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004270 AEMU_SCOPED_TRACE("vkGetImageSubresourceLayout encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004271 mImpl->log("start vkGetImageSubresourceLayout");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004272 auto stream = mImpl->stream();
4273 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004274 auto resources = mImpl->resources();
4275 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004276 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004277 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004278 VkImage local_image;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004279 VkImageSubresource* local_pSubresource;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004280 local_device = device;
4281 local_image = image;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004282 local_pSubresource = nullptr;
4283 if (pSubresource)
4284 {
4285 local_pSubresource = (VkImageSubresource*)pool->alloc(sizeof(const VkImageSubresource));
4286 deepcopy_VkImageSubresource(pool, pSubresource, (VkImageSubresource*)(local_pSubresource));
4287 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08004288 if (local_pSubresource)
4289 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004290 transform_tohost_VkImageSubresource(mImpl->resources(), (VkImageSubresource*)(local_pSubresource));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004291 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004292 countingStream->rewind();
4293 {
David Reveman9875f2c2019-06-11 21:47:12 -04004294 uint64_t cgen_var_282;
4295 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_282, 1);
4296 countingStream->write((uint64_t*)&cgen_var_282, 1 * 8);
4297 uint64_t cgen_var_283;
4298 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_283, 1);
4299 countingStream->write((uint64_t*)&cgen_var_283, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004300 marshal_VkImageSubresource(countingStream, (VkImageSubresource*)(local_pSubresource));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004301 marshal_VkSubresourceLayout(countingStream, (VkSubresourceLayout*)(pLayout));
4302 }
4303 uint32_t packetSize_vkGetImageSubresourceLayout = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4304 countingStream->rewind();
4305 uint32_t opcode_vkGetImageSubresourceLayout = OP_vkGetImageSubresourceLayout;
4306 stream->write(&opcode_vkGetImageSubresourceLayout, sizeof(uint32_t));
4307 stream->write(&packetSize_vkGetImageSubresourceLayout, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004308 uint64_t cgen_var_284;
4309 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_284, 1);
4310 stream->write((uint64_t*)&cgen_var_284, 1 * 8);
4311 uint64_t cgen_var_285;
4312 stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_285, 1);
4313 stream->write((uint64_t*)&cgen_var_285, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004314 marshal_VkImageSubresource(stream, (VkImageSubresource*)(local_pSubresource));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004315 marshal_VkSubresourceLayout(stream, (VkSubresourceLayout*)(pLayout));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004316 AEMU_SCOPED_TRACE("vkGetImageSubresourceLayout readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004317 unmarshal_VkSubresourceLayout(stream, (VkSubresourceLayout*)(pLayout));
Lingfeng Yang97a06702018-12-24 17:02:43 -08004318 if (pLayout)
4319 {
4320 transform_fromhost_VkSubresourceLayout(mImpl->resources(), (VkSubresourceLayout*)(pLayout));
4321 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004322 AEMU_SCOPED_TRACE("vkGetImageSubresourceLayout returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07004323 pool->freeAll();
4324 countingStream->clearPool();
4325 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004326 mImpl->log("finish vkGetImageSubresourceLayout");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004327}
4328
4329VkResult VkEncoder::vkCreateImageView(
4330 VkDevice device,
4331 const VkImageViewCreateInfo* pCreateInfo,
4332 const VkAllocationCallbacks* pAllocator,
4333 VkImageView* pView)
4334{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004335 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004336 AEMU_SCOPED_TRACE("vkCreateImageView encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004337 mImpl->log("start vkCreateImageView");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004338 auto stream = mImpl->stream();
4339 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004340 auto resources = mImpl->resources();
4341 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004342 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004343 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004344 VkImageViewCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004345 VkAllocationCallbacks* local_pAllocator;
4346 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004347 local_pCreateInfo = nullptr;
4348 if (pCreateInfo)
4349 {
4350 local_pCreateInfo = (VkImageViewCreateInfo*)pool->alloc(sizeof(const VkImageViewCreateInfo));
4351 deepcopy_VkImageViewCreateInfo(pool, pCreateInfo, (VkImageViewCreateInfo*)(local_pCreateInfo));
4352 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004353 local_pAllocator = nullptr;
4354 if (pAllocator)
4355 {
4356 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4357 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
4358 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004359 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08004360 if (local_pCreateInfo)
4361 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004362 transform_tohost_VkImageViewCreateInfo(mImpl->resources(), (VkImageViewCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004363 }
4364 if (local_pAllocator)
4365 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004366 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004367 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004368 countingStream->rewind();
4369 {
David Reveman9875f2c2019-06-11 21:47:12 -04004370 uint64_t cgen_var_286;
4371 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_286, 1);
4372 countingStream->write((uint64_t*)&cgen_var_286, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004373 marshal_VkImageViewCreateInfo(countingStream, (VkImageViewCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004374 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004375 uint64_t cgen_var_287 = (uint64_t)(uintptr_t)local_pAllocator;
4376 countingStream->putBe64(cgen_var_287);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004377 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004378 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004379 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004380 }
David Reveman9875f2c2019-06-11 21:47:12 -04004381 uint64_t cgen_var_288;
4382 countingStream->handleMapping()->mapHandles_VkImageView_u64(pView, &cgen_var_288, 1);
4383 countingStream->write((uint64_t*)&cgen_var_288, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004384 }
4385 uint32_t packetSize_vkCreateImageView = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4386 countingStream->rewind();
4387 uint32_t opcode_vkCreateImageView = OP_vkCreateImageView;
4388 stream->write(&opcode_vkCreateImageView, sizeof(uint32_t));
4389 stream->write(&packetSize_vkCreateImageView, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004390 uint64_t cgen_var_289;
4391 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_289, 1);
4392 stream->write((uint64_t*)&cgen_var_289, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004393 marshal_VkImageViewCreateInfo(stream, (VkImageViewCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004394 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004395 uint64_t cgen_var_290 = (uint64_t)(uintptr_t)local_pAllocator;
4396 stream->putBe64(cgen_var_290);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004397 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004398 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004399 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004400 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08004401 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04004402 uint64_t cgen_var_291;
4403 stream->handleMapping()->mapHandles_VkImageView_u64(pView, &cgen_var_291, 1);
4404 stream->write((uint64_t*)&cgen_var_291, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08004405 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004406 AEMU_SCOPED_TRACE("vkCreateImageView readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08004407 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04004408 uint64_t cgen_var_292;
4409 stream->read((uint64_t*)&cgen_var_292, 8);
4410 stream->handleMapping()->mapHandles_u64_VkImageView(&cgen_var_292, (VkImageView*)pView, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08004411 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004412 AEMU_SCOPED_TRACE("vkCreateImageView returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004413 VkResult vkCreateImageView_VkResult_return = (VkResult)0;
4414 stream->read(&vkCreateImageView_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07004415 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08004416 countingStream->clearPool();
4417 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004418 mImpl->log("finish vkCreateImageView");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004419 return vkCreateImageView_VkResult_return;
4420}
4421
4422void VkEncoder::vkDestroyImageView(
4423 VkDevice device,
4424 VkImageView imageView,
4425 const VkAllocationCallbacks* pAllocator)
4426{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004427 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004428 AEMU_SCOPED_TRACE("vkDestroyImageView encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004429 mImpl->log("start vkDestroyImageView");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004430 auto stream = mImpl->stream();
4431 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004432 auto resources = mImpl->resources();
4433 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004434 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004435 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004436 VkImageView local_imageView;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004437 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004438 local_device = device;
4439 local_imageView = imageView;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004440 local_pAllocator = nullptr;
4441 if (pAllocator)
4442 {
4443 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4444 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
4445 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004446 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08004447 if (local_pAllocator)
4448 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004449 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004450 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004451 countingStream->rewind();
4452 {
David Reveman9875f2c2019-06-11 21:47:12 -04004453 uint64_t cgen_var_293;
4454 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_293, 1);
4455 countingStream->write((uint64_t*)&cgen_var_293, 1 * 8);
4456 uint64_t cgen_var_294;
4457 countingStream->handleMapping()->mapHandles_VkImageView_u64(&local_imageView, &cgen_var_294, 1);
4458 countingStream->write((uint64_t*)&cgen_var_294, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004459 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004460 uint64_t cgen_var_295 = (uint64_t)(uintptr_t)local_pAllocator;
4461 countingStream->putBe64(cgen_var_295);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004462 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004463 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004464 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004465 }
4466 }
4467 uint32_t packetSize_vkDestroyImageView = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4468 countingStream->rewind();
4469 uint32_t opcode_vkDestroyImageView = OP_vkDestroyImageView;
4470 stream->write(&opcode_vkDestroyImageView, sizeof(uint32_t));
4471 stream->write(&packetSize_vkDestroyImageView, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004472 uint64_t cgen_var_296;
4473 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_296, 1);
4474 stream->write((uint64_t*)&cgen_var_296, 1 * 8);
4475 uint64_t cgen_var_297;
4476 stream->handleMapping()->mapHandles_VkImageView_u64(&local_imageView, &cgen_var_297, 1);
4477 stream->write((uint64_t*)&cgen_var_297, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004478 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004479 uint64_t cgen_var_298 = (uint64_t)(uintptr_t)local_pAllocator;
4480 stream->putBe64(cgen_var_298);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004481 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004482 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004483 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004484 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004485 AEMU_SCOPED_TRACE("vkDestroyImageView readParams");
4486 AEMU_SCOPED_TRACE("vkDestroyImageView returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004487 resources->destroyMapping()->mapHandles_VkImageView((VkImageView*)&imageView);
Lingfeng Yang256f9252020-07-14 14:27:33 -07004488 pool->freeAll();
4489 countingStream->clearPool();
4490 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004491 mImpl->log("finish vkDestroyImageView");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004492}
4493
4494VkResult VkEncoder::vkCreateShaderModule(
4495 VkDevice device,
4496 const VkShaderModuleCreateInfo* pCreateInfo,
4497 const VkAllocationCallbacks* pAllocator,
4498 VkShaderModule* pShaderModule)
4499{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004500 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004501 AEMU_SCOPED_TRACE("vkCreateShaderModule encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004502 mImpl->log("start vkCreateShaderModule");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004503 auto stream = mImpl->stream();
4504 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004505 auto resources = mImpl->resources();
4506 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004507 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004508 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004509 VkShaderModuleCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004510 VkAllocationCallbacks* local_pAllocator;
4511 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004512 local_pCreateInfo = nullptr;
4513 if (pCreateInfo)
4514 {
4515 local_pCreateInfo = (VkShaderModuleCreateInfo*)pool->alloc(sizeof(const VkShaderModuleCreateInfo));
4516 deepcopy_VkShaderModuleCreateInfo(pool, pCreateInfo, (VkShaderModuleCreateInfo*)(local_pCreateInfo));
4517 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004518 local_pAllocator = nullptr;
4519 if (pAllocator)
4520 {
4521 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4522 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
4523 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004524 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08004525 if (local_pCreateInfo)
4526 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004527 transform_tohost_VkShaderModuleCreateInfo(mImpl->resources(), (VkShaderModuleCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004528 }
4529 if (local_pAllocator)
4530 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004531 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004532 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004533 countingStream->rewind();
4534 {
David Reveman9875f2c2019-06-11 21:47:12 -04004535 uint64_t cgen_var_299;
4536 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_299, 1);
4537 countingStream->write((uint64_t*)&cgen_var_299, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004538 marshal_VkShaderModuleCreateInfo(countingStream, (VkShaderModuleCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004539 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004540 uint64_t cgen_var_300 = (uint64_t)(uintptr_t)local_pAllocator;
4541 countingStream->putBe64(cgen_var_300);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004542 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004543 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004544 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004545 }
David Reveman9875f2c2019-06-11 21:47:12 -04004546 uint64_t cgen_var_301;
4547 countingStream->handleMapping()->mapHandles_VkShaderModule_u64(pShaderModule, &cgen_var_301, 1);
4548 countingStream->write((uint64_t*)&cgen_var_301, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004549 }
4550 uint32_t packetSize_vkCreateShaderModule = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4551 countingStream->rewind();
4552 uint32_t opcode_vkCreateShaderModule = OP_vkCreateShaderModule;
4553 stream->write(&opcode_vkCreateShaderModule, sizeof(uint32_t));
4554 stream->write(&packetSize_vkCreateShaderModule, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004555 uint64_t cgen_var_302;
4556 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_302, 1);
4557 stream->write((uint64_t*)&cgen_var_302, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004558 marshal_VkShaderModuleCreateInfo(stream, (VkShaderModuleCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004559 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004560 uint64_t cgen_var_303 = (uint64_t)(uintptr_t)local_pAllocator;
4561 stream->putBe64(cgen_var_303);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004562 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004563 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004564 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004565 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08004566 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04004567 uint64_t cgen_var_304;
4568 stream->handleMapping()->mapHandles_VkShaderModule_u64(pShaderModule, &cgen_var_304, 1);
4569 stream->write((uint64_t*)&cgen_var_304, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08004570 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004571 AEMU_SCOPED_TRACE("vkCreateShaderModule readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08004572 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04004573 uint64_t cgen_var_305;
4574 stream->read((uint64_t*)&cgen_var_305, 8);
4575 stream->handleMapping()->mapHandles_u64_VkShaderModule(&cgen_var_305, (VkShaderModule*)pShaderModule, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08004576 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004577 AEMU_SCOPED_TRACE("vkCreateShaderModule returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004578 VkResult vkCreateShaderModule_VkResult_return = (VkResult)0;
4579 stream->read(&vkCreateShaderModule_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07004580 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08004581 countingStream->clearPool();
4582 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004583 mImpl->log("finish vkCreateShaderModule");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004584 return vkCreateShaderModule_VkResult_return;
4585}
4586
4587void VkEncoder::vkDestroyShaderModule(
4588 VkDevice device,
4589 VkShaderModule shaderModule,
4590 const VkAllocationCallbacks* pAllocator)
4591{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004592 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004593 AEMU_SCOPED_TRACE("vkDestroyShaderModule encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004594 mImpl->log("start vkDestroyShaderModule");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004595 auto stream = mImpl->stream();
4596 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004597 auto resources = mImpl->resources();
4598 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004599 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004600 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004601 VkShaderModule local_shaderModule;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004602 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004603 local_device = device;
4604 local_shaderModule = shaderModule;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004605 local_pAllocator = nullptr;
4606 if (pAllocator)
4607 {
4608 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4609 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
4610 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004611 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08004612 if (local_pAllocator)
4613 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004614 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004615 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004616 countingStream->rewind();
4617 {
David Reveman9875f2c2019-06-11 21:47:12 -04004618 uint64_t cgen_var_306;
4619 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_306, 1);
4620 countingStream->write((uint64_t*)&cgen_var_306, 1 * 8);
4621 uint64_t cgen_var_307;
4622 countingStream->handleMapping()->mapHandles_VkShaderModule_u64(&local_shaderModule, &cgen_var_307, 1);
4623 countingStream->write((uint64_t*)&cgen_var_307, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004624 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004625 uint64_t cgen_var_308 = (uint64_t)(uintptr_t)local_pAllocator;
4626 countingStream->putBe64(cgen_var_308);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004627 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004628 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004629 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004630 }
4631 }
4632 uint32_t packetSize_vkDestroyShaderModule = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4633 countingStream->rewind();
4634 uint32_t opcode_vkDestroyShaderModule = OP_vkDestroyShaderModule;
4635 stream->write(&opcode_vkDestroyShaderModule, sizeof(uint32_t));
4636 stream->write(&packetSize_vkDestroyShaderModule, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004637 uint64_t cgen_var_309;
4638 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_309, 1);
4639 stream->write((uint64_t*)&cgen_var_309, 1 * 8);
4640 uint64_t cgen_var_310;
4641 stream->handleMapping()->mapHandles_VkShaderModule_u64(&local_shaderModule, &cgen_var_310, 1);
4642 stream->write((uint64_t*)&cgen_var_310, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004643 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004644 uint64_t cgen_var_311 = (uint64_t)(uintptr_t)local_pAllocator;
4645 stream->putBe64(cgen_var_311);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004646 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004647 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004648 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004649 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004650 AEMU_SCOPED_TRACE("vkDestroyShaderModule readParams");
4651 AEMU_SCOPED_TRACE("vkDestroyShaderModule returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004652 resources->destroyMapping()->mapHandles_VkShaderModule((VkShaderModule*)&shaderModule);
Lingfeng Yang256f9252020-07-14 14:27:33 -07004653 pool->freeAll();
4654 countingStream->clearPool();
4655 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004656 mImpl->log("finish vkDestroyShaderModule");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004657}
4658
4659VkResult VkEncoder::vkCreatePipelineCache(
4660 VkDevice device,
4661 const VkPipelineCacheCreateInfo* pCreateInfo,
4662 const VkAllocationCallbacks* pAllocator,
4663 VkPipelineCache* pPipelineCache)
4664{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004665 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004666 AEMU_SCOPED_TRACE("vkCreatePipelineCache encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004667 mImpl->log("start vkCreatePipelineCache");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004668 auto stream = mImpl->stream();
4669 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004670 auto resources = mImpl->resources();
4671 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004672 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004673 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004674 VkPipelineCacheCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004675 VkAllocationCallbacks* local_pAllocator;
4676 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004677 local_pCreateInfo = nullptr;
4678 if (pCreateInfo)
4679 {
4680 local_pCreateInfo = (VkPipelineCacheCreateInfo*)pool->alloc(sizeof(const VkPipelineCacheCreateInfo));
4681 deepcopy_VkPipelineCacheCreateInfo(pool, pCreateInfo, (VkPipelineCacheCreateInfo*)(local_pCreateInfo));
4682 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004683 local_pAllocator = nullptr;
4684 if (pAllocator)
4685 {
4686 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4687 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
4688 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004689 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08004690 if (local_pCreateInfo)
4691 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004692 transform_tohost_VkPipelineCacheCreateInfo(mImpl->resources(), (VkPipelineCacheCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004693 }
4694 if (local_pAllocator)
4695 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004696 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004697 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004698 countingStream->rewind();
4699 {
David Reveman9875f2c2019-06-11 21:47:12 -04004700 uint64_t cgen_var_312;
4701 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_312, 1);
4702 countingStream->write((uint64_t*)&cgen_var_312, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004703 marshal_VkPipelineCacheCreateInfo(countingStream, (VkPipelineCacheCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004704 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004705 uint64_t cgen_var_313 = (uint64_t)(uintptr_t)local_pAllocator;
4706 countingStream->putBe64(cgen_var_313);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004707 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004708 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004709 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004710 }
David Reveman9875f2c2019-06-11 21:47:12 -04004711 uint64_t cgen_var_314;
4712 countingStream->handleMapping()->mapHandles_VkPipelineCache_u64(pPipelineCache, &cgen_var_314, 1);
4713 countingStream->write((uint64_t*)&cgen_var_314, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004714 }
4715 uint32_t packetSize_vkCreatePipelineCache = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4716 countingStream->rewind();
4717 uint32_t opcode_vkCreatePipelineCache = OP_vkCreatePipelineCache;
4718 stream->write(&opcode_vkCreatePipelineCache, sizeof(uint32_t));
4719 stream->write(&packetSize_vkCreatePipelineCache, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004720 uint64_t cgen_var_315;
4721 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_315, 1);
4722 stream->write((uint64_t*)&cgen_var_315, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004723 marshal_VkPipelineCacheCreateInfo(stream, (VkPipelineCacheCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004724 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004725 uint64_t cgen_var_316 = (uint64_t)(uintptr_t)local_pAllocator;
4726 stream->putBe64(cgen_var_316);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004727 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004728 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004729 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004730 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08004731 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04004732 uint64_t cgen_var_317;
4733 stream->handleMapping()->mapHandles_VkPipelineCache_u64(pPipelineCache, &cgen_var_317, 1);
4734 stream->write((uint64_t*)&cgen_var_317, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08004735 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004736 AEMU_SCOPED_TRACE("vkCreatePipelineCache readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08004737 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04004738 uint64_t cgen_var_318;
4739 stream->read((uint64_t*)&cgen_var_318, 8);
4740 stream->handleMapping()->mapHandles_u64_VkPipelineCache(&cgen_var_318, (VkPipelineCache*)pPipelineCache, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08004741 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004742 AEMU_SCOPED_TRACE("vkCreatePipelineCache returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004743 VkResult vkCreatePipelineCache_VkResult_return = (VkResult)0;
4744 stream->read(&vkCreatePipelineCache_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07004745 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08004746 countingStream->clearPool();
4747 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004748 mImpl->log("finish vkCreatePipelineCache");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004749 return vkCreatePipelineCache_VkResult_return;
4750}
4751
4752void VkEncoder::vkDestroyPipelineCache(
4753 VkDevice device,
4754 VkPipelineCache pipelineCache,
4755 const VkAllocationCallbacks* pAllocator)
4756{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004757 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004758 AEMU_SCOPED_TRACE("vkDestroyPipelineCache encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004759 mImpl->log("start vkDestroyPipelineCache");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004760 auto stream = mImpl->stream();
4761 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004762 auto resources = mImpl->resources();
4763 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004764 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004765 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004766 VkPipelineCache local_pipelineCache;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004767 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004768 local_device = device;
4769 local_pipelineCache = pipelineCache;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004770 local_pAllocator = nullptr;
4771 if (pAllocator)
4772 {
4773 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
4774 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
4775 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08004776 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08004777 if (local_pAllocator)
4778 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08004779 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08004780 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004781 countingStream->rewind();
4782 {
David Reveman9875f2c2019-06-11 21:47:12 -04004783 uint64_t cgen_var_319;
4784 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_319, 1);
4785 countingStream->write((uint64_t*)&cgen_var_319, 1 * 8);
4786 uint64_t cgen_var_320;
4787 countingStream->handleMapping()->mapHandles_VkPipelineCache_u64(&local_pipelineCache, &cgen_var_320, 1);
4788 countingStream->write((uint64_t*)&cgen_var_320, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004789 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004790 uint64_t cgen_var_321 = (uint64_t)(uintptr_t)local_pAllocator;
4791 countingStream->putBe64(cgen_var_321);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004792 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004793 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004794 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004795 }
4796 }
4797 uint32_t packetSize_vkDestroyPipelineCache = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4798 countingStream->rewind();
4799 uint32_t opcode_vkDestroyPipelineCache = OP_vkDestroyPipelineCache;
4800 stream->write(&opcode_vkDestroyPipelineCache, sizeof(uint32_t));
4801 stream->write(&packetSize_vkDestroyPipelineCache, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004802 uint64_t cgen_var_322;
4803 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_322, 1);
4804 stream->write((uint64_t*)&cgen_var_322, 1 * 8);
4805 uint64_t cgen_var_323;
4806 stream->handleMapping()->mapHandles_VkPipelineCache_u64(&local_pipelineCache, &cgen_var_323, 1);
4807 stream->write((uint64_t*)&cgen_var_323, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004808 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004809 uint64_t cgen_var_324 = (uint64_t)(uintptr_t)local_pAllocator;
4810 stream->putBe64(cgen_var_324);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004811 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004812 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004813 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004814 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004815 AEMU_SCOPED_TRACE("vkDestroyPipelineCache readParams");
4816 AEMU_SCOPED_TRACE("vkDestroyPipelineCache returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004817 resources->destroyMapping()->mapHandles_VkPipelineCache((VkPipelineCache*)&pipelineCache);
Lingfeng Yang256f9252020-07-14 14:27:33 -07004818 pool->freeAll();
4819 countingStream->clearPool();
4820 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004821 mImpl->log("finish vkDestroyPipelineCache");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004822}
4823
4824VkResult VkEncoder::vkGetPipelineCacheData(
4825 VkDevice device,
4826 VkPipelineCache pipelineCache,
4827 size_t* pDataSize,
4828 void* pData)
4829{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004830 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004831 AEMU_SCOPED_TRACE("vkGetPipelineCacheData encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004832 mImpl->log("start vkGetPipelineCacheData");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004833 auto stream = mImpl->stream();
4834 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004835 auto resources = mImpl->resources();
4836 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004837 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004838 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004839 VkPipelineCache local_pipelineCache;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004840 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004841 local_pipelineCache = pipelineCache;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004842 countingStream->rewind();
4843 {
David Reveman9875f2c2019-06-11 21:47:12 -04004844 uint64_t cgen_var_325;
4845 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_325, 1);
4846 countingStream->write((uint64_t*)&cgen_var_325, 1 * 8);
4847 uint64_t cgen_var_326;
4848 countingStream->handleMapping()->mapHandles_VkPipelineCache_u64(&local_pipelineCache, &cgen_var_326, 1);
4849 countingStream->write((uint64_t*)&cgen_var_326, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004850 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004851 uint64_t cgen_var_327 = (uint64_t)(uintptr_t)pDataSize;
4852 countingStream->putBe64(cgen_var_327);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004853 if (pDataSize)
4854 {
David Reveman9875f2c2019-06-11 21:47:12 -04004855 uint64_t cgen_var_328 = (uint64_t)(*pDataSize);
4856 countingStream->putBe64(cgen_var_328);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004857 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004858 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004859 uint64_t cgen_var_329 = (uint64_t)(uintptr_t)pData;
4860 countingStream->putBe64(cgen_var_329);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004861 if (pData)
4862 {
4863 countingStream->write((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
4864 }
4865 }
4866 uint32_t packetSize_vkGetPipelineCacheData = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4867 countingStream->rewind();
4868 uint32_t opcode_vkGetPipelineCacheData = OP_vkGetPipelineCacheData;
4869 stream->write(&opcode_vkGetPipelineCacheData, sizeof(uint32_t));
4870 stream->write(&packetSize_vkGetPipelineCacheData, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004871 uint64_t cgen_var_330;
4872 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_330, 1);
4873 stream->write((uint64_t*)&cgen_var_330, 1 * 8);
4874 uint64_t cgen_var_331;
4875 stream->handleMapping()->mapHandles_VkPipelineCache_u64(&local_pipelineCache, &cgen_var_331, 1);
4876 stream->write((uint64_t*)&cgen_var_331, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004877 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004878 uint64_t cgen_var_332 = (uint64_t)(uintptr_t)pDataSize;
4879 stream->putBe64(cgen_var_332);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004880 if (pDataSize)
4881 {
David Reveman9875f2c2019-06-11 21:47:12 -04004882 uint64_t cgen_var_333 = (uint64_t)(*pDataSize);
4883 stream->putBe64(cgen_var_333);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004884 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004885 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04004886 uint64_t cgen_var_334 = (uint64_t)(uintptr_t)pData;
4887 stream->putBe64(cgen_var_334);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004888 if (pData)
4889 {
4890 stream->write((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
4891 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004892 AEMU_SCOPED_TRACE("vkGetPipelineCacheData readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004893 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004894 size_t* check_pDataSize;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004895 check_pDataSize = (size_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004896 if (pDataSize)
4897 {
4898 if (!(check_pDataSize))
4899 {
4900 fprintf(stderr, "fatal: pDataSize inconsistent between guest and host\n");
4901 }
Lingfeng Yangfddc0de2018-11-27 22:26:51 -08004902 (*pDataSize) = (size_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004903 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004904 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004905 void* check_pData;
Lingfeng Yang77dc2512018-11-17 12:48:37 -08004906 check_pData = (void*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004907 if (pData)
4908 {
4909 if (!(check_pData))
4910 {
4911 fprintf(stderr, "fatal: pData inconsistent between guest and host\n");
4912 }
4913 stream->read((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
4914 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004915 AEMU_SCOPED_TRACE("vkGetPipelineCacheData returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004916 VkResult vkGetPipelineCacheData_VkResult_return = (VkResult)0;
4917 stream->read(&vkGetPipelineCacheData_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07004918 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08004919 countingStream->clearPool();
4920 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004921 mImpl->log("finish vkGetPipelineCacheData");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004922 return vkGetPipelineCacheData_VkResult_return;
4923}
4924
4925VkResult VkEncoder::vkMergePipelineCaches(
4926 VkDevice device,
4927 VkPipelineCache dstCache,
4928 uint32_t srcCacheCount,
4929 const VkPipelineCache* pSrcCaches)
4930{
Lingfeng Yang256f9252020-07-14 14:27:33 -07004931 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004932 AEMU_SCOPED_TRACE("vkMergePipelineCaches encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004933 mImpl->log("start vkMergePipelineCaches");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004934 auto stream = mImpl->stream();
4935 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004936 auto resources = mImpl->resources();
4937 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08004938 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004939 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004940 VkPipelineCache local_dstCache;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004941 uint32_t local_srcCacheCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004942 VkPipelineCache* local_pSrcCaches;
Lingfeng Yang9666b852018-11-13 23:09:59 -08004943 local_device = device;
4944 local_dstCache = dstCache;
4945 local_srcCacheCount = srcCacheCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004946 local_pSrcCaches = nullptr;
4947 if (pSrcCaches)
4948 {
4949 local_pSrcCaches = (VkPipelineCache*)pool->dupArray(pSrcCaches, ((srcCacheCount)) * sizeof(const VkPipelineCache));
4950 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004951 countingStream->rewind();
4952 {
David Reveman9875f2c2019-06-11 21:47:12 -04004953 uint64_t cgen_var_338;
4954 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_338, 1);
4955 countingStream->write((uint64_t*)&cgen_var_338, 1 * 8);
4956 uint64_t cgen_var_339;
4957 countingStream->handleMapping()->mapHandles_VkPipelineCache_u64(&local_dstCache, &cgen_var_339, 1);
4958 countingStream->write((uint64_t*)&cgen_var_339, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004959 countingStream->write((uint32_t*)&local_srcCacheCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08004960 if (((srcCacheCount)))
4961 {
David Reveman9875f2c2019-06-11 21:47:12 -04004962 uint64_t* cgen_var_340;
4963 countingStream->alloc((void**)&cgen_var_340, ((srcCacheCount)) * 8);
4964 countingStream->handleMapping()->mapHandles_VkPipelineCache_u64(local_pSrcCaches, cgen_var_340, ((srcCacheCount)));
4965 countingStream->write((uint64_t*)cgen_var_340, ((srcCacheCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08004966 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004967 }
4968 uint32_t packetSize_vkMergePipelineCaches = 4 + 4 + (uint32_t)countingStream->bytesWritten();
4969 countingStream->rewind();
4970 uint32_t opcode_vkMergePipelineCaches = OP_vkMergePipelineCaches;
4971 stream->write(&opcode_vkMergePipelineCaches, sizeof(uint32_t));
4972 stream->write(&packetSize_vkMergePipelineCaches, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04004973 uint64_t cgen_var_341;
4974 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_341, 1);
4975 stream->write((uint64_t*)&cgen_var_341, 1 * 8);
4976 uint64_t cgen_var_342;
4977 stream->handleMapping()->mapHandles_VkPipelineCache_u64(&local_dstCache, &cgen_var_342, 1);
4978 stream->write((uint64_t*)&cgen_var_342, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08004979 stream->write((uint32_t*)&local_srcCacheCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08004980 if (((srcCacheCount)))
4981 {
David Reveman9875f2c2019-06-11 21:47:12 -04004982 uint64_t* cgen_var_343;
4983 stream->alloc((void**)&cgen_var_343, ((srcCacheCount)) * 8);
4984 stream->handleMapping()->mapHandles_VkPipelineCache_u64(local_pSrcCaches, cgen_var_343, ((srcCacheCount)));
4985 stream->write((uint64_t*)cgen_var_343, ((srcCacheCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08004986 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08004987 AEMU_SCOPED_TRACE("vkMergePipelineCaches readParams");
4988 AEMU_SCOPED_TRACE("vkMergePipelineCaches returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004989 VkResult vkMergePipelineCaches_VkResult_return = (VkResult)0;
4990 stream->read(&vkMergePipelineCaches_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07004991 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08004992 countingStream->clearPool();
4993 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08004994 mImpl->log("finish vkMergePipelineCaches");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07004995 return vkMergePipelineCaches_VkResult_return;
4996}
4997
4998VkResult VkEncoder::vkCreateGraphicsPipelines(
4999 VkDevice device,
5000 VkPipelineCache pipelineCache,
5001 uint32_t createInfoCount,
5002 const VkGraphicsPipelineCreateInfo* pCreateInfos,
5003 const VkAllocationCallbacks* pAllocator,
5004 VkPipeline* pPipelines)
5005{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005006 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005007 AEMU_SCOPED_TRACE("vkCreateGraphicsPipelines encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005008 mImpl->log("start vkCreateGraphicsPipelines");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005009 auto stream = mImpl->stream();
5010 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005011 auto resources = mImpl->resources();
5012 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08005013 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005014 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005015 VkPipelineCache local_pipelineCache;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005016 uint32_t local_createInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005017 VkGraphicsPipelineCreateInfo* local_pCreateInfos;
Lingfeng Yang9666b852018-11-13 23:09:59 -08005018 VkAllocationCallbacks* local_pAllocator;
5019 local_device = device;
5020 local_pipelineCache = pipelineCache;
5021 local_createInfoCount = createInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005022 local_pCreateInfos = nullptr;
5023 if (pCreateInfos)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005024 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005025 local_pCreateInfos = (VkGraphicsPipelineCreateInfo*)pool->alloc(((createInfoCount)) * sizeof(const VkGraphicsPipelineCreateInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005026 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
5027 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005028 deepcopy_VkGraphicsPipelineCreateInfo(pool, pCreateInfos + i, (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005029 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005030 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005031 local_pAllocator = nullptr;
5032 if (pAllocator)
5033 {
5034 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5035 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
5036 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005037 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08005038 if (local_pCreateInfos)
5039 {
5040 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
5041 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005042 transform_tohost_VkGraphicsPipelineCreateInfo(mImpl->resources(), (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005043 }
5044 }
5045 if (local_pAllocator)
5046 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005047 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005048 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005049 countingStream->rewind();
5050 {
David Reveman9875f2c2019-06-11 21:47:12 -04005051 uint64_t cgen_var_344;
5052 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_344, 1);
5053 countingStream->write((uint64_t*)&cgen_var_344, 1 * 8);
5054 uint64_t cgen_var_345;
5055 countingStream->handleMapping()->mapHandles_VkPipelineCache_u64(&local_pipelineCache, &cgen_var_345, 1);
5056 countingStream->write((uint64_t*)&cgen_var_345, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005057 countingStream->write((uint32_t*)&local_createInfoCount, sizeof(uint32_t));
5058 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
5059 {
5060 marshal_VkGraphicsPipelineCreateInfo(countingStream, (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i));
5061 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005062 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005063 uint64_t cgen_var_346 = (uint64_t)(uintptr_t)local_pAllocator;
5064 countingStream->putBe64(cgen_var_346);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005065 if (local_pAllocator)
5066 {
5067 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005068 }
Lingfeng Yang2285df12018-11-17 16:25:11 -08005069 if (((createInfoCount)))
5070 {
David Reveman9875f2c2019-06-11 21:47:12 -04005071 uint64_t* cgen_var_347;
5072 countingStream->alloc((void**)&cgen_var_347, ((createInfoCount)) * 8);
5073 countingStream->handleMapping()->mapHandles_VkPipeline_u64(pPipelines, cgen_var_347, ((createInfoCount)));
5074 countingStream->write((uint64_t*)cgen_var_347, ((createInfoCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08005075 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005076 }
5077 uint32_t packetSize_vkCreateGraphicsPipelines = 4 + 4 + (uint32_t)countingStream->bytesWritten();
5078 countingStream->rewind();
5079 uint32_t opcode_vkCreateGraphicsPipelines = OP_vkCreateGraphicsPipelines;
5080 stream->write(&opcode_vkCreateGraphicsPipelines, sizeof(uint32_t));
5081 stream->write(&packetSize_vkCreateGraphicsPipelines, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04005082 uint64_t cgen_var_348;
5083 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_348, 1);
5084 stream->write((uint64_t*)&cgen_var_348, 1 * 8);
5085 uint64_t cgen_var_349;
5086 stream->handleMapping()->mapHandles_VkPipelineCache_u64(&local_pipelineCache, &cgen_var_349, 1);
5087 stream->write((uint64_t*)&cgen_var_349, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005088 stream->write((uint32_t*)&local_createInfoCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005089 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
5090 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005091 marshal_VkGraphicsPipelineCreateInfo(stream, (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005092 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005093 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005094 uint64_t cgen_var_350 = (uint64_t)(uintptr_t)local_pAllocator;
5095 stream->putBe64(cgen_var_350);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005096 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005097 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005098 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005099 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08005100 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
Lingfeng Yang2285df12018-11-17 16:25:11 -08005101 if (((createInfoCount)))
5102 {
David Reveman9875f2c2019-06-11 21:47:12 -04005103 uint64_t* cgen_var_351;
5104 stream->alloc((void**)&cgen_var_351, ((createInfoCount)) * 8);
5105 stream->handleMapping()->mapHandles_VkPipeline_u64(pPipelines, cgen_var_351, ((createInfoCount)));
5106 stream->write((uint64_t*)cgen_var_351, ((createInfoCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08005107 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08005108 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005109 AEMU_SCOPED_TRACE("vkCreateGraphicsPipelines readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08005110 stream->setHandleMapping(resources->createMapping());
Lingfeng Yang2285df12018-11-17 16:25:11 -08005111 if (((createInfoCount)))
5112 {
David Reveman9875f2c2019-06-11 21:47:12 -04005113 uint64_t* cgen_var_352;
5114 stream->alloc((void**)&cgen_var_352, ((createInfoCount)) * 8);
5115 stream->read((uint64_t*)cgen_var_352, ((createInfoCount)) * 8);
5116 stream->handleMapping()->mapHandles_u64_VkPipeline(cgen_var_352, (VkPipeline*)pPipelines, ((createInfoCount)));
Lingfeng Yang2285df12018-11-17 16:25:11 -08005117 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08005118 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005119 AEMU_SCOPED_TRACE("vkCreateGraphicsPipelines returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005120 VkResult vkCreateGraphicsPipelines_VkResult_return = (VkResult)0;
5121 stream->read(&vkCreateGraphicsPipelines_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07005122 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08005123 countingStream->clearPool();
5124 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005125 mImpl->log("finish vkCreateGraphicsPipelines");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005126 return vkCreateGraphicsPipelines_VkResult_return;
5127}
5128
5129VkResult VkEncoder::vkCreateComputePipelines(
5130 VkDevice device,
5131 VkPipelineCache pipelineCache,
5132 uint32_t createInfoCount,
5133 const VkComputePipelineCreateInfo* pCreateInfos,
5134 const VkAllocationCallbacks* pAllocator,
5135 VkPipeline* pPipelines)
5136{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005137 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005138 AEMU_SCOPED_TRACE("vkCreateComputePipelines encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005139 mImpl->log("start vkCreateComputePipelines");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005140 auto stream = mImpl->stream();
5141 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005142 auto resources = mImpl->resources();
5143 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08005144 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005145 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005146 VkPipelineCache local_pipelineCache;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005147 uint32_t local_createInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005148 VkComputePipelineCreateInfo* local_pCreateInfos;
Lingfeng Yang9666b852018-11-13 23:09:59 -08005149 VkAllocationCallbacks* local_pAllocator;
5150 local_device = device;
5151 local_pipelineCache = pipelineCache;
5152 local_createInfoCount = createInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005153 local_pCreateInfos = nullptr;
5154 if (pCreateInfos)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005155 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005156 local_pCreateInfos = (VkComputePipelineCreateInfo*)pool->alloc(((createInfoCount)) * sizeof(const VkComputePipelineCreateInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005157 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
5158 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005159 deepcopy_VkComputePipelineCreateInfo(pool, pCreateInfos + i, (VkComputePipelineCreateInfo*)(local_pCreateInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005160 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005161 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005162 local_pAllocator = nullptr;
5163 if (pAllocator)
5164 {
5165 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5166 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
5167 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005168 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08005169 if (local_pCreateInfos)
5170 {
5171 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
5172 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005173 transform_tohost_VkComputePipelineCreateInfo(mImpl->resources(), (VkComputePipelineCreateInfo*)(local_pCreateInfos + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005174 }
5175 }
5176 if (local_pAllocator)
5177 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005178 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005179 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005180 countingStream->rewind();
5181 {
David Reveman9875f2c2019-06-11 21:47:12 -04005182 uint64_t cgen_var_353;
5183 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_353, 1);
5184 countingStream->write((uint64_t*)&cgen_var_353, 1 * 8);
5185 uint64_t cgen_var_354;
5186 countingStream->handleMapping()->mapHandles_VkPipelineCache_u64(&local_pipelineCache, &cgen_var_354, 1);
5187 countingStream->write((uint64_t*)&cgen_var_354, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005188 countingStream->write((uint32_t*)&local_createInfoCount, sizeof(uint32_t));
5189 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
5190 {
5191 marshal_VkComputePipelineCreateInfo(countingStream, (VkComputePipelineCreateInfo*)(local_pCreateInfos + i));
5192 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005193 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005194 uint64_t cgen_var_355 = (uint64_t)(uintptr_t)local_pAllocator;
5195 countingStream->putBe64(cgen_var_355);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005196 if (local_pAllocator)
5197 {
5198 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005199 }
Lingfeng Yang2285df12018-11-17 16:25:11 -08005200 if (((createInfoCount)))
5201 {
David Reveman9875f2c2019-06-11 21:47:12 -04005202 uint64_t* cgen_var_356;
5203 countingStream->alloc((void**)&cgen_var_356, ((createInfoCount)) * 8);
5204 countingStream->handleMapping()->mapHandles_VkPipeline_u64(pPipelines, cgen_var_356, ((createInfoCount)));
5205 countingStream->write((uint64_t*)cgen_var_356, ((createInfoCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08005206 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005207 }
5208 uint32_t packetSize_vkCreateComputePipelines = 4 + 4 + (uint32_t)countingStream->bytesWritten();
5209 countingStream->rewind();
5210 uint32_t opcode_vkCreateComputePipelines = OP_vkCreateComputePipelines;
5211 stream->write(&opcode_vkCreateComputePipelines, sizeof(uint32_t));
5212 stream->write(&packetSize_vkCreateComputePipelines, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04005213 uint64_t cgen_var_357;
5214 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_357, 1);
5215 stream->write((uint64_t*)&cgen_var_357, 1 * 8);
5216 uint64_t cgen_var_358;
5217 stream->handleMapping()->mapHandles_VkPipelineCache_u64(&local_pipelineCache, &cgen_var_358, 1);
5218 stream->write((uint64_t*)&cgen_var_358, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005219 stream->write((uint32_t*)&local_createInfoCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005220 for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
5221 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005222 marshal_VkComputePipelineCreateInfo(stream, (VkComputePipelineCreateInfo*)(local_pCreateInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005223 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005224 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005225 uint64_t cgen_var_359 = (uint64_t)(uintptr_t)local_pAllocator;
5226 stream->putBe64(cgen_var_359);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005227 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005228 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005229 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005230 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08005231 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
Lingfeng Yang2285df12018-11-17 16:25:11 -08005232 if (((createInfoCount)))
5233 {
David Reveman9875f2c2019-06-11 21:47:12 -04005234 uint64_t* cgen_var_360;
5235 stream->alloc((void**)&cgen_var_360, ((createInfoCount)) * 8);
5236 stream->handleMapping()->mapHandles_VkPipeline_u64(pPipelines, cgen_var_360, ((createInfoCount)));
5237 stream->write((uint64_t*)cgen_var_360, ((createInfoCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08005238 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08005239 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005240 AEMU_SCOPED_TRACE("vkCreateComputePipelines readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08005241 stream->setHandleMapping(resources->createMapping());
Lingfeng Yang2285df12018-11-17 16:25:11 -08005242 if (((createInfoCount)))
5243 {
David Reveman9875f2c2019-06-11 21:47:12 -04005244 uint64_t* cgen_var_361;
5245 stream->alloc((void**)&cgen_var_361, ((createInfoCount)) * 8);
5246 stream->read((uint64_t*)cgen_var_361, ((createInfoCount)) * 8);
5247 stream->handleMapping()->mapHandles_u64_VkPipeline(cgen_var_361, (VkPipeline*)pPipelines, ((createInfoCount)));
Lingfeng Yang2285df12018-11-17 16:25:11 -08005248 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08005249 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005250 AEMU_SCOPED_TRACE("vkCreateComputePipelines returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005251 VkResult vkCreateComputePipelines_VkResult_return = (VkResult)0;
5252 stream->read(&vkCreateComputePipelines_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07005253 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08005254 countingStream->clearPool();
5255 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005256 mImpl->log("finish vkCreateComputePipelines");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005257 return vkCreateComputePipelines_VkResult_return;
5258}
5259
5260void VkEncoder::vkDestroyPipeline(
5261 VkDevice device,
5262 VkPipeline pipeline,
5263 const VkAllocationCallbacks* pAllocator)
5264{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005265 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005266 AEMU_SCOPED_TRACE("vkDestroyPipeline encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005267 mImpl->log("start vkDestroyPipeline");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005268 auto stream = mImpl->stream();
5269 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005270 auto resources = mImpl->resources();
5271 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08005272 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005273 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005274 VkPipeline local_pipeline;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005275 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08005276 local_device = device;
5277 local_pipeline = pipeline;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005278 local_pAllocator = nullptr;
5279 if (pAllocator)
5280 {
5281 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5282 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
5283 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005284 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08005285 if (local_pAllocator)
5286 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005287 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005288 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005289 countingStream->rewind();
5290 {
David Reveman9875f2c2019-06-11 21:47:12 -04005291 uint64_t cgen_var_362;
5292 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_362, 1);
5293 countingStream->write((uint64_t*)&cgen_var_362, 1 * 8);
5294 uint64_t cgen_var_363;
5295 countingStream->handleMapping()->mapHandles_VkPipeline_u64(&local_pipeline, &cgen_var_363, 1);
5296 countingStream->write((uint64_t*)&cgen_var_363, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005297 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005298 uint64_t cgen_var_364 = (uint64_t)(uintptr_t)local_pAllocator;
5299 countingStream->putBe64(cgen_var_364);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005300 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005301 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005302 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005303 }
5304 }
5305 uint32_t packetSize_vkDestroyPipeline = 4 + 4 + (uint32_t)countingStream->bytesWritten();
5306 countingStream->rewind();
5307 uint32_t opcode_vkDestroyPipeline = OP_vkDestroyPipeline;
5308 stream->write(&opcode_vkDestroyPipeline, sizeof(uint32_t));
5309 stream->write(&packetSize_vkDestroyPipeline, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04005310 uint64_t cgen_var_365;
5311 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_365, 1);
5312 stream->write((uint64_t*)&cgen_var_365, 1 * 8);
5313 uint64_t cgen_var_366;
5314 stream->handleMapping()->mapHandles_VkPipeline_u64(&local_pipeline, &cgen_var_366, 1);
5315 stream->write((uint64_t*)&cgen_var_366, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005316 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005317 uint64_t cgen_var_367 = (uint64_t)(uintptr_t)local_pAllocator;
5318 stream->putBe64(cgen_var_367);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005319 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005320 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005321 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005322 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005323 AEMU_SCOPED_TRACE("vkDestroyPipeline readParams");
5324 AEMU_SCOPED_TRACE("vkDestroyPipeline returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005325 resources->destroyMapping()->mapHandles_VkPipeline((VkPipeline*)&pipeline);
Lingfeng Yang256f9252020-07-14 14:27:33 -07005326 pool->freeAll();
5327 countingStream->clearPool();
5328 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005329 mImpl->log("finish vkDestroyPipeline");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005330}
5331
5332VkResult VkEncoder::vkCreatePipelineLayout(
5333 VkDevice device,
5334 const VkPipelineLayoutCreateInfo* pCreateInfo,
5335 const VkAllocationCallbacks* pAllocator,
5336 VkPipelineLayout* pPipelineLayout)
5337{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005338 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005339 AEMU_SCOPED_TRACE("vkCreatePipelineLayout encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005340 mImpl->log("start vkCreatePipelineLayout");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005341 auto stream = mImpl->stream();
5342 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005343 auto resources = mImpl->resources();
5344 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08005345 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005346 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005347 VkPipelineLayoutCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08005348 VkAllocationCallbacks* local_pAllocator;
5349 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005350 local_pCreateInfo = nullptr;
5351 if (pCreateInfo)
5352 {
5353 local_pCreateInfo = (VkPipelineLayoutCreateInfo*)pool->alloc(sizeof(const VkPipelineLayoutCreateInfo));
5354 deepcopy_VkPipelineLayoutCreateInfo(pool, pCreateInfo, (VkPipelineLayoutCreateInfo*)(local_pCreateInfo));
5355 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005356 local_pAllocator = nullptr;
5357 if (pAllocator)
5358 {
5359 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5360 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
5361 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005362 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08005363 if (local_pCreateInfo)
5364 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005365 transform_tohost_VkPipelineLayoutCreateInfo(mImpl->resources(), (VkPipelineLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005366 }
5367 if (local_pAllocator)
5368 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005369 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005370 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005371 countingStream->rewind();
5372 {
David Reveman9875f2c2019-06-11 21:47:12 -04005373 uint64_t cgen_var_368;
5374 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_368, 1);
5375 countingStream->write((uint64_t*)&cgen_var_368, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005376 marshal_VkPipelineLayoutCreateInfo(countingStream, (VkPipelineLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005377 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005378 uint64_t cgen_var_369 = (uint64_t)(uintptr_t)local_pAllocator;
5379 countingStream->putBe64(cgen_var_369);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005380 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005381 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005382 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005383 }
David Reveman9875f2c2019-06-11 21:47:12 -04005384 uint64_t cgen_var_370;
5385 countingStream->handleMapping()->mapHandles_VkPipelineLayout_u64(pPipelineLayout, &cgen_var_370, 1);
5386 countingStream->write((uint64_t*)&cgen_var_370, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005387 }
5388 uint32_t packetSize_vkCreatePipelineLayout = 4 + 4 + (uint32_t)countingStream->bytesWritten();
5389 countingStream->rewind();
5390 uint32_t opcode_vkCreatePipelineLayout = OP_vkCreatePipelineLayout;
5391 stream->write(&opcode_vkCreatePipelineLayout, sizeof(uint32_t));
5392 stream->write(&packetSize_vkCreatePipelineLayout, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04005393 uint64_t cgen_var_371;
5394 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_371, 1);
5395 stream->write((uint64_t*)&cgen_var_371, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005396 marshal_VkPipelineLayoutCreateInfo(stream, (VkPipelineLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005397 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005398 uint64_t cgen_var_372 = (uint64_t)(uintptr_t)local_pAllocator;
5399 stream->putBe64(cgen_var_372);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005400 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005401 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005402 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005403 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08005404 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04005405 uint64_t cgen_var_373;
5406 stream->handleMapping()->mapHandles_VkPipelineLayout_u64(pPipelineLayout, &cgen_var_373, 1);
5407 stream->write((uint64_t*)&cgen_var_373, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08005408 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005409 AEMU_SCOPED_TRACE("vkCreatePipelineLayout readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08005410 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04005411 uint64_t cgen_var_374;
5412 stream->read((uint64_t*)&cgen_var_374, 8);
5413 stream->handleMapping()->mapHandles_u64_VkPipelineLayout(&cgen_var_374, (VkPipelineLayout*)pPipelineLayout, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08005414 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005415 AEMU_SCOPED_TRACE("vkCreatePipelineLayout returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005416 VkResult vkCreatePipelineLayout_VkResult_return = (VkResult)0;
5417 stream->read(&vkCreatePipelineLayout_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07005418 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08005419 countingStream->clearPool();
5420 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005421 mImpl->log("finish vkCreatePipelineLayout");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005422 return vkCreatePipelineLayout_VkResult_return;
5423}
5424
5425void VkEncoder::vkDestroyPipelineLayout(
5426 VkDevice device,
5427 VkPipelineLayout pipelineLayout,
5428 const VkAllocationCallbacks* pAllocator)
5429{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005430 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005431 AEMU_SCOPED_TRACE("vkDestroyPipelineLayout encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005432 mImpl->log("start vkDestroyPipelineLayout");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005433 auto stream = mImpl->stream();
5434 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005435 auto resources = mImpl->resources();
5436 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08005437 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005438 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005439 VkPipelineLayout local_pipelineLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005440 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08005441 local_device = device;
5442 local_pipelineLayout = pipelineLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005443 local_pAllocator = nullptr;
5444 if (pAllocator)
5445 {
5446 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5447 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
5448 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005449 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08005450 if (local_pAllocator)
5451 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005452 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005453 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005454 countingStream->rewind();
5455 {
David Reveman9875f2c2019-06-11 21:47:12 -04005456 uint64_t cgen_var_375;
5457 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_375, 1);
5458 countingStream->write((uint64_t*)&cgen_var_375, 1 * 8);
5459 uint64_t cgen_var_376;
5460 countingStream->handleMapping()->mapHandles_VkPipelineLayout_u64(&local_pipelineLayout, &cgen_var_376, 1);
5461 countingStream->write((uint64_t*)&cgen_var_376, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005462 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005463 uint64_t cgen_var_377 = (uint64_t)(uintptr_t)local_pAllocator;
5464 countingStream->putBe64(cgen_var_377);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005465 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005466 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005467 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005468 }
5469 }
5470 uint32_t packetSize_vkDestroyPipelineLayout = 4 + 4 + (uint32_t)countingStream->bytesWritten();
5471 countingStream->rewind();
5472 uint32_t opcode_vkDestroyPipelineLayout = OP_vkDestroyPipelineLayout;
5473 stream->write(&opcode_vkDestroyPipelineLayout, sizeof(uint32_t));
5474 stream->write(&packetSize_vkDestroyPipelineLayout, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04005475 uint64_t cgen_var_378;
5476 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_378, 1);
5477 stream->write((uint64_t*)&cgen_var_378, 1 * 8);
5478 uint64_t cgen_var_379;
5479 stream->handleMapping()->mapHandles_VkPipelineLayout_u64(&local_pipelineLayout, &cgen_var_379, 1);
5480 stream->write((uint64_t*)&cgen_var_379, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005481 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005482 uint64_t cgen_var_380 = (uint64_t)(uintptr_t)local_pAllocator;
5483 stream->putBe64(cgen_var_380);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005484 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005485 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005486 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005487 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005488 AEMU_SCOPED_TRACE("vkDestroyPipelineLayout readParams");
5489 AEMU_SCOPED_TRACE("vkDestroyPipelineLayout returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005490 resources->destroyMapping()->mapHandles_VkPipelineLayout((VkPipelineLayout*)&pipelineLayout);
Lingfeng Yang256f9252020-07-14 14:27:33 -07005491 pool->freeAll();
5492 countingStream->clearPool();
5493 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005494 mImpl->log("finish vkDestroyPipelineLayout");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005495}
5496
5497VkResult VkEncoder::vkCreateSampler(
5498 VkDevice device,
5499 const VkSamplerCreateInfo* pCreateInfo,
5500 const VkAllocationCallbacks* pAllocator,
5501 VkSampler* pSampler)
5502{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005503 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005504 AEMU_SCOPED_TRACE("vkCreateSampler encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005505 mImpl->log("start vkCreateSampler");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005506 auto stream = mImpl->stream();
5507 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005508 auto resources = mImpl->resources();
5509 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08005510 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005511 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005512 VkSamplerCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08005513 VkAllocationCallbacks* local_pAllocator;
5514 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005515 local_pCreateInfo = nullptr;
5516 if (pCreateInfo)
5517 {
5518 local_pCreateInfo = (VkSamplerCreateInfo*)pool->alloc(sizeof(const VkSamplerCreateInfo));
5519 deepcopy_VkSamplerCreateInfo(pool, pCreateInfo, (VkSamplerCreateInfo*)(local_pCreateInfo));
5520 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005521 local_pAllocator = nullptr;
5522 if (pAllocator)
5523 {
5524 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5525 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
5526 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005527 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08005528 if (local_pCreateInfo)
5529 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005530 transform_tohost_VkSamplerCreateInfo(mImpl->resources(), (VkSamplerCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005531 }
5532 if (local_pAllocator)
5533 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005534 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005535 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005536 countingStream->rewind();
5537 {
David Reveman9875f2c2019-06-11 21:47:12 -04005538 uint64_t cgen_var_381;
5539 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_381, 1);
5540 countingStream->write((uint64_t*)&cgen_var_381, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005541 marshal_VkSamplerCreateInfo(countingStream, (VkSamplerCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005542 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005543 uint64_t cgen_var_382 = (uint64_t)(uintptr_t)local_pAllocator;
5544 countingStream->putBe64(cgen_var_382);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005545 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005546 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005547 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005548 }
David Reveman9875f2c2019-06-11 21:47:12 -04005549 uint64_t cgen_var_383;
5550 countingStream->handleMapping()->mapHandles_VkSampler_u64(pSampler, &cgen_var_383, 1);
5551 countingStream->write((uint64_t*)&cgen_var_383, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005552 }
5553 uint32_t packetSize_vkCreateSampler = 4 + 4 + (uint32_t)countingStream->bytesWritten();
5554 countingStream->rewind();
5555 uint32_t opcode_vkCreateSampler = OP_vkCreateSampler;
5556 stream->write(&opcode_vkCreateSampler, sizeof(uint32_t));
5557 stream->write(&packetSize_vkCreateSampler, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04005558 uint64_t cgen_var_384;
5559 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_384, 1);
5560 stream->write((uint64_t*)&cgen_var_384, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005561 marshal_VkSamplerCreateInfo(stream, (VkSamplerCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005562 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005563 uint64_t cgen_var_385 = (uint64_t)(uintptr_t)local_pAllocator;
5564 stream->putBe64(cgen_var_385);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005565 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005566 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005567 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005568 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08005569 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04005570 uint64_t cgen_var_386;
5571 stream->handleMapping()->mapHandles_VkSampler_u64(pSampler, &cgen_var_386, 1);
5572 stream->write((uint64_t*)&cgen_var_386, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08005573 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005574 AEMU_SCOPED_TRACE("vkCreateSampler readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08005575 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04005576 uint64_t cgen_var_387;
5577 stream->read((uint64_t*)&cgen_var_387, 8);
5578 stream->handleMapping()->mapHandles_u64_VkSampler(&cgen_var_387, (VkSampler*)pSampler, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08005579 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005580 AEMU_SCOPED_TRACE("vkCreateSampler returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005581 VkResult vkCreateSampler_VkResult_return = (VkResult)0;
5582 stream->read(&vkCreateSampler_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07005583 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08005584 countingStream->clearPool();
5585 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005586 mImpl->log("finish vkCreateSampler");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005587 return vkCreateSampler_VkResult_return;
5588}
5589
5590void VkEncoder::vkDestroySampler(
5591 VkDevice device,
5592 VkSampler sampler,
5593 const VkAllocationCallbacks* pAllocator)
5594{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005595 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005596 AEMU_SCOPED_TRACE("vkDestroySampler encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005597 mImpl->log("start vkDestroySampler");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005598 auto stream = mImpl->stream();
5599 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005600 auto resources = mImpl->resources();
5601 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08005602 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005603 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005604 VkSampler local_sampler;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005605 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08005606 local_device = device;
5607 local_sampler = sampler;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005608 local_pAllocator = nullptr;
5609 if (pAllocator)
5610 {
5611 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5612 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
5613 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005614 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08005615 if (local_pAllocator)
5616 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005617 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005618 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005619 countingStream->rewind();
5620 {
David Reveman9875f2c2019-06-11 21:47:12 -04005621 uint64_t cgen_var_388;
5622 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_388, 1);
5623 countingStream->write((uint64_t*)&cgen_var_388, 1 * 8);
5624 uint64_t cgen_var_389;
5625 countingStream->handleMapping()->mapHandles_VkSampler_u64(&local_sampler, &cgen_var_389, 1);
5626 countingStream->write((uint64_t*)&cgen_var_389, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005627 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005628 uint64_t cgen_var_390 = (uint64_t)(uintptr_t)local_pAllocator;
5629 countingStream->putBe64(cgen_var_390);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005630 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005631 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005632 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005633 }
5634 }
5635 uint32_t packetSize_vkDestroySampler = 4 + 4 + (uint32_t)countingStream->bytesWritten();
5636 countingStream->rewind();
5637 uint32_t opcode_vkDestroySampler = OP_vkDestroySampler;
5638 stream->write(&opcode_vkDestroySampler, sizeof(uint32_t));
5639 stream->write(&packetSize_vkDestroySampler, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04005640 uint64_t cgen_var_391;
5641 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_391, 1);
5642 stream->write((uint64_t*)&cgen_var_391, 1 * 8);
5643 uint64_t cgen_var_392;
5644 stream->handleMapping()->mapHandles_VkSampler_u64(&local_sampler, &cgen_var_392, 1);
5645 stream->write((uint64_t*)&cgen_var_392, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005646 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005647 uint64_t cgen_var_393 = (uint64_t)(uintptr_t)local_pAllocator;
5648 stream->putBe64(cgen_var_393);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005649 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005650 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005651 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005652 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005653 AEMU_SCOPED_TRACE("vkDestroySampler readParams");
5654 AEMU_SCOPED_TRACE("vkDestroySampler returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005655 resources->destroyMapping()->mapHandles_VkSampler((VkSampler*)&sampler);
Lingfeng Yang256f9252020-07-14 14:27:33 -07005656 pool->freeAll();
5657 countingStream->clearPool();
5658 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005659 mImpl->log("finish vkDestroySampler");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005660}
5661
5662VkResult VkEncoder::vkCreateDescriptorSetLayout(
5663 VkDevice device,
5664 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5665 const VkAllocationCallbacks* pAllocator,
5666 VkDescriptorSetLayout* pSetLayout)
5667{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005668 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005669 AEMU_SCOPED_TRACE("vkCreateDescriptorSetLayout encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005670 mImpl->log("start vkCreateDescriptorSetLayout");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005671 auto stream = mImpl->stream();
5672 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005673 auto resources = mImpl->resources();
5674 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08005675 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005676 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005677 VkDescriptorSetLayoutCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08005678 VkAllocationCallbacks* local_pAllocator;
5679 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005680 local_pCreateInfo = nullptr;
5681 if (pCreateInfo)
5682 {
5683 local_pCreateInfo = (VkDescriptorSetLayoutCreateInfo*)pool->alloc(sizeof(const VkDescriptorSetLayoutCreateInfo));
5684 deepcopy_VkDescriptorSetLayoutCreateInfo(pool, pCreateInfo, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
5685 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005686 local_pAllocator = nullptr;
5687 if (pAllocator)
5688 {
5689 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5690 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
5691 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005692 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08005693 if (local_pCreateInfo)
5694 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005695 transform_tohost_VkDescriptorSetLayoutCreateInfo(mImpl->resources(), (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005696 }
5697 if (local_pAllocator)
5698 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005699 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005700 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005701 countingStream->rewind();
5702 {
David Reveman9875f2c2019-06-11 21:47:12 -04005703 uint64_t cgen_var_394;
5704 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_394, 1);
5705 countingStream->write((uint64_t*)&cgen_var_394, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005706 marshal_VkDescriptorSetLayoutCreateInfo(countingStream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005707 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005708 uint64_t cgen_var_395 = (uint64_t)(uintptr_t)local_pAllocator;
5709 countingStream->putBe64(cgen_var_395);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005710 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005711 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005712 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005713 }
David Reveman9875f2c2019-06-11 21:47:12 -04005714 uint64_t cgen_var_396;
5715 countingStream->handleMapping()->mapHandles_VkDescriptorSetLayout_u64(pSetLayout, &cgen_var_396, 1);
5716 countingStream->write((uint64_t*)&cgen_var_396, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005717 }
5718 uint32_t packetSize_vkCreateDescriptorSetLayout = 4 + 4 + (uint32_t)countingStream->bytesWritten();
5719 countingStream->rewind();
5720 uint32_t opcode_vkCreateDescriptorSetLayout = OP_vkCreateDescriptorSetLayout;
5721 stream->write(&opcode_vkCreateDescriptorSetLayout, sizeof(uint32_t));
5722 stream->write(&packetSize_vkCreateDescriptorSetLayout, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04005723 uint64_t cgen_var_397;
5724 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_397, 1);
5725 stream->write((uint64_t*)&cgen_var_397, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005726 marshal_VkDescriptorSetLayoutCreateInfo(stream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005727 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005728 uint64_t cgen_var_398 = (uint64_t)(uintptr_t)local_pAllocator;
5729 stream->putBe64(cgen_var_398);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005730 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005731 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005732 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005733 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08005734 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04005735 uint64_t cgen_var_399;
5736 stream->handleMapping()->mapHandles_VkDescriptorSetLayout_u64(pSetLayout, &cgen_var_399, 1);
5737 stream->write((uint64_t*)&cgen_var_399, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08005738 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005739 AEMU_SCOPED_TRACE("vkCreateDescriptorSetLayout readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08005740 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04005741 uint64_t cgen_var_400;
5742 stream->read((uint64_t*)&cgen_var_400, 8);
5743 stream->handleMapping()->mapHandles_u64_VkDescriptorSetLayout(&cgen_var_400, (VkDescriptorSetLayout*)pSetLayout, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08005744 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005745 AEMU_SCOPED_TRACE("vkCreateDescriptorSetLayout returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005746 VkResult vkCreateDescriptorSetLayout_VkResult_return = (VkResult)0;
5747 stream->read(&vkCreateDescriptorSetLayout_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07005748 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08005749 countingStream->clearPool();
5750 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005751 mImpl->log("finish vkCreateDescriptorSetLayout");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005752 return vkCreateDescriptorSetLayout_VkResult_return;
5753}
5754
5755void VkEncoder::vkDestroyDescriptorSetLayout(
5756 VkDevice device,
5757 VkDescriptorSetLayout descriptorSetLayout,
5758 const VkAllocationCallbacks* pAllocator)
5759{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005760 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005761 AEMU_SCOPED_TRACE("vkDestroyDescriptorSetLayout encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005762 mImpl->log("start vkDestroyDescriptorSetLayout");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005763 auto stream = mImpl->stream();
5764 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005765 auto resources = mImpl->resources();
5766 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08005767 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005768 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005769 VkDescriptorSetLayout local_descriptorSetLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005770 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08005771 local_device = device;
5772 local_descriptorSetLayout = descriptorSetLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005773 local_pAllocator = nullptr;
5774 if (pAllocator)
5775 {
5776 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5777 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
5778 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005779 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08005780 if (local_pAllocator)
5781 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005782 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005783 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005784 countingStream->rewind();
5785 {
David Reveman9875f2c2019-06-11 21:47:12 -04005786 uint64_t cgen_var_401;
5787 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_401, 1);
5788 countingStream->write((uint64_t*)&cgen_var_401, 1 * 8);
5789 uint64_t cgen_var_402;
5790 countingStream->handleMapping()->mapHandles_VkDescriptorSetLayout_u64(&local_descriptorSetLayout, &cgen_var_402, 1);
5791 countingStream->write((uint64_t*)&cgen_var_402, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005792 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005793 uint64_t cgen_var_403 = (uint64_t)(uintptr_t)local_pAllocator;
5794 countingStream->putBe64(cgen_var_403);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005795 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005796 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005797 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005798 }
5799 }
5800 uint32_t packetSize_vkDestroyDescriptorSetLayout = 4 + 4 + (uint32_t)countingStream->bytesWritten();
5801 countingStream->rewind();
5802 uint32_t opcode_vkDestroyDescriptorSetLayout = OP_vkDestroyDescriptorSetLayout;
5803 stream->write(&opcode_vkDestroyDescriptorSetLayout, sizeof(uint32_t));
5804 stream->write(&packetSize_vkDestroyDescriptorSetLayout, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04005805 uint64_t cgen_var_404;
5806 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_404, 1);
5807 stream->write((uint64_t*)&cgen_var_404, 1 * 8);
5808 uint64_t cgen_var_405;
5809 stream->handleMapping()->mapHandles_VkDescriptorSetLayout_u64(&local_descriptorSetLayout, &cgen_var_405, 1);
5810 stream->write((uint64_t*)&cgen_var_405, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005811 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005812 uint64_t cgen_var_406 = (uint64_t)(uintptr_t)local_pAllocator;
5813 stream->putBe64(cgen_var_406);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005814 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005815 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005816 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005817 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005818 AEMU_SCOPED_TRACE("vkDestroyDescriptorSetLayout readParams");
5819 AEMU_SCOPED_TRACE("vkDestroyDescriptorSetLayout returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005820 resources->destroyMapping()->mapHandles_VkDescriptorSetLayout((VkDescriptorSetLayout*)&descriptorSetLayout);
Lingfeng Yang256f9252020-07-14 14:27:33 -07005821 pool->freeAll();
5822 countingStream->clearPool();
5823 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005824 mImpl->log("finish vkDestroyDescriptorSetLayout");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005825}
5826
5827VkResult VkEncoder::vkCreateDescriptorPool(
5828 VkDevice device,
5829 const VkDescriptorPoolCreateInfo* pCreateInfo,
5830 const VkAllocationCallbacks* pAllocator,
5831 VkDescriptorPool* pDescriptorPool)
5832{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005833 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005834 AEMU_SCOPED_TRACE("vkCreateDescriptorPool encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005835 mImpl->log("start vkCreateDescriptorPool");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005836 auto stream = mImpl->stream();
5837 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005838 auto resources = mImpl->resources();
5839 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08005840 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005841 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005842 VkDescriptorPoolCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08005843 VkAllocationCallbacks* local_pAllocator;
5844 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005845 local_pCreateInfo = nullptr;
5846 if (pCreateInfo)
5847 {
5848 local_pCreateInfo = (VkDescriptorPoolCreateInfo*)pool->alloc(sizeof(const VkDescriptorPoolCreateInfo));
5849 deepcopy_VkDescriptorPoolCreateInfo(pool, pCreateInfo, (VkDescriptorPoolCreateInfo*)(local_pCreateInfo));
5850 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005851 local_pAllocator = nullptr;
5852 if (pAllocator)
5853 {
5854 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5855 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
5856 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005857 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08005858 if (local_pCreateInfo)
5859 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005860 transform_tohost_VkDescriptorPoolCreateInfo(mImpl->resources(), (VkDescriptorPoolCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005861 }
5862 if (local_pAllocator)
5863 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005864 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005865 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005866 countingStream->rewind();
5867 {
David Reveman9875f2c2019-06-11 21:47:12 -04005868 uint64_t cgen_var_407;
5869 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_407, 1);
5870 countingStream->write((uint64_t*)&cgen_var_407, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005871 marshal_VkDescriptorPoolCreateInfo(countingStream, (VkDescriptorPoolCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005872 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005873 uint64_t cgen_var_408 = (uint64_t)(uintptr_t)local_pAllocator;
5874 countingStream->putBe64(cgen_var_408);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005875 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005876 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005877 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005878 }
David Reveman9875f2c2019-06-11 21:47:12 -04005879 uint64_t cgen_var_409;
5880 countingStream->handleMapping()->mapHandles_VkDescriptorPool_u64(pDescriptorPool, &cgen_var_409, 1);
5881 countingStream->write((uint64_t*)&cgen_var_409, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005882 }
5883 uint32_t packetSize_vkCreateDescriptorPool = 4 + 4 + (uint32_t)countingStream->bytesWritten();
5884 countingStream->rewind();
5885 uint32_t opcode_vkCreateDescriptorPool = OP_vkCreateDescriptorPool;
5886 stream->write(&opcode_vkCreateDescriptorPool, sizeof(uint32_t));
5887 stream->write(&packetSize_vkCreateDescriptorPool, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04005888 uint64_t cgen_var_410;
5889 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_410, 1);
5890 stream->write((uint64_t*)&cgen_var_410, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005891 marshal_VkDescriptorPoolCreateInfo(stream, (VkDescriptorPoolCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005892 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005893 uint64_t cgen_var_411 = (uint64_t)(uintptr_t)local_pAllocator;
5894 stream->putBe64(cgen_var_411);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005895 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005896 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005897 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005898 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08005899 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04005900 uint64_t cgen_var_412;
5901 stream->handleMapping()->mapHandles_VkDescriptorPool_u64(pDescriptorPool, &cgen_var_412, 1);
5902 stream->write((uint64_t*)&cgen_var_412, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08005903 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005904 AEMU_SCOPED_TRACE("vkCreateDescriptorPool readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08005905 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04005906 uint64_t cgen_var_413;
5907 stream->read((uint64_t*)&cgen_var_413, 8);
5908 stream->handleMapping()->mapHandles_u64_VkDescriptorPool(&cgen_var_413, (VkDescriptorPool*)pDescriptorPool, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08005909 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005910 AEMU_SCOPED_TRACE("vkCreateDescriptorPool returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005911 VkResult vkCreateDescriptorPool_VkResult_return = (VkResult)0;
5912 stream->read(&vkCreateDescriptorPool_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07005913 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08005914 countingStream->clearPool();
5915 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005916 mImpl->log("finish vkCreateDescriptorPool");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005917 return vkCreateDescriptorPool_VkResult_return;
5918}
5919
5920void VkEncoder::vkDestroyDescriptorPool(
5921 VkDevice device,
5922 VkDescriptorPool descriptorPool,
5923 const VkAllocationCallbacks* pAllocator)
5924{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005925 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005926 AEMU_SCOPED_TRACE("vkDestroyDescriptorPool encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005927 mImpl->log("start vkDestroyDescriptorPool");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005928 auto stream = mImpl->stream();
5929 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005930 auto resources = mImpl->resources();
5931 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08005932 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005933 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005934 VkDescriptorPool local_descriptorPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005935 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08005936 local_device = device;
5937 local_descriptorPool = descriptorPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005938 local_pAllocator = nullptr;
5939 if (pAllocator)
5940 {
5941 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
5942 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
5943 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08005944 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08005945 if (local_pAllocator)
5946 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08005947 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08005948 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005949 countingStream->rewind();
5950 {
David Reveman9875f2c2019-06-11 21:47:12 -04005951 uint64_t cgen_var_414;
5952 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_414, 1);
5953 countingStream->write((uint64_t*)&cgen_var_414, 1 * 8);
5954 uint64_t cgen_var_415;
5955 countingStream->handleMapping()->mapHandles_VkDescriptorPool_u64(&local_descriptorPool, &cgen_var_415, 1);
5956 countingStream->write((uint64_t*)&cgen_var_415, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005957 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005958 uint64_t cgen_var_416 = (uint64_t)(uintptr_t)local_pAllocator;
5959 countingStream->putBe64(cgen_var_416);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005960 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005961 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005962 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005963 }
5964 }
5965 uint32_t packetSize_vkDestroyDescriptorPool = 4 + 4 + (uint32_t)countingStream->bytesWritten();
5966 countingStream->rewind();
5967 uint32_t opcode_vkDestroyDescriptorPool = OP_vkDestroyDescriptorPool;
5968 stream->write(&opcode_vkDestroyDescriptorPool, sizeof(uint32_t));
5969 stream->write(&packetSize_vkDestroyDescriptorPool, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04005970 uint64_t cgen_var_417;
5971 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_417, 1);
5972 stream->write((uint64_t*)&cgen_var_417, 1 * 8);
5973 uint64_t cgen_var_418;
5974 stream->handleMapping()->mapHandles_VkDescriptorPool_u64(&local_descriptorPool, &cgen_var_418, 1);
5975 stream->write((uint64_t*)&cgen_var_418, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08005976 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04005977 uint64_t cgen_var_419 = (uint64_t)(uintptr_t)local_pAllocator;
5978 stream->putBe64(cgen_var_419);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005979 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005980 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005981 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005982 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005983 AEMU_SCOPED_TRACE("vkDestroyDescriptorPool readParams");
5984 AEMU_SCOPED_TRACE("vkDestroyDescriptorPool returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08005985 resources->destroyMapping()->mapHandles_VkDescriptorPool((VkDescriptorPool*)&descriptorPool);
Lingfeng Yang256f9252020-07-14 14:27:33 -07005986 pool->freeAll();
5987 countingStream->clearPool();
5988 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005989 mImpl->log("finish vkDestroyDescriptorPool");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07005990}
5991
5992VkResult VkEncoder::vkResetDescriptorPool(
5993 VkDevice device,
5994 VkDescriptorPool descriptorPool,
5995 VkDescriptorPoolResetFlags flags)
5996{
Lingfeng Yang256f9252020-07-14 14:27:33 -07005997 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08005998 AEMU_SCOPED_TRACE("vkResetDescriptorPool encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08005999 mImpl->log("start vkResetDescriptorPool");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006000 auto stream = mImpl->stream();
6001 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006002 auto resources = mImpl->resources();
6003 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006004 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006005 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006006 VkDescriptorPool local_descriptorPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006007 VkDescriptorPoolResetFlags local_flags;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006008 local_device = device;
6009 local_descriptorPool = descriptorPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006010 local_flags = flags;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006011 countingStream->rewind();
6012 {
David Reveman9875f2c2019-06-11 21:47:12 -04006013 uint64_t cgen_var_420;
6014 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_420, 1);
6015 countingStream->write((uint64_t*)&cgen_var_420, 1 * 8);
6016 uint64_t cgen_var_421;
6017 countingStream->handleMapping()->mapHandles_VkDescriptorPool_u64(&local_descriptorPool, &cgen_var_421, 1);
6018 countingStream->write((uint64_t*)&cgen_var_421, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006019 countingStream->write((VkDescriptorPoolResetFlags*)&local_flags, sizeof(VkDescriptorPoolResetFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006020 }
6021 uint32_t packetSize_vkResetDescriptorPool = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6022 countingStream->rewind();
6023 uint32_t opcode_vkResetDescriptorPool = OP_vkResetDescriptorPool;
6024 stream->write(&opcode_vkResetDescriptorPool, sizeof(uint32_t));
6025 stream->write(&packetSize_vkResetDescriptorPool, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006026 uint64_t cgen_var_422;
6027 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_422, 1);
6028 stream->write((uint64_t*)&cgen_var_422, 1 * 8);
6029 uint64_t cgen_var_423;
6030 stream->handleMapping()->mapHandles_VkDescriptorPool_u64(&local_descriptorPool, &cgen_var_423, 1);
6031 stream->write((uint64_t*)&cgen_var_423, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006032 stream->write((VkDescriptorPoolResetFlags*)&local_flags, sizeof(VkDescriptorPoolResetFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006033 AEMU_SCOPED_TRACE("vkResetDescriptorPool readParams");
6034 AEMU_SCOPED_TRACE("vkResetDescriptorPool returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006035 VkResult vkResetDescriptorPool_VkResult_return = (VkResult)0;
6036 stream->read(&vkResetDescriptorPool_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07006037 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08006038 countingStream->clearPool();
6039 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006040 mImpl->log("finish vkResetDescriptorPool");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006041 return vkResetDescriptorPool_VkResult_return;
6042}
6043
6044VkResult VkEncoder::vkAllocateDescriptorSets(
6045 VkDevice device,
6046 const VkDescriptorSetAllocateInfo* pAllocateInfo,
6047 VkDescriptorSet* pDescriptorSets)
6048{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006049 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006050 AEMU_SCOPED_TRACE("vkAllocateDescriptorSets encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006051 mImpl->log("start vkAllocateDescriptorSets");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006052 auto stream = mImpl->stream();
6053 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006054 auto resources = mImpl->resources();
6055 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006056 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006057 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006058 VkDescriptorSetAllocateInfo* local_pAllocateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006059 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006060 local_pAllocateInfo = nullptr;
6061 if (pAllocateInfo)
6062 {
6063 local_pAllocateInfo = (VkDescriptorSetAllocateInfo*)pool->alloc(sizeof(const VkDescriptorSetAllocateInfo));
6064 deepcopy_VkDescriptorSetAllocateInfo(pool, pAllocateInfo, (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo));
6065 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08006066 if (local_pAllocateInfo)
6067 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006068 transform_tohost_VkDescriptorSetAllocateInfo(mImpl->resources(), (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006069 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006070 countingStream->rewind();
6071 {
David Reveman9875f2c2019-06-11 21:47:12 -04006072 uint64_t cgen_var_424;
6073 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_424, 1);
6074 countingStream->write((uint64_t*)&cgen_var_424, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006075 marshal_VkDescriptorSetAllocateInfo(countingStream, (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo));
Lingfeng Yang2285df12018-11-17 16:25:11 -08006076 if (pAllocateInfo->descriptorSetCount)
6077 {
David Reveman9875f2c2019-06-11 21:47:12 -04006078 uint64_t* cgen_var_425;
6079 countingStream->alloc((void**)&cgen_var_425, pAllocateInfo->descriptorSetCount * 8);
6080 countingStream->handleMapping()->mapHandles_VkDescriptorSet_u64(pDescriptorSets, cgen_var_425, pAllocateInfo->descriptorSetCount);
6081 countingStream->write((uint64_t*)cgen_var_425, pAllocateInfo->descriptorSetCount * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08006082 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006083 }
6084 uint32_t packetSize_vkAllocateDescriptorSets = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6085 countingStream->rewind();
6086 uint32_t opcode_vkAllocateDescriptorSets = OP_vkAllocateDescriptorSets;
6087 stream->write(&opcode_vkAllocateDescriptorSets, sizeof(uint32_t));
6088 stream->write(&packetSize_vkAllocateDescriptorSets, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006089 uint64_t cgen_var_426;
6090 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_426, 1);
6091 stream->write((uint64_t*)&cgen_var_426, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006092 marshal_VkDescriptorSetAllocateInfo(stream, (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo));
Lingfeng Yange4008a02018-11-18 12:22:48 -08006093 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
Lingfeng Yang2285df12018-11-17 16:25:11 -08006094 if (pAllocateInfo->descriptorSetCount)
6095 {
David Reveman9875f2c2019-06-11 21:47:12 -04006096 uint64_t* cgen_var_427;
6097 stream->alloc((void**)&cgen_var_427, pAllocateInfo->descriptorSetCount * 8);
6098 stream->handleMapping()->mapHandles_VkDescriptorSet_u64(pDescriptorSets, cgen_var_427, pAllocateInfo->descriptorSetCount);
6099 stream->write((uint64_t*)cgen_var_427, pAllocateInfo->descriptorSetCount * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08006100 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08006101 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006102 AEMU_SCOPED_TRACE("vkAllocateDescriptorSets readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08006103 stream->setHandleMapping(resources->createMapping());
Lingfeng Yang2285df12018-11-17 16:25:11 -08006104 if (pAllocateInfo->descriptorSetCount)
6105 {
David Reveman9875f2c2019-06-11 21:47:12 -04006106 uint64_t* cgen_var_428;
6107 stream->alloc((void**)&cgen_var_428, pAllocateInfo->descriptorSetCount * 8);
6108 stream->read((uint64_t*)cgen_var_428, pAllocateInfo->descriptorSetCount * 8);
6109 stream->handleMapping()->mapHandles_u64_VkDescriptorSet(cgen_var_428, (VkDescriptorSet*)pDescriptorSets, pAllocateInfo->descriptorSetCount);
Lingfeng Yang2285df12018-11-17 16:25:11 -08006110 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08006111 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006112 AEMU_SCOPED_TRACE("vkAllocateDescriptorSets returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006113 VkResult vkAllocateDescriptorSets_VkResult_return = (VkResult)0;
6114 stream->read(&vkAllocateDescriptorSets_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07006115 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08006116 countingStream->clearPool();
6117 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006118 mImpl->log("finish vkAllocateDescriptorSets");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006119 return vkAllocateDescriptorSets_VkResult_return;
6120}
6121
6122VkResult VkEncoder::vkFreeDescriptorSets(
6123 VkDevice device,
6124 VkDescriptorPool descriptorPool,
6125 uint32_t descriptorSetCount,
6126 const VkDescriptorSet* pDescriptorSets)
6127{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006128 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006129 AEMU_SCOPED_TRACE("vkFreeDescriptorSets encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006130 mImpl->log("start vkFreeDescriptorSets");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006131 auto stream = mImpl->stream();
6132 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006133 auto resources = mImpl->resources();
6134 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006135 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006136 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006137 VkDescriptorPool local_descriptorPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006138 uint32_t local_descriptorSetCount;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006139 VkDescriptorSet* local_pDescriptorSets;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006140 local_device = device;
6141 local_descriptorPool = descriptorPool;
6142 local_descriptorSetCount = descriptorSetCount;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006143 local_pDescriptorSets = nullptr;
6144 if (pDescriptorSets)
6145 {
6146 local_pDescriptorSets = (VkDescriptorSet*)pool->dupArray(pDescriptorSets, ((descriptorSetCount)) * sizeof(const VkDescriptorSet));
6147 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006148 countingStream->rewind();
6149 {
David Reveman9875f2c2019-06-11 21:47:12 -04006150 uint64_t cgen_var_429;
6151 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_429, 1);
6152 countingStream->write((uint64_t*)&cgen_var_429, 1 * 8);
6153 uint64_t cgen_var_430;
6154 countingStream->handleMapping()->mapHandles_VkDescriptorPool_u64(&local_descriptorPool, &cgen_var_430, 1);
6155 countingStream->write((uint64_t*)&cgen_var_430, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006156 countingStream->write((uint32_t*)&local_descriptorSetCount, sizeof(uint32_t));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006157 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006158 uint64_t cgen_var_431 = (uint64_t)(uintptr_t)local_pDescriptorSets;
6159 countingStream->putBe64(cgen_var_431);
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006160 if (local_pDescriptorSets)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006161 {
Lingfeng Yang2285df12018-11-17 16:25:11 -08006162 if (((descriptorSetCount)))
6163 {
David Reveman9875f2c2019-06-11 21:47:12 -04006164 uint64_t* cgen_var_432;
6165 countingStream->alloc((void**)&cgen_var_432, ((descriptorSetCount)) * 8);
6166 countingStream->handleMapping()->mapHandles_VkDescriptorSet_u64(local_pDescriptorSets, cgen_var_432, ((descriptorSetCount)));
6167 countingStream->write((uint64_t*)cgen_var_432, ((descriptorSetCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08006168 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006169 }
6170 }
6171 uint32_t packetSize_vkFreeDescriptorSets = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6172 countingStream->rewind();
6173 uint32_t opcode_vkFreeDescriptorSets = OP_vkFreeDescriptorSets;
6174 stream->write(&opcode_vkFreeDescriptorSets, sizeof(uint32_t));
6175 stream->write(&packetSize_vkFreeDescriptorSets, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006176 uint64_t cgen_var_433;
6177 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_433, 1);
6178 stream->write((uint64_t*)&cgen_var_433, 1 * 8);
6179 uint64_t cgen_var_434;
6180 stream->handleMapping()->mapHandles_VkDescriptorPool_u64(&local_descriptorPool, &cgen_var_434, 1);
6181 stream->write((uint64_t*)&cgen_var_434, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006182 stream->write((uint32_t*)&local_descriptorSetCount, sizeof(uint32_t));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006183 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006184 uint64_t cgen_var_435 = (uint64_t)(uintptr_t)local_pDescriptorSets;
6185 stream->putBe64(cgen_var_435);
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006186 if (local_pDescriptorSets)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006187 {
Lingfeng Yang2285df12018-11-17 16:25:11 -08006188 if (((descriptorSetCount)))
6189 {
David Reveman9875f2c2019-06-11 21:47:12 -04006190 uint64_t* cgen_var_436;
6191 stream->alloc((void**)&cgen_var_436, ((descriptorSetCount)) * 8);
6192 stream->handleMapping()->mapHandles_VkDescriptorSet_u64(local_pDescriptorSets, cgen_var_436, ((descriptorSetCount)));
6193 stream->write((uint64_t*)cgen_var_436, ((descriptorSetCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08006194 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006195 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006196 AEMU_SCOPED_TRACE("vkFreeDescriptorSets readParams");
6197 AEMU_SCOPED_TRACE("vkFreeDescriptorSets returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006198 VkResult vkFreeDescriptorSets_VkResult_return = (VkResult)0;
6199 stream->read(&vkFreeDescriptorSets_VkResult_return, sizeof(VkResult));
Lingfeng Yang6ab1b0d2018-11-27 23:36:03 -08006200 if (pDescriptorSets)
6201 {
6202 resources->destroyMapping()->mapHandles_VkDescriptorSet((VkDescriptorSet*)pDescriptorSets, ((descriptorSetCount)));
6203 }
Lingfeng Yang256f9252020-07-14 14:27:33 -07006204 pool->freeAll();
6205 countingStream->clearPool();
6206 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006207 mImpl->log("finish vkFreeDescriptorSets");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006208 return vkFreeDescriptorSets_VkResult_return;
6209}
6210
6211void VkEncoder::vkUpdateDescriptorSets(
6212 VkDevice device,
6213 uint32_t descriptorWriteCount,
6214 const VkWriteDescriptorSet* pDescriptorWrites,
6215 uint32_t descriptorCopyCount,
6216 const VkCopyDescriptorSet* pDescriptorCopies)
6217{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006218 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006219 AEMU_SCOPED_TRACE("vkUpdateDescriptorSets encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006220 mImpl->log("start vkUpdateDescriptorSets");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006221 auto stream = mImpl->stream();
6222 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006223 auto resources = mImpl->resources();
6224 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006225 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006226 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006227 uint32_t local_descriptorWriteCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006228 VkWriteDescriptorSet* local_pDescriptorWrites;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006229 uint32_t local_descriptorCopyCount;
6230 VkCopyDescriptorSet* local_pDescriptorCopies;
6231 local_device = device;
6232 local_descriptorWriteCount = descriptorWriteCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006233 local_pDescriptorWrites = nullptr;
6234 if (pDescriptorWrites)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006235 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006236 local_pDescriptorWrites = (VkWriteDescriptorSet*)pool->alloc(((descriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006237 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
6238 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006239 deepcopy_VkWriteDescriptorSet(pool, pDescriptorWrites + i, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006240 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006241 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006242 local_descriptorCopyCount = descriptorCopyCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006243 local_pDescriptorCopies = nullptr;
6244 if (pDescriptorCopies)
6245 {
6246 local_pDescriptorCopies = (VkCopyDescriptorSet*)pool->alloc(((descriptorCopyCount)) * sizeof(const VkCopyDescriptorSet));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006247 for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i)
6248 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006249 deepcopy_VkCopyDescriptorSet(pool, pDescriptorCopies + i, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
6250 }
6251 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08006252 if (local_pDescriptorWrites)
6253 {
6254 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
6255 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006256 transform_tohost_VkWriteDescriptorSet(mImpl->resources(), (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006257 }
6258 }
6259 if (local_pDescriptorCopies)
6260 {
6261 for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i)
6262 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006263 transform_tohost_VkCopyDescriptorSet(mImpl->resources(), (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006264 }
6265 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006266 countingStream->rewind();
6267 {
David Reveman9875f2c2019-06-11 21:47:12 -04006268 uint64_t cgen_var_437;
6269 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_437, 1);
6270 countingStream->write((uint64_t*)&cgen_var_437, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006271 countingStream->write((uint32_t*)&local_descriptorWriteCount, sizeof(uint32_t));
6272 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
6273 {
6274 marshal_VkWriteDescriptorSet(countingStream, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
6275 }
6276 countingStream->write((uint32_t*)&local_descriptorCopyCount, sizeof(uint32_t));
6277 for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i)
6278 {
6279 marshal_VkCopyDescriptorSet(countingStream, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006280 }
6281 }
6282 uint32_t packetSize_vkUpdateDescriptorSets = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6283 countingStream->rewind();
6284 uint32_t opcode_vkUpdateDescriptorSets = OP_vkUpdateDescriptorSets;
6285 stream->write(&opcode_vkUpdateDescriptorSets, sizeof(uint32_t));
6286 stream->write(&packetSize_vkUpdateDescriptorSets, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006287 uint64_t cgen_var_438;
6288 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_438, 1);
6289 stream->write((uint64_t*)&cgen_var_438, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006290 stream->write((uint32_t*)&local_descriptorWriteCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006291 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
6292 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006293 marshal_VkWriteDescriptorSet(stream, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006294 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006295 stream->write((uint32_t*)&local_descriptorCopyCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006296 for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i)
6297 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006298 marshal_VkCopyDescriptorSet(stream, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006299 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006300 AEMU_SCOPED_TRACE("vkUpdateDescriptorSets readParams");
6301 AEMU_SCOPED_TRACE("vkUpdateDescriptorSets returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07006302 pool->freeAll();
6303 countingStream->clearPool();
6304 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006305 mImpl->log("finish vkUpdateDescriptorSets");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006306}
6307
6308VkResult VkEncoder::vkCreateFramebuffer(
6309 VkDevice device,
6310 const VkFramebufferCreateInfo* pCreateInfo,
6311 const VkAllocationCallbacks* pAllocator,
6312 VkFramebuffer* pFramebuffer)
6313{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006314 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006315 AEMU_SCOPED_TRACE("vkCreateFramebuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006316 mImpl->log("start vkCreateFramebuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006317 auto stream = mImpl->stream();
6318 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006319 auto resources = mImpl->resources();
6320 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006321 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006322 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006323 VkFramebufferCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006324 VkAllocationCallbacks* local_pAllocator;
6325 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006326 local_pCreateInfo = nullptr;
6327 if (pCreateInfo)
6328 {
6329 local_pCreateInfo = (VkFramebufferCreateInfo*)pool->alloc(sizeof(const VkFramebufferCreateInfo));
6330 deepcopy_VkFramebufferCreateInfo(pool, pCreateInfo, (VkFramebufferCreateInfo*)(local_pCreateInfo));
6331 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006332 local_pAllocator = nullptr;
6333 if (pAllocator)
6334 {
6335 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6336 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
6337 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006338 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08006339 if (local_pCreateInfo)
6340 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006341 transform_tohost_VkFramebufferCreateInfo(mImpl->resources(), (VkFramebufferCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006342 }
6343 if (local_pAllocator)
6344 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006345 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006346 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006347 countingStream->rewind();
6348 {
David Reveman9875f2c2019-06-11 21:47:12 -04006349 uint64_t cgen_var_439;
6350 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_439, 1);
6351 countingStream->write((uint64_t*)&cgen_var_439, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006352 marshal_VkFramebufferCreateInfo(countingStream, (VkFramebufferCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006353 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006354 uint64_t cgen_var_440 = (uint64_t)(uintptr_t)local_pAllocator;
6355 countingStream->putBe64(cgen_var_440);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006356 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006357 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006358 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006359 }
David Reveman9875f2c2019-06-11 21:47:12 -04006360 uint64_t cgen_var_441;
6361 countingStream->handleMapping()->mapHandles_VkFramebuffer_u64(pFramebuffer, &cgen_var_441, 1);
6362 countingStream->write((uint64_t*)&cgen_var_441, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006363 }
6364 uint32_t packetSize_vkCreateFramebuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6365 countingStream->rewind();
6366 uint32_t opcode_vkCreateFramebuffer = OP_vkCreateFramebuffer;
6367 stream->write(&opcode_vkCreateFramebuffer, sizeof(uint32_t));
6368 stream->write(&packetSize_vkCreateFramebuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006369 uint64_t cgen_var_442;
6370 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_442, 1);
6371 stream->write((uint64_t*)&cgen_var_442, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006372 marshal_VkFramebufferCreateInfo(stream, (VkFramebufferCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006373 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006374 uint64_t cgen_var_443 = (uint64_t)(uintptr_t)local_pAllocator;
6375 stream->putBe64(cgen_var_443);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006376 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006377 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006378 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006379 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08006380 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04006381 uint64_t cgen_var_444;
6382 stream->handleMapping()->mapHandles_VkFramebuffer_u64(pFramebuffer, &cgen_var_444, 1);
6383 stream->write((uint64_t*)&cgen_var_444, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08006384 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006385 AEMU_SCOPED_TRACE("vkCreateFramebuffer readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08006386 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04006387 uint64_t cgen_var_445;
6388 stream->read((uint64_t*)&cgen_var_445, 8);
6389 stream->handleMapping()->mapHandles_u64_VkFramebuffer(&cgen_var_445, (VkFramebuffer*)pFramebuffer, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08006390 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006391 AEMU_SCOPED_TRACE("vkCreateFramebuffer returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006392 VkResult vkCreateFramebuffer_VkResult_return = (VkResult)0;
6393 stream->read(&vkCreateFramebuffer_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07006394 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08006395 countingStream->clearPool();
6396 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006397 mImpl->log("finish vkCreateFramebuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006398 return vkCreateFramebuffer_VkResult_return;
6399}
6400
6401void VkEncoder::vkDestroyFramebuffer(
6402 VkDevice device,
6403 VkFramebuffer framebuffer,
6404 const VkAllocationCallbacks* pAllocator)
6405{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006406 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006407 AEMU_SCOPED_TRACE("vkDestroyFramebuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006408 mImpl->log("start vkDestroyFramebuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006409 auto stream = mImpl->stream();
6410 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006411 auto resources = mImpl->resources();
6412 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006413 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006414 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006415 VkFramebuffer local_framebuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006416 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006417 local_device = device;
6418 local_framebuffer = framebuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006419 local_pAllocator = nullptr;
6420 if (pAllocator)
6421 {
6422 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6423 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
6424 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006425 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08006426 if (local_pAllocator)
6427 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006428 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006429 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006430 countingStream->rewind();
6431 {
David Reveman9875f2c2019-06-11 21:47:12 -04006432 uint64_t cgen_var_446;
6433 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_446, 1);
6434 countingStream->write((uint64_t*)&cgen_var_446, 1 * 8);
6435 uint64_t cgen_var_447;
6436 countingStream->handleMapping()->mapHandles_VkFramebuffer_u64(&local_framebuffer, &cgen_var_447, 1);
6437 countingStream->write((uint64_t*)&cgen_var_447, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006438 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006439 uint64_t cgen_var_448 = (uint64_t)(uintptr_t)local_pAllocator;
6440 countingStream->putBe64(cgen_var_448);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006441 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006442 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006443 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006444 }
6445 }
6446 uint32_t packetSize_vkDestroyFramebuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6447 countingStream->rewind();
6448 uint32_t opcode_vkDestroyFramebuffer = OP_vkDestroyFramebuffer;
6449 stream->write(&opcode_vkDestroyFramebuffer, sizeof(uint32_t));
6450 stream->write(&packetSize_vkDestroyFramebuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006451 uint64_t cgen_var_449;
6452 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_449, 1);
6453 stream->write((uint64_t*)&cgen_var_449, 1 * 8);
6454 uint64_t cgen_var_450;
6455 stream->handleMapping()->mapHandles_VkFramebuffer_u64(&local_framebuffer, &cgen_var_450, 1);
6456 stream->write((uint64_t*)&cgen_var_450, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006457 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006458 uint64_t cgen_var_451 = (uint64_t)(uintptr_t)local_pAllocator;
6459 stream->putBe64(cgen_var_451);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006460 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006461 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006462 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006463 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006464 AEMU_SCOPED_TRACE("vkDestroyFramebuffer readParams");
6465 AEMU_SCOPED_TRACE("vkDestroyFramebuffer returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006466 resources->destroyMapping()->mapHandles_VkFramebuffer((VkFramebuffer*)&framebuffer);
Lingfeng Yang256f9252020-07-14 14:27:33 -07006467 pool->freeAll();
6468 countingStream->clearPool();
6469 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006470 mImpl->log("finish vkDestroyFramebuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006471}
6472
6473VkResult VkEncoder::vkCreateRenderPass(
6474 VkDevice device,
6475 const VkRenderPassCreateInfo* pCreateInfo,
6476 const VkAllocationCallbacks* pAllocator,
6477 VkRenderPass* pRenderPass)
6478{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006479 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006480 AEMU_SCOPED_TRACE("vkCreateRenderPass encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006481 mImpl->log("start vkCreateRenderPass");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006482 auto stream = mImpl->stream();
6483 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006484 auto resources = mImpl->resources();
6485 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006486 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006487 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006488 VkRenderPassCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006489 VkAllocationCallbacks* local_pAllocator;
6490 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006491 local_pCreateInfo = nullptr;
6492 if (pCreateInfo)
6493 {
6494 local_pCreateInfo = (VkRenderPassCreateInfo*)pool->alloc(sizeof(const VkRenderPassCreateInfo));
6495 deepcopy_VkRenderPassCreateInfo(pool, pCreateInfo, (VkRenderPassCreateInfo*)(local_pCreateInfo));
6496 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006497 local_pAllocator = nullptr;
6498 if (pAllocator)
6499 {
6500 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6501 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
6502 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006503 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08006504 if (local_pCreateInfo)
6505 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006506 transform_tohost_VkRenderPassCreateInfo(mImpl->resources(), (VkRenderPassCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006507 }
6508 if (local_pAllocator)
6509 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006510 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006511 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006512 countingStream->rewind();
6513 {
David Reveman9875f2c2019-06-11 21:47:12 -04006514 uint64_t cgen_var_452;
6515 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_452, 1);
6516 countingStream->write((uint64_t*)&cgen_var_452, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006517 marshal_VkRenderPassCreateInfo(countingStream, (VkRenderPassCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006518 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006519 uint64_t cgen_var_453 = (uint64_t)(uintptr_t)local_pAllocator;
6520 countingStream->putBe64(cgen_var_453);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006521 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006522 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006523 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006524 }
David Reveman9875f2c2019-06-11 21:47:12 -04006525 uint64_t cgen_var_454;
6526 countingStream->handleMapping()->mapHandles_VkRenderPass_u64(pRenderPass, &cgen_var_454, 1);
6527 countingStream->write((uint64_t*)&cgen_var_454, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006528 }
6529 uint32_t packetSize_vkCreateRenderPass = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6530 countingStream->rewind();
6531 uint32_t opcode_vkCreateRenderPass = OP_vkCreateRenderPass;
6532 stream->write(&opcode_vkCreateRenderPass, sizeof(uint32_t));
6533 stream->write(&packetSize_vkCreateRenderPass, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006534 uint64_t cgen_var_455;
6535 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_455, 1);
6536 stream->write((uint64_t*)&cgen_var_455, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006537 marshal_VkRenderPassCreateInfo(stream, (VkRenderPassCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006538 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006539 uint64_t cgen_var_456 = (uint64_t)(uintptr_t)local_pAllocator;
6540 stream->putBe64(cgen_var_456);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006541 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006542 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006543 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006544 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08006545 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04006546 uint64_t cgen_var_457;
6547 stream->handleMapping()->mapHandles_VkRenderPass_u64(pRenderPass, &cgen_var_457, 1);
6548 stream->write((uint64_t*)&cgen_var_457, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08006549 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006550 AEMU_SCOPED_TRACE("vkCreateRenderPass readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08006551 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04006552 uint64_t cgen_var_458;
6553 stream->read((uint64_t*)&cgen_var_458, 8);
6554 stream->handleMapping()->mapHandles_u64_VkRenderPass(&cgen_var_458, (VkRenderPass*)pRenderPass, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08006555 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006556 AEMU_SCOPED_TRACE("vkCreateRenderPass returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006557 VkResult vkCreateRenderPass_VkResult_return = (VkResult)0;
6558 stream->read(&vkCreateRenderPass_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07006559 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08006560 countingStream->clearPool();
6561 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006562 mImpl->log("finish vkCreateRenderPass");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006563 return vkCreateRenderPass_VkResult_return;
6564}
6565
6566void VkEncoder::vkDestroyRenderPass(
6567 VkDevice device,
6568 VkRenderPass renderPass,
6569 const VkAllocationCallbacks* pAllocator)
6570{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006571 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006572 AEMU_SCOPED_TRACE("vkDestroyRenderPass encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006573 mImpl->log("start vkDestroyRenderPass");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006574 auto stream = mImpl->stream();
6575 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006576 auto resources = mImpl->resources();
6577 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006578 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006579 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006580 VkRenderPass local_renderPass;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006581 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006582 local_device = device;
6583 local_renderPass = renderPass;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006584 local_pAllocator = nullptr;
6585 if (pAllocator)
6586 {
6587 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6588 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
6589 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006590 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08006591 if (local_pAllocator)
6592 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006593 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006594 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006595 countingStream->rewind();
6596 {
David Reveman9875f2c2019-06-11 21:47:12 -04006597 uint64_t cgen_var_459;
6598 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_459, 1);
6599 countingStream->write((uint64_t*)&cgen_var_459, 1 * 8);
6600 uint64_t cgen_var_460;
6601 countingStream->handleMapping()->mapHandles_VkRenderPass_u64(&local_renderPass, &cgen_var_460, 1);
6602 countingStream->write((uint64_t*)&cgen_var_460, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006603 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006604 uint64_t cgen_var_461 = (uint64_t)(uintptr_t)local_pAllocator;
6605 countingStream->putBe64(cgen_var_461);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006606 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006607 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006608 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006609 }
6610 }
6611 uint32_t packetSize_vkDestroyRenderPass = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6612 countingStream->rewind();
6613 uint32_t opcode_vkDestroyRenderPass = OP_vkDestroyRenderPass;
6614 stream->write(&opcode_vkDestroyRenderPass, sizeof(uint32_t));
6615 stream->write(&packetSize_vkDestroyRenderPass, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006616 uint64_t cgen_var_462;
6617 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_462, 1);
6618 stream->write((uint64_t*)&cgen_var_462, 1 * 8);
6619 uint64_t cgen_var_463;
6620 stream->handleMapping()->mapHandles_VkRenderPass_u64(&local_renderPass, &cgen_var_463, 1);
6621 stream->write((uint64_t*)&cgen_var_463, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006622 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006623 uint64_t cgen_var_464 = (uint64_t)(uintptr_t)local_pAllocator;
6624 stream->putBe64(cgen_var_464);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006625 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006626 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006627 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006628 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006629 AEMU_SCOPED_TRACE("vkDestroyRenderPass readParams");
6630 AEMU_SCOPED_TRACE("vkDestroyRenderPass returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006631 resources->destroyMapping()->mapHandles_VkRenderPass((VkRenderPass*)&renderPass);
Lingfeng Yang256f9252020-07-14 14:27:33 -07006632 pool->freeAll();
6633 countingStream->clearPool();
6634 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006635 mImpl->log("finish vkDestroyRenderPass");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006636}
6637
6638void VkEncoder::vkGetRenderAreaGranularity(
6639 VkDevice device,
6640 VkRenderPass renderPass,
6641 VkExtent2D* pGranularity)
6642{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006643 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006644 AEMU_SCOPED_TRACE("vkGetRenderAreaGranularity encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006645 mImpl->log("start vkGetRenderAreaGranularity");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006646 auto stream = mImpl->stream();
6647 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006648 auto resources = mImpl->resources();
6649 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006650 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006651 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006652 VkRenderPass local_renderPass;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006653 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006654 local_renderPass = renderPass;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006655 countingStream->rewind();
6656 {
David Reveman9875f2c2019-06-11 21:47:12 -04006657 uint64_t cgen_var_465;
6658 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_465, 1);
6659 countingStream->write((uint64_t*)&cgen_var_465, 1 * 8);
6660 uint64_t cgen_var_466;
6661 countingStream->handleMapping()->mapHandles_VkRenderPass_u64(&local_renderPass, &cgen_var_466, 1);
6662 countingStream->write((uint64_t*)&cgen_var_466, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006663 marshal_VkExtent2D(countingStream, (VkExtent2D*)(pGranularity));
6664 }
6665 uint32_t packetSize_vkGetRenderAreaGranularity = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6666 countingStream->rewind();
6667 uint32_t opcode_vkGetRenderAreaGranularity = OP_vkGetRenderAreaGranularity;
6668 stream->write(&opcode_vkGetRenderAreaGranularity, sizeof(uint32_t));
6669 stream->write(&packetSize_vkGetRenderAreaGranularity, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006670 uint64_t cgen_var_467;
6671 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_467, 1);
6672 stream->write((uint64_t*)&cgen_var_467, 1 * 8);
6673 uint64_t cgen_var_468;
6674 stream->handleMapping()->mapHandles_VkRenderPass_u64(&local_renderPass, &cgen_var_468, 1);
6675 stream->write((uint64_t*)&cgen_var_468, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006676 marshal_VkExtent2D(stream, (VkExtent2D*)(pGranularity));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006677 AEMU_SCOPED_TRACE("vkGetRenderAreaGranularity readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006678 unmarshal_VkExtent2D(stream, (VkExtent2D*)(pGranularity));
Lingfeng Yang97a06702018-12-24 17:02:43 -08006679 if (pGranularity)
6680 {
6681 transform_fromhost_VkExtent2D(mImpl->resources(), (VkExtent2D*)(pGranularity));
6682 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006683 AEMU_SCOPED_TRACE("vkGetRenderAreaGranularity returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07006684 pool->freeAll();
6685 countingStream->clearPool();
6686 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006687 mImpl->log("finish vkGetRenderAreaGranularity");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006688}
6689
6690VkResult VkEncoder::vkCreateCommandPool(
6691 VkDevice device,
6692 const VkCommandPoolCreateInfo* pCreateInfo,
6693 const VkAllocationCallbacks* pAllocator,
6694 VkCommandPool* pCommandPool)
6695{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006696 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006697 AEMU_SCOPED_TRACE("vkCreateCommandPool encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006698 mImpl->log("start vkCreateCommandPool");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006699 auto stream = mImpl->stream();
6700 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006701 auto resources = mImpl->resources();
6702 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006703 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006704 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006705 VkCommandPoolCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006706 VkAllocationCallbacks* local_pAllocator;
6707 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006708 local_pCreateInfo = nullptr;
6709 if (pCreateInfo)
6710 {
6711 local_pCreateInfo = (VkCommandPoolCreateInfo*)pool->alloc(sizeof(const VkCommandPoolCreateInfo));
6712 deepcopy_VkCommandPoolCreateInfo(pool, pCreateInfo, (VkCommandPoolCreateInfo*)(local_pCreateInfo));
6713 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006714 local_pAllocator = nullptr;
6715 if (pAllocator)
6716 {
6717 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6718 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
6719 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006720 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08006721 if (local_pCreateInfo)
6722 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006723 transform_tohost_VkCommandPoolCreateInfo(mImpl->resources(), (VkCommandPoolCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006724 }
6725 if (local_pAllocator)
6726 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006727 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006728 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006729 countingStream->rewind();
6730 {
David Reveman9875f2c2019-06-11 21:47:12 -04006731 uint64_t cgen_var_469;
6732 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_469, 1);
6733 countingStream->write((uint64_t*)&cgen_var_469, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006734 marshal_VkCommandPoolCreateInfo(countingStream, (VkCommandPoolCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006735 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006736 uint64_t cgen_var_470 = (uint64_t)(uintptr_t)local_pAllocator;
6737 countingStream->putBe64(cgen_var_470);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006738 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006739 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006740 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006741 }
David Reveman9875f2c2019-06-11 21:47:12 -04006742 uint64_t cgen_var_471;
6743 countingStream->handleMapping()->mapHandles_VkCommandPool_u64(pCommandPool, &cgen_var_471, 1);
6744 countingStream->write((uint64_t*)&cgen_var_471, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006745 }
6746 uint32_t packetSize_vkCreateCommandPool = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6747 countingStream->rewind();
6748 uint32_t opcode_vkCreateCommandPool = OP_vkCreateCommandPool;
6749 stream->write(&opcode_vkCreateCommandPool, sizeof(uint32_t));
6750 stream->write(&packetSize_vkCreateCommandPool, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006751 uint64_t cgen_var_472;
6752 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_472, 1);
6753 stream->write((uint64_t*)&cgen_var_472, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006754 marshal_VkCommandPoolCreateInfo(stream, (VkCommandPoolCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006755 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006756 uint64_t cgen_var_473 = (uint64_t)(uintptr_t)local_pAllocator;
6757 stream->putBe64(cgen_var_473);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006758 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006759 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006760 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006761 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08006762 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -04006763 uint64_t cgen_var_474;
6764 stream->handleMapping()->mapHandles_VkCommandPool_u64(pCommandPool, &cgen_var_474, 1);
6765 stream->write((uint64_t*)&cgen_var_474, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -08006766 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006767 AEMU_SCOPED_TRACE("vkCreateCommandPool readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08006768 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -04006769 uint64_t cgen_var_475;
6770 stream->read((uint64_t*)&cgen_var_475, 8);
6771 stream->handleMapping()->mapHandles_u64_VkCommandPool(&cgen_var_475, (VkCommandPool*)pCommandPool, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -08006772 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006773 AEMU_SCOPED_TRACE("vkCreateCommandPool returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006774 VkResult vkCreateCommandPool_VkResult_return = (VkResult)0;
6775 stream->read(&vkCreateCommandPool_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07006776 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08006777 countingStream->clearPool();
6778 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006779 mImpl->log("finish vkCreateCommandPool");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006780 return vkCreateCommandPool_VkResult_return;
6781}
6782
6783void VkEncoder::vkDestroyCommandPool(
6784 VkDevice device,
6785 VkCommandPool commandPool,
6786 const VkAllocationCallbacks* pAllocator)
6787{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006788 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006789 AEMU_SCOPED_TRACE("vkDestroyCommandPool encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006790 mImpl->log("start vkDestroyCommandPool");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006791 auto stream = mImpl->stream();
6792 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006793 auto resources = mImpl->resources();
6794 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006795 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006796 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006797 VkCommandPool local_commandPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006798 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006799 local_device = device;
6800 local_commandPool = commandPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006801 local_pAllocator = nullptr;
6802 if (pAllocator)
6803 {
6804 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
6805 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
6806 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -08006807 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -08006808 if (local_pAllocator)
6809 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006810 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006811 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006812 countingStream->rewind();
6813 {
David Reveman9875f2c2019-06-11 21:47:12 -04006814 uint64_t cgen_var_476;
6815 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_476, 1);
6816 countingStream->write((uint64_t*)&cgen_var_476, 1 * 8);
6817 uint64_t cgen_var_477;
6818 countingStream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_477, 1);
6819 countingStream->write((uint64_t*)&cgen_var_477, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006820 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006821 uint64_t cgen_var_478 = (uint64_t)(uintptr_t)local_pAllocator;
6822 countingStream->putBe64(cgen_var_478);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006823 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006824 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006825 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006826 }
6827 }
6828 uint32_t packetSize_vkDestroyCommandPool = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6829 countingStream->rewind();
6830 uint32_t opcode_vkDestroyCommandPool = OP_vkDestroyCommandPool;
6831 stream->write(&opcode_vkDestroyCommandPool, sizeof(uint32_t));
6832 stream->write(&packetSize_vkDestroyCommandPool, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006833 uint64_t cgen_var_479;
6834 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_479, 1);
6835 stream->write((uint64_t*)&cgen_var_479, 1 * 8);
6836 uint64_t cgen_var_480;
6837 stream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_480, 1);
6838 stream->write((uint64_t*)&cgen_var_480, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -08006839 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04006840 uint64_t cgen_var_481 = (uint64_t)(uintptr_t)local_pAllocator;
6841 stream->putBe64(cgen_var_481);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006842 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006843 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006844 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006845 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006846 AEMU_SCOPED_TRACE("vkDestroyCommandPool readParams");
6847 AEMU_SCOPED_TRACE("vkDestroyCommandPool returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006848 resources->destroyMapping()->mapHandles_VkCommandPool((VkCommandPool*)&commandPool);
Lingfeng Yang256f9252020-07-14 14:27:33 -07006849 pool->freeAll();
6850 countingStream->clearPool();
6851 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006852 mImpl->log("finish vkDestroyCommandPool");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006853}
6854
6855VkResult VkEncoder::vkResetCommandPool(
6856 VkDevice device,
6857 VkCommandPool commandPool,
6858 VkCommandPoolResetFlags flags)
6859{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006860 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006861 AEMU_SCOPED_TRACE("vkResetCommandPool encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006862 mImpl->log("start vkResetCommandPool");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006863 auto stream = mImpl->stream();
6864 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006865 auto resources = mImpl->resources();
6866 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006867 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006868 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006869 VkCommandPool local_commandPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006870 VkCommandPoolResetFlags local_flags;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006871 local_device = device;
6872 local_commandPool = commandPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006873 local_flags = flags;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006874 countingStream->rewind();
6875 {
David Reveman9875f2c2019-06-11 21:47:12 -04006876 uint64_t cgen_var_482;
6877 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_482, 1);
6878 countingStream->write((uint64_t*)&cgen_var_482, 1 * 8);
6879 uint64_t cgen_var_483;
6880 countingStream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_483, 1);
6881 countingStream->write((uint64_t*)&cgen_var_483, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006882 countingStream->write((VkCommandPoolResetFlags*)&local_flags, sizeof(VkCommandPoolResetFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006883 }
6884 uint32_t packetSize_vkResetCommandPool = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6885 countingStream->rewind();
6886 uint32_t opcode_vkResetCommandPool = OP_vkResetCommandPool;
6887 stream->write(&opcode_vkResetCommandPool, sizeof(uint32_t));
6888 stream->write(&packetSize_vkResetCommandPool, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006889 uint64_t cgen_var_484;
6890 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_484, 1);
6891 stream->write((uint64_t*)&cgen_var_484, 1 * 8);
6892 uint64_t cgen_var_485;
6893 stream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_485, 1);
6894 stream->write((uint64_t*)&cgen_var_485, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006895 stream->write((VkCommandPoolResetFlags*)&local_flags, sizeof(VkCommandPoolResetFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006896 AEMU_SCOPED_TRACE("vkResetCommandPool readParams");
6897 AEMU_SCOPED_TRACE("vkResetCommandPool returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006898 VkResult vkResetCommandPool_VkResult_return = (VkResult)0;
6899 stream->read(&vkResetCommandPool_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07006900 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08006901 countingStream->clearPool();
6902 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006903 mImpl->log("finish vkResetCommandPool");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006904 return vkResetCommandPool_VkResult_return;
6905}
6906
6907VkResult VkEncoder::vkAllocateCommandBuffers(
6908 VkDevice device,
6909 const VkCommandBufferAllocateInfo* pAllocateInfo,
6910 VkCommandBuffer* pCommandBuffers)
6911{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006912 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006913 AEMU_SCOPED_TRACE("vkAllocateCommandBuffers encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006914 mImpl->log("start vkAllocateCommandBuffers");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006915 auto stream = mImpl->stream();
6916 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006917 auto resources = mImpl->resources();
6918 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006919 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006920 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006921 VkCommandBufferAllocateInfo* local_pAllocateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08006922 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006923 local_pAllocateInfo = nullptr;
6924 if (pAllocateInfo)
6925 {
6926 local_pAllocateInfo = (VkCommandBufferAllocateInfo*)pool->alloc(sizeof(const VkCommandBufferAllocateInfo));
6927 deepcopy_VkCommandBufferAllocateInfo(pool, pAllocateInfo, (VkCommandBufferAllocateInfo*)(local_pAllocateInfo));
6928 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08006929 if (local_pAllocateInfo)
6930 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08006931 transform_tohost_VkCommandBufferAllocateInfo(mImpl->resources(), (VkCommandBufferAllocateInfo*)(local_pAllocateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08006932 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006933 countingStream->rewind();
6934 {
David Reveman9875f2c2019-06-11 21:47:12 -04006935 uint64_t cgen_var_486;
6936 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_486, 1);
6937 countingStream->write((uint64_t*)&cgen_var_486, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006938 marshal_VkCommandBufferAllocateInfo(countingStream, (VkCommandBufferAllocateInfo*)(local_pAllocateInfo));
Lingfeng Yang2285df12018-11-17 16:25:11 -08006939 if (pAllocateInfo->commandBufferCount)
6940 {
David Reveman9875f2c2019-06-11 21:47:12 -04006941 uint64_t* cgen_var_487;
6942 countingStream->alloc((void**)&cgen_var_487, pAllocateInfo->commandBufferCount * 8);
6943 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(pCommandBuffers, cgen_var_487, pAllocateInfo->commandBufferCount);
6944 countingStream->write((uint64_t*)cgen_var_487, pAllocateInfo->commandBufferCount * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08006945 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006946 }
6947 uint32_t packetSize_vkAllocateCommandBuffers = 4 + 4 + (uint32_t)countingStream->bytesWritten();
6948 countingStream->rewind();
6949 uint32_t opcode_vkAllocateCommandBuffers = OP_vkAllocateCommandBuffers;
6950 stream->write(&opcode_vkAllocateCommandBuffers, sizeof(uint32_t));
6951 stream->write(&packetSize_vkAllocateCommandBuffers, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04006952 uint64_t cgen_var_488;
6953 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_488, 1);
6954 stream->write((uint64_t*)&cgen_var_488, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006955 marshal_VkCommandBufferAllocateInfo(stream, (VkCommandBufferAllocateInfo*)(local_pAllocateInfo));
Lingfeng Yange4008a02018-11-18 12:22:48 -08006956 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
Lingfeng Yang2285df12018-11-17 16:25:11 -08006957 if (pAllocateInfo->commandBufferCount)
6958 {
David Reveman9875f2c2019-06-11 21:47:12 -04006959 uint64_t* cgen_var_489;
6960 stream->alloc((void**)&cgen_var_489, pAllocateInfo->commandBufferCount * 8);
6961 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(pCommandBuffers, cgen_var_489, pAllocateInfo->commandBufferCount);
6962 stream->write((uint64_t*)cgen_var_489, pAllocateInfo->commandBufferCount * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08006963 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08006964 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006965 AEMU_SCOPED_TRACE("vkAllocateCommandBuffers readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -08006966 stream->setHandleMapping(resources->createMapping());
Lingfeng Yang2285df12018-11-17 16:25:11 -08006967 if (pAllocateInfo->commandBufferCount)
6968 {
David Reveman9875f2c2019-06-11 21:47:12 -04006969 uint64_t* cgen_var_490;
6970 stream->alloc((void**)&cgen_var_490, pAllocateInfo->commandBufferCount * 8);
6971 stream->read((uint64_t*)cgen_var_490, pAllocateInfo->commandBufferCount * 8);
6972 stream->handleMapping()->mapHandles_u64_VkCommandBuffer(cgen_var_490, (VkCommandBuffer*)pCommandBuffers, pAllocateInfo->commandBufferCount);
Lingfeng Yang2285df12018-11-17 16:25:11 -08006973 }
Lingfeng Yange4008a02018-11-18 12:22:48 -08006974 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006975 AEMU_SCOPED_TRACE("vkAllocateCommandBuffers returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006976 VkResult vkAllocateCommandBuffers_VkResult_return = (VkResult)0;
6977 stream->read(&vkAllocateCommandBuffers_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07006978 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08006979 countingStream->clearPool();
6980 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006981 mImpl->log("finish vkAllocateCommandBuffers");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006982 return vkAllocateCommandBuffers_VkResult_return;
6983}
6984
6985void VkEncoder::vkFreeCommandBuffers(
6986 VkDevice device,
6987 VkCommandPool commandPool,
6988 uint32_t commandBufferCount,
6989 const VkCommandBuffer* pCommandBuffers)
6990{
Lingfeng Yang256f9252020-07-14 14:27:33 -07006991 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08006992 AEMU_SCOPED_TRACE("vkFreeCommandBuffers encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08006993 mImpl->log("start vkFreeCommandBuffers");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07006994 auto stream = mImpl->stream();
6995 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006996 auto resources = mImpl->resources();
6997 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08006998 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08006999 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007000 VkCommandPool local_commandPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007001 uint32_t local_commandBufferCount;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08007002 VkCommandBuffer* local_pCommandBuffers;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007003 local_device = device;
7004 local_commandPool = commandPool;
7005 local_commandBufferCount = commandBufferCount;
Lingfeng Yang9d02e102018-11-10 01:51:46 -08007006 local_pCommandBuffers = nullptr;
7007 if (pCommandBuffers)
7008 {
7009 local_pCommandBuffers = (VkCommandBuffer*)pool->dupArray(pCommandBuffers, ((commandBufferCount)) * sizeof(const VkCommandBuffer));
7010 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007011 countingStream->rewind();
7012 {
David Reveman9875f2c2019-06-11 21:47:12 -04007013 uint64_t cgen_var_491;
7014 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_491, 1);
7015 countingStream->write((uint64_t*)&cgen_var_491, 1 * 8);
7016 uint64_t cgen_var_492;
7017 countingStream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_492, 1);
7018 countingStream->write((uint64_t*)&cgen_var_492, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007019 countingStream->write((uint32_t*)&local_commandBufferCount, sizeof(uint32_t));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08007020 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04007021 uint64_t cgen_var_493 = (uint64_t)(uintptr_t)local_pCommandBuffers;
7022 countingStream->putBe64(cgen_var_493);
Lingfeng Yang9d02e102018-11-10 01:51:46 -08007023 if (local_pCommandBuffers)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007024 {
Lingfeng Yang2285df12018-11-17 16:25:11 -08007025 if (((commandBufferCount)))
7026 {
David Reveman9875f2c2019-06-11 21:47:12 -04007027 uint64_t* cgen_var_494;
7028 countingStream->alloc((void**)&cgen_var_494, ((commandBufferCount)) * 8);
7029 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(local_pCommandBuffers, cgen_var_494, ((commandBufferCount)));
7030 countingStream->write((uint64_t*)cgen_var_494, ((commandBufferCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08007031 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007032 }
7033 }
7034 uint32_t packetSize_vkFreeCommandBuffers = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7035 countingStream->rewind();
7036 uint32_t opcode_vkFreeCommandBuffers = OP_vkFreeCommandBuffers;
7037 stream->write(&opcode_vkFreeCommandBuffers, sizeof(uint32_t));
7038 stream->write(&packetSize_vkFreeCommandBuffers, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007039 uint64_t cgen_var_495;
7040 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_495, 1);
7041 stream->write((uint64_t*)&cgen_var_495, 1 * 8);
7042 uint64_t cgen_var_496;
7043 stream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_496, 1);
7044 stream->write((uint64_t*)&cgen_var_496, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007045 stream->write((uint32_t*)&local_commandBufferCount, sizeof(uint32_t));
Lingfeng Yang77dc2512018-11-17 12:48:37 -08007046 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -04007047 uint64_t cgen_var_497 = (uint64_t)(uintptr_t)local_pCommandBuffers;
7048 stream->putBe64(cgen_var_497);
Lingfeng Yang9d02e102018-11-10 01:51:46 -08007049 if (local_pCommandBuffers)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007050 {
Lingfeng Yang2285df12018-11-17 16:25:11 -08007051 if (((commandBufferCount)))
7052 {
David Reveman9875f2c2019-06-11 21:47:12 -04007053 uint64_t* cgen_var_498;
7054 stream->alloc((void**)&cgen_var_498, ((commandBufferCount)) * 8);
7055 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(local_pCommandBuffers, cgen_var_498, ((commandBufferCount)));
7056 stream->write((uint64_t*)cgen_var_498, ((commandBufferCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08007057 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007058 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007059 AEMU_SCOPED_TRACE("vkFreeCommandBuffers readParams");
7060 AEMU_SCOPED_TRACE("vkFreeCommandBuffers returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007061 if (pCommandBuffers)
7062 {
7063 resources->destroyMapping()->mapHandles_VkCommandBuffer((VkCommandBuffer*)pCommandBuffers, ((commandBufferCount)));
7064 }
Lingfeng Yang256f9252020-07-14 14:27:33 -07007065 pool->freeAll();
7066 countingStream->clearPool();
7067 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007068 mImpl->log("finish vkFreeCommandBuffers");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007069}
7070
7071VkResult VkEncoder::vkBeginCommandBuffer(
7072 VkCommandBuffer commandBuffer,
7073 const VkCommandBufferBeginInfo* pBeginInfo)
7074{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007075 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007076 AEMU_SCOPED_TRACE("vkBeginCommandBuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007077 mImpl->log("start vkBeginCommandBuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007078 auto stream = mImpl->stream();
7079 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007080 auto resources = mImpl->resources();
7081 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007082 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007083 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007084 VkCommandBufferBeginInfo* local_pBeginInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007085 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007086 local_pBeginInfo = nullptr;
7087 if (pBeginInfo)
7088 {
7089 local_pBeginInfo = (VkCommandBufferBeginInfo*)pool->alloc(sizeof(const VkCommandBufferBeginInfo));
7090 deepcopy_VkCommandBufferBeginInfo(pool, pBeginInfo, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
7091 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08007092 if (local_pBeginInfo)
7093 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08007094 transform_tohost_VkCommandBufferBeginInfo(mImpl->resources(), (VkCommandBufferBeginInfo*)(local_pBeginInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -08007095 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007096 countingStream->rewind();
7097 {
David Reveman9875f2c2019-06-11 21:47:12 -04007098 uint64_t cgen_var_499;
7099 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_499, 1);
7100 countingStream->write((uint64_t*)&cgen_var_499, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007101 marshal_VkCommandBufferBeginInfo(countingStream, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007102 }
7103 uint32_t packetSize_vkBeginCommandBuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7104 countingStream->rewind();
7105 uint32_t opcode_vkBeginCommandBuffer = OP_vkBeginCommandBuffer;
7106 stream->write(&opcode_vkBeginCommandBuffer, sizeof(uint32_t));
7107 stream->write(&packetSize_vkBeginCommandBuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007108 uint64_t cgen_var_500;
7109 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_500, 1);
7110 stream->write((uint64_t*)&cgen_var_500, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007111 marshal_VkCommandBufferBeginInfo(stream, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007112 AEMU_SCOPED_TRACE("vkBeginCommandBuffer readParams");
7113 AEMU_SCOPED_TRACE("vkBeginCommandBuffer returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007114 VkResult vkBeginCommandBuffer_VkResult_return = (VkResult)0;
7115 stream->read(&vkBeginCommandBuffer_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07007116 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08007117 countingStream->clearPool();
7118 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007119 mImpl->log("finish vkBeginCommandBuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007120 return vkBeginCommandBuffer_VkResult_return;
7121}
7122
7123VkResult VkEncoder::vkEndCommandBuffer(
7124 VkCommandBuffer commandBuffer)
7125{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007126 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007127 AEMU_SCOPED_TRACE("vkEndCommandBuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007128 mImpl->log("start vkEndCommandBuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007129 auto stream = mImpl->stream();
7130 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007131 auto resources = mImpl->resources();
7132 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007133 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007134 VkCommandBuffer local_commandBuffer;
7135 local_commandBuffer = commandBuffer;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007136 countingStream->rewind();
7137 {
David Reveman9875f2c2019-06-11 21:47:12 -04007138 uint64_t cgen_var_501;
7139 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_501, 1);
7140 countingStream->write((uint64_t*)&cgen_var_501, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007141 }
7142 uint32_t packetSize_vkEndCommandBuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7143 countingStream->rewind();
7144 uint32_t opcode_vkEndCommandBuffer = OP_vkEndCommandBuffer;
7145 stream->write(&opcode_vkEndCommandBuffer, sizeof(uint32_t));
7146 stream->write(&packetSize_vkEndCommandBuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007147 uint64_t cgen_var_502;
7148 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_502, 1);
7149 stream->write((uint64_t*)&cgen_var_502, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007150 AEMU_SCOPED_TRACE("vkEndCommandBuffer readParams");
7151 AEMU_SCOPED_TRACE("vkEndCommandBuffer returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007152 VkResult vkEndCommandBuffer_VkResult_return = (VkResult)0;
7153 stream->read(&vkEndCommandBuffer_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07007154 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08007155 countingStream->clearPool();
7156 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007157 mImpl->log("finish vkEndCommandBuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007158 return vkEndCommandBuffer_VkResult_return;
7159}
7160
7161VkResult VkEncoder::vkResetCommandBuffer(
7162 VkCommandBuffer commandBuffer,
7163 VkCommandBufferResetFlags flags)
7164{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007165 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007166 AEMU_SCOPED_TRACE("vkResetCommandBuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007167 mImpl->log("start vkResetCommandBuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007168 auto stream = mImpl->stream();
7169 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007170 auto resources = mImpl->resources();
7171 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007172 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007173 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007174 VkCommandBufferResetFlags local_flags;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007175 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007176 local_flags = flags;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007177 countingStream->rewind();
7178 {
David Reveman9875f2c2019-06-11 21:47:12 -04007179 uint64_t cgen_var_503;
7180 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_503, 1);
7181 countingStream->write((uint64_t*)&cgen_var_503, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007182 countingStream->write((VkCommandBufferResetFlags*)&local_flags, sizeof(VkCommandBufferResetFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007183 }
7184 uint32_t packetSize_vkResetCommandBuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7185 countingStream->rewind();
7186 uint32_t opcode_vkResetCommandBuffer = OP_vkResetCommandBuffer;
7187 stream->write(&opcode_vkResetCommandBuffer, sizeof(uint32_t));
7188 stream->write(&packetSize_vkResetCommandBuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007189 uint64_t cgen_var_504;
7190 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_504, 1);
7191 stream->write((uint64_t*)&cgen_var_504, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007192 stream->write((VkCommandBufferResetFlags*)&local_flags, sizeof(VkCommandBufferResetFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007193 AEMU_SCOPED_TRACE("vkResetCommandBuffer readParams");
7194 AEMU_SCOPED_TRACE("vkResetCommandBuffer returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007195 VkResult vkResetCommandBuffer_VkResult_return = (VkResult)0;
7196 stream->read(&vkResetCommandBuffer_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -07007197 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -08007198 countingStream->clearPool();
7199 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007200 mImpl->log("finish vkResetCommandBuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007201 return vkResetCommandBuffer_VkResult_return;
7202}
7203
7204void VkEncoder::vkCmdBindPipeline(
7205 VkCommandBuffer commandBuffer,
7206 VkPipelineBindPoint pipelineBindPoint,
7207 VkPipeline pipeline)
7208{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007209 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007210 AEMU_SCOPED_TRACE("vkCmdBindPipeline encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007211 mImpl->log("start vkCmdBindPipeline");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007212 auto stream = mImpl->stream();
7213 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007214 auto resources = mImpl->resources();
7215 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007216 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007217 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007218 VkPipelineBindPoint local_pipelineBindPoint;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007219 VkPipeline local_pipeline;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007220 local_commandBuffer = commandBuffer;
7221 local_pipelineBindPoint = pipelineBindPoint;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007222 local_pipeline = pipeline;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007223 countingStream->rewind();
7224 {
David Reveman9875f2c2019-06-11 21:47:12 -04007225 uint64_t cgen_var_505;
7226 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_505, 1);
7227 countingStream->write((uint64_t*)&cgen_var_505, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007228 countingStream->write((VkPipelineBindPoint*)&local_pipelineBindPoint, sizeof(VkPipelineBindPoint));
David Reveman9875f2c2019-06-11 21:47:12 -04007229 uint64_t cgen_var_506;
7230 countingStream->handleMapping()->mapHandles_VkPipeline_u64(&local_pipeline, &cgen_var_506, 1);
7231 countingStream->write((uint64_t*)&cgen_var_506, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007232 }
7233 uint32_t packetSize_vkCmdBindPipeline = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7234 countingStream->rewind();
7235 uint32_t opcode_vkCmdBindPipeline = OP_vkCmdBindPipeline;
7236 stream->write(&opcode_vkCmdBindPipeline, sizeof(uint32_t));
7237 stream->write(&packetSize_vkCmdBindPipeline, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007238 uint64_t cgen_var_507;
7239 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_507, 1);
7240 stream->write((uint64_t*)&cgen_var_507, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007241 stream->write((VkPipelineBindPoint*)&local_pipelineBindPoint, sizeof(VkPipelineBindPoint));
David Reveman9875f2c2019-06-11 21:47:12 -04007242 uint64_t cgen_var_508;
7243 stream->handleMapping()->mapHandles_VkPipeline_u64(&local_pipeline, &cgen_var_508, 1);
7244 stream->write((uint64_t*)&cgen_var_508, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007245 AEMU_SCOPED_TRACE("vkCmdBindPipeline readParams");
7246 AEMU_SCOPED_TRACE("vkCmdBindPipeline returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007247 pool->freeAll();
7248 countingStream->clearPool();
7249 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007250 mImpl->log("finish vkCmdBindPipeline");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007251}
7252
7253void VkEncoder::vkCmdSetViewport(
7254 VkCommandBuffer commandBuffer,
7255 uint32_t firstViewport,
7256 uint32_t viewportCount,
7257 const VkViewport* pViewports)
7258{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007259 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007260 AEMU_SCOPED_TRACE("vkCmdSetViewport encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007261 mImpl->log("start vkCmdSetViewport");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007262 auto stream = mImpl->stream();
7263 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007264 auto resources = mImpl->resources();
7265 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007266 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007267 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007268 uint32_t local_firstViewport;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007269 uint32_t local_viewportCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007270 VkViewport* local_pViewports;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007271 local_commandBuffer = commandBuffer;
7272 local_firstViewport = firstViewport;
7273 local_viewportCount = viewportCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007274 local_pViewports = nullptr;
7275 if (pViewports)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007276 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007277 local_pViewports = (VkViewport*)pool->alloc(((viewportCount)) * sizeof(const VkViewport));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007278 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
7279 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007280 deepcopy_VkViewport(pool, pViewports + i, (VkViewport*)(local_pViewports + i));
7281 }
7282 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08007283 if (local_pViewports)
7284 {
7285 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
7286 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08007287 transform_tohost_VkViewport(mImpl->resources(), (VkViewport*)(local_pViewports + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08007288 }
7289 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007290 countingStream->rewind();
7291 {
David Reveman9875f2c2019-06-11 21:47:12 -04007292 uint64_t cgen_var_509;
7293 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_509, 1);
7294 countingStream->write((uint64_t*)&cgen_var_509, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007295 countingStream->write((uint32_t*)&local_firstViewport, sizeof(uint32_t));
7296 countingStream->write((uint32_t*)&local_viewportCount, sizeof(uint32_t));
7297 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
7298 {
7299 marshal_VkViewport(countingStream, (VkViewport*)(local_pViewports + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007300 }
7301 }
7302 uint32_t packetSize_vkCmdSetViewport = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7303 countingStream->rewind();
7304 uint32_t opcode_vkCmdSetViewport = OP_vkCmdSetViewport;
7305 stream->write(&opcode_vkCmdSetViewport, sizeof(uint32_t));
7306 stream->write(&packetSize_vkCmdSetViewport, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007307 uint64_t cgen_var_510;
7308 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_510, 1);
7309 stream->write((uint64_t*)&cgen_var_510, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007310 stream->write((uint32_t*)&local_firstViewport, sizeof(uint32_t));
7311 stream->write((uint32_t*)&local_viewportCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007312 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
7313 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007314 marshal_VkViewport(stream, (VkViewport*)(local_pViewports + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007315 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007316 AEMU_SCOPED_TRACE("vkCmdSetViewport readParams");
7317 AEMU_SCOPED_TRACE("vkCmdSetViewport returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007318 pool->freeAll();
7319 countingStream->clearPool();
7320 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007321 mImpl->log("finish vkCmdSetViewport");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007322}
7323
7324void VkEncoder::vkCmdSetScissor(
7325 VkCommandBuffer commandBuffer,
7326 uint32_t firstScissor,
7327 uint32_t scissorCount,
7328 const VkRect2D* pScissors)
7329{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007330 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007331 AEMU_SCOPED_TRACE("vkCmdSetScissor encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007332 mImpl->log("start vkCmdSetScissor");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007333 auto stream = mImpl->stream();
7334 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007335 auto resources = mImpl->resources();
7336 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007337 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007338 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007339 uint32_t local_firstScissor;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007340 uint32_t local_scissorCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007341 VkRect2D* local_pScissors;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007342 local_commandBuffer = commandBuffer;
7343 local_firstScissor = firstScissor;
7344 local_scissorCount = scissorCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007345 local_pScissors = nullptr;
7346 if (pScissors)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007347 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007348 local_pScissors = (VkRect2D*)pool->alloc(((scissorCount)) * sizeof(const VkRect2D));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007349 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i)
7350 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007351 deepcopy_VkRect2D(pool, pScissors + i, (VkRect2D*)(local_pScissors + i));
7352 }
7353 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08007354 if (local_pScissors)
7355 {
7356 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i)
7357 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08007358 transform_tohost_VkRect2D(mImpl->resources(), (VkRect2D*)(local_pScissors + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08007359 }
7360 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007361 countingStream->rewind();
7362 {
David Reveman9875f2c2019-06-11 21:47:12 -04007363 uint64_t cgen_var_511;
7364 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_511, 1);
7365 countingStream->write((uint64_t*)&cgen_var_511, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007366 countingStream->write((uint32_t*)&local_firstScissor, sizeof(uint32_t));
7367 countingStream->write((uint32_t*)&local_scissorCount, sizeof(uint32_t));
7368 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i)
7369 {
7370 marshal_VkRect2D(countingStream, (VkRect2D*)(local_pScissors + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007371 }
7372 }
7373 uint32_t packetSize_vkCmdSetScissor = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7374 countingStream->rewind();
7375 uint32_t opcode_vkCmdSetScissor = OP_vkCmdSetScissor;
7376 stream->write(&opcode_vkCmdSetScissor, sizeof(uint32_t));
7377 stream->write(&packetSize_vkCmdSetScissor, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007378 uint64_t cgen_var_512;
7379 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_512, 1);
7380 stream->write((uint64_t*)&cgen_var_512, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007381 stream->write((uint32_t*)&local_firstScissor, sizeof(uint32_t));
7382 stream->write((uint32_t*)&local_scissorCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007383 for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i)
7384 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007385 marshal_VkRect2D(stream, (VkRect2D*)(local_pScissors + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007386 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007387 AEMU_SCOPED_TRACE("vkCmdSetScissor readParams");
7388 AEMU_SCOPED_TRACE("vkCmdSetScissor returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007389 pool->freeAll();
7390 countingStream->clearPool();
7391 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007392 mImpl->log("finish vkCmdSetScissor");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007393}
7394
7395void VkEncoder::vkCmdSetLineWidth(
7396 VkCommandBuffer commandBuffer,
7397 float lineWidth)
7398{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007399 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007400 AEMU_SCOPED_TRACE("vkCmdSetLineWidth encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007401 mImpl->log("start vkCmdSetLineWidth");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007402 auto stream = mImpl->stream();
7403 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007404 auto resources = mImpl->resources();
7405 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007406 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007407 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007408 float local_lineWidth;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007409 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007410 local_lineWidth = lineWidth;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007411 countingStream->rewind();
7412 {
David Reveman9875f2c2019-06-11 21:47:12 -04007413 uint64_t cgen_var_513;
7414 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_513, 1);
7415 countingStream->write((uint64_t*)&cgen_var_513, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007416 countingStream->write((float*)&local_lineWidth, sizeof(float));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007417 }
7418 uint32_t packetSize_vkCmdSetLineWidth = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7419 countingStream->rewind();
7420 uint32_t opcode_vkCmdSetLineWidth = OP_vkCmdSetLineWidth;
7421 stream->write(&opcode_vkCmdSetLineWidth, sizeof(uint32_t));
7422 stream->write(&packetSize_vkCmdSetLineWidth, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007423 uint64_t cgen_var_514;
7424 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_514, 1);
7425 stream->write((uint64_t*)&cgen_var_514, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007426 stream->write((float*)&local_lineWidth, sizeof(float));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007427 AEMU_SCOPED_TRACE("vkCmdSetLineWidth readParams");
7428 AEMU_SCOPED_TRACE("vkCmdSetLineWidth returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007429 pool->freeAll();
7430 countingStream->clearPool();
7431 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007432 mImpl->log("finish vkCmdSetLineWidth");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007433}
7434
7435void VkEncoder::vkCmdSetDepthBias(
7436 VkCommandBuffer commandBuffer,
7437 float depthBiasConstantFactor,
7438 float depthBiasClamp,
7439 float depthBiasSlopeFactor)
7440{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007441 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007442 AEMU_SCOPED_TRACE("vkCmdSetDepthBias encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007443 mImpl->log("start vkCmdSetDepthBias");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007444 auto stream = mImpl->stream();
7445 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007446 auto resources = mImpl->resources();
7447 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007448 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007449 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007450 float local_depthBiasConstantFactor;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007451 float local_depthBiasClamp;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007452 float local_depthBiasSlopeFactor;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007453 local_commandBuffer = commandBuffer;
7454 local_depthBiasConstantFactor = depthBiasConstantFactor;
7455 local_depthBiasClamp = depthBiasClamp;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007456 local_depthBiasSlopeFactor = depthBiasSlopeFactor;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007457 countingStream->rewind();
7458 {
David Reveman9875f2c2019-06-11 21:47:12 -04007459 uint64_t cgen_var_515;
7460 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_515, 1);
7461 countingStream->write((uint64_t*)&cgen_var_515, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007462 countingStream->write((float*)&local_depthBiasConstantFactor, sizeof(float));
7463 countingStream->write((float*)&local_depthBiasClamp, sizeof(float));
7464 countingStream->write((float*)&local_depthBiasSlopeFactor, sizeof(float));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007465 }
7466 uint32_t packetSize_vkCmdSetDepthBias = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7467 countingStream->rewind();
7468 uint32_t opcode_vkCmdSetDepthBias = OP_vkCmdSetDepthBias;
7469 stream->write(&opcode_vkCmdSetDepthBias, sizeof(uint32_t));
7470 stream->write(&packetSize_vkCmdSetDepthBias, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007471 uint64_t cgen_var_516;
7472 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_516, 1);
7473 stream->write((uint64_t*)&cgen_var_516, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007474 stream->write((float*)&local_depthBiasConstantFactor, sizeof(float));
7475 stream->write((float*)&local_depthBiasClamp, sizeof(float));
7476 stream->write((float*)&local_depthBiasSlopeFactor, sizeof(float));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007477 AEMU_SCOPED_TRACE("vkCmdSetDepthBias readParams");
7478 AEMU_SCOPED_TRACE("vkCmdSetDepthBias returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007479 pool->freeAll();
7480 countingStream->clearPool();
7481 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007482 mImpl->log("finish vkCmdSetDepthBias");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007483}
7484
7485void VkEncoder::vkCmdSetBlendConstants(
7486 VkCommandBuffer commandBuffer,
Lingfeng Yang97ddeb82019-04-20 14:32:52 -07007487 const float blendConstants[4])
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007488{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007489 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007490 AEMU_SCOPED_TRACE("vkCmdSetBlendConstants encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007491 mImpl->log("start vkCmdSetBlendConstants");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007492 auto stream = mImpl->stream();
7493 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007494 auto resources = mImpl->resources();
7495 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007496 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007497 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007498 float local_blendConstants[4];
Lingfeng Yang9666b852018-11-13 23:09:59 -08007499 local_commandBuffer = commandBuffer;
Lingfeng Yangbb775b22019-08-09 08:28:28 -07007500 memcpy(local_blendConstants, blendConstants, 4 * sizeof(const float));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007501 countingStream->rewind();
7502 {
David Reveman9875f2c2019-06-11 21:47:12 -04007503 uint64_t cgen_var_517;
7504 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_517, 1);
7505 countingStream->write((uint64_t*)&cgen_var_517, 1 * 8);
Lingfeng Yangbb775b22019-08-09 08:28:28 -07007506 countingStream->write((float*)local_blendConstants, 4 * sizeof(float));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007507 }
7508 uint32_t packetSize_vkCmdSetBlendConstants = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7509 countingStream->rewind();
7510 uint32_t opcode_vkCmdSetBlendConstants = OP_vkCmdSetBlendConstants;
7511 stream->write(&opcode_vkCmdSetBlendConstants, sizeof(uint32_t));
7512 stream->write(&packetSize_vkCmdSetBlendConstants, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007513 uint64_t cgen_var_518;
7514 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_518, 1);
7515 stream->write((uint64_t*)&cgen_var_518, 1 * 8);
Lingfeng Yangbb775b22019-08-09 08:28:28 -07007516 stream->write((float*)local_blendConstants, 4 * sizeof(float));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007517 AEMU_SCOPED_TRACE("vkCmdSetBlendConstants readParams");
7518 AEMU_SCOPED_TRACE("vkCmdSetBlendConstants returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007519 pool->freeAll();
7520 countingStream->clearPool();
7521 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007522 mImpl->log("finish vkCmdSetBlendConstants");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007523}
7524
7525void VkEncoder::vkCmdSetDepthBounds(
7526 VkCommandBuffer commandBuffer,
7527 float minDepthBounds,
7528 float maxDepthBounds)
7529{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007530 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007531 AEMU_SCOPED_TRACE("vkCmdSetDepthBounds encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007532 mImpl->log("start vkCmdSetDepthBounds");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007533 auto stream = mImpl->stream();
7534 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007535 auto resources = mImpl->resources();
7536 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007537 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007538 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007539 float local_minDepthBounds;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007540 float local_maxDepthBounds;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007541 local_commandBuffer = commandBuffer;
7542 local_minDepthBounds = minDepthBounds;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007543 local_maxDepthBounds = maxDepthBounds;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007544 countingStream->rewind();
7545 {
David Reveman9875f2c2019-06-11 21:47:12 -04007546 uint64_t cgen_var_519;
7547 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_519, 1);
7548 countingStream->write((uint64_t*)&cgen_var_519, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007549 countingStream->write((float*)&local_minDepthBounds, sizeof(float));
7550 countingStream->write((float*)&local_maxDepthBounds, sizeof(float));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007551 }
7552 uint32_t packetSize_vkCmdSetDepthBounds = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7553 countingStream->rewind();
7554 uint32_t opcode_vkCmdSetDepthBounds = OP_vkCmdSetDepthBounds;
7555 stream->write(&opcode_vkCmdSetDepthBounds, sizeof(uint32_t));
7556 stream->write(&packetSize_vkCmdSetDepthBounds, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007557 uint64_t cgen_var_520;
7558 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_520, 1);
7559 stream->write((uint64_t*)&cgen_var_520, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007560 stream->write((float*)&local_minDepthBounds, sizeof(float));
7561 stream->write((float*)&local_maxDepthBounds, sizeof(float));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007562 AEMU_SCOPED_TRACE("vkCmdSetDepthBounds readParams");
7563 AEMU_SCOPED_TRACE("vkCmdSetDepthBounds returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007564 pool->freeAll();
7565 countingStream->clearPool();
7566 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007567 mImpl->log("finish vkCmdSetDepthBounds");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007568}
7569
7570void VkEncoder::vkCmdSetStencilCompareMask(
7571 VkCommandBuffer commandBuffer,
7572 VkStencilFaceFlags faceMask,
7573 uint32_t compareMask)
7574{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007575 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007576 AEMU_SCOPED_TRACE("vkCmdSetStencilCompareMask encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007577 mImpl->log("start vkCmdSetStencilCompareMask");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007578 auto stream = mImpl->stream();
7579 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007580 auto resources = mImpl->resources();
7581 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007582 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007583 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007584 VkStencilFaceFlags local_faceMask;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007585 uint32_t local_compareMask;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007586 local_commandBuffer = commandBuffer;
7587 local_faceMask = faceMask;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007588 local_compareMask = compareMask;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007589 countingStream->rewind();
7590 {
David Reveman9875f2c2019-06-11 21:47:12 -04007591 uint64_t cgen_var_521;
7592 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_521, 1);
7593 countingStream->write((uint64_t*)&cgen_var_521, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007594 countingStream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
7595 countingStream->write((uint32_t*)&local_compareMask, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007596 }
7597 uint32_t packetSize_vkCmdSetStencilCompareMask = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7598 countingStream->rewind();
7599 uint32_t opcode_vkCmdSetStencilCompareMask = OP_vkCmdSetStencilCompareMask;
7600 stream->write(&opcode_vkCmdSetStencilCompareMask, sizeof(uint32_t));
7601 stream->write(&packetSize_vkCmdSetStencilCompareMask, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007602 uint64_t cgen_var_522;
7603 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_522, 1);
7604 stream->write((uint64_t*)&cgen_var_522, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007605 stream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
7606 stream->write((uint32_t*)&local_compareMask, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007607 AEMU_SCOPED_TRACE("vkCmdSetStencilCompareMask readParams");
7608 AEMU_SCOPED_TRACE("vkCmdSetStencilCompareMask returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007609 pool->freeAll();
7610 countingStream->clearPool();
7611 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007612 mImpl->log("finish vkCmdSetStencilCompareMask");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007613}
7614
7615void VkEncoder::vkCmdSetStencilWriteMask(
7616 VkCommandBuffer commandBuffer,
7617 VkStencilFaceFlags faceMask,
7618 uint32_t writeMask)
7619{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007620 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007621 AEMU_SCOPED_TRACE("vkCmdSetStencilWriteMask encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007622 mImpl->log("start vkCmdSetStencilWriteMask");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007623 auto stream = mImpl->stream();
7624 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007625 auto resources = mImpl->resources();
7626 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007627 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007628 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007629 VkStencilFaceFlags local_faceMask;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007630 uint32_t local_writeMask;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007631 local_commandBuffer = commandBuffer;
7632 local_faceMask = faceMask;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007633 local_writeMask = writeMask;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007634 countingStream->rewind();
7635 {
David Reveman9875f2c2019-06-11 21:47:12 -04007636 uint64_t cgen_var_523;
7637 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_523, 1);
7638 countingStream->write((uint64_t*)&cgen_var_523, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007639 countingStream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
7640 countingStream->write((uint32_t*)&local_writeMask, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007641 }
7642 uint32_t packetSize_vkCmdSetStencilWriteMask = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7643 countingStream->rewind();
7644 uint32_t opcode_vkCmdSetStencilWriteMask = OP_vkCmdSetStencilWriteMask;
7645 stream->write(&opcode_vkCmdSetStencilWriteMask, sizeof(uint32_t));
7646 stream->write(&packetSize_vkCmdSetStencilWriteMask, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007647 uint64_t cgen_var_524;
7648 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_524, 1);
7649 stream->write((uint64_t*)&cgen_var_524, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007650 stream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
7651 stream->write((uint32_t*)&local_writeMask, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007652 AEMU_SCOPED_TRACE("vkCmdSetStencilWriteMask readParams");
7653 AEMU_SCOPED_TRACE("vkCmdSetStencilWriteMask returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007654 pool->freeAll();
7655 countingStream->clearPool();
7656 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007657 mImpl->log("finish vkCmdSetStencilWriteMask");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007658}
7659
7660void VkEncoder::vkCmdSetStencilReference(
7661 VkCommandBuffer commandBuffer,
7662 VkStencilFaceFlags faceMask,
7663 uint32_t reference)
7664{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007665 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007666 AEMU_SCOPED_TRACE("vkCmdSetStencilReference encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007667 mImpl->log("start vkCmdSetStencilReference");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007668 auto stream = mImpl->stream();
7669 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007670 auto resources = mImpl->resources();
7671 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007672 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007673 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007674 VkStencilFaceFlags local_faceMask;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007675 uint32_t local_reference;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007676 local_commandBuffer = commandBuffer;
7677 local_faceMask = faceMask;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007678 local_reference = reference;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007679 countingStream->rewind();
7680 {
David Reveman9875f2c2019-06-11 21:47:12 -04007681 uint64_t cgen_var_525;
7682 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_525, 1);
7683 countingStream->write((uint64_t*)&cgen_var_525, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007684 countingStream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
7685 countingStream->write((uint32_t*)&local_reference, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007686 }
7687 uint32_t packetSize_vkCmdSetStencilReference = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7688 countingStream->rewind();
7689 uint32_t opcode_vkCmdSetStencilReference = OP_vkCmdSetStencilReference;
7690 stream->write(&opcode_vkCmdSetStencilReference, sizeof(uint32_t));
7691 stream->write(&packetSize_vkCmdSetStencilReference, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007692 uint64_t cgen_var_526;
7693 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_526, 1);
7694 stream->write((uint64_t*)&cgen_var_526, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007695 stream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
7696 stream->write((uint32_t*)&local_reference, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007697 AEMU_SCOPED_TRACE("vkCmdSetStencilReference readParams");
7698 AEMU_SCOPED_TRACE("vkCmdSetStencilReference returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007699 pool->freeAll();
7700 countingStream->clearPool();
7701 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007702 mImpl->log("finish vkCmdSetStencilReference");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007703}
7704
7705void VkEncoder::vkCmdBindDescriptorSets(
7706 VkCommandBuffer commandBuffer,
7707 VkPipelineBindPoint pipelineBindPoint,
7708 VkPipelineLayout layout,
7709 uint32_t firstSet,
7710 uint32_t descriptorSetCount,
7711 const VkDescriptorSet* pDescriptorSets,
7712 uint32_t dynamicOffsetCount,
7713 const uint32_t* pDynamicOffsets)
7714{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007715 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007716 AEMU_SCOPED_TRACE("vkCmdBindDescriptorSets encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007717 mImpl->log("start vkCmdBindDescriptorSets");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007718 auto stream = mImpl->stream();
7719 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007720 auto resources = mImpl->resources();
7721 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007722 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007723 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007724 VkPipelineBindPoint local_pipelineBindPoint;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007725 VkPipelineLayout local_layout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007726 uint32_t local_firstSet;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007727 uint32_t local_descriptorSetCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007728 VkDescriptorSet* local_pDescriptorSets;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007729 uint32_t local_dynamicOffsetCount;
7730 uint32_t* local_pDynamicOffsets;
7731 local_commandBuffer = commandBuffer;
7732 local_pipelineBindPoint = pipelineBindPoint;
7733 local_layout = layout;
7734 local_firstSet = firstSet;
7735 local_descriptorSetCount = descriptorSetCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007736 local_pDescriptorSets = nullptr;
7737 if (pDescriptorSets)
7738 {
7739 local_pDescriptorSets = (VkDescriptorSet*)pool->dupArray(pDescriptorSets, ((descriptorSetCount)) * sizeof(const VkDescriptorSet));
7740 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007741 local_dynamicOffsetCount = dynamicOffsetCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007742 local_pDynamicOffsets = nullptr;
7743 if (pDynamicOffsets)
7744 {
7745 local_pDynamicOffsets = (uint32_t*)pool->dupArray(pDynamicOffsets, ((dynamicOffsetCount)) * sizeof(const uint32_t));
7746 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007747 countingStream->rewind();
7748 {
David Reveman9875f2c2019-06-11 21:47:12 -04007749 uint64_t cgen_var_527;
7750 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_527, 1);
7751 countingStream->write((uint64_t*)&cgen_var_527, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007752 countingStream->write((VkPipelineBindPoint*)&local_pipelineBindPoint, sizeof(VkPipelineBindPoint));
David Reveman9875f2c2019-06-11 21:47:12 -04007753 uint64_t cgen_var_528;
7754 countingStream->handleMapping()->mapHandles_VkPipelineLayout_u64(&local_layout, &cgen_var_528, 1);
7755 countingStream->write((uint64_t*)&cgen_var_528, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007756 countingStream->write((uint32_t*)&local_firstSet, sizeof(uint32_t));
7757 countingStream->write((uint32_t*)&local_descriptorSetCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08007758 if (((descriptorSetCount)))
7759 {
David Reveman9875f2c2019-06-11 21:47:12 -04007760 uint64_t* cgen_var_529;
7761 countingStream->alloc((void**)&cgen_var_529, ((descriptorSetCount)) * 8);
7762 countingStream->handleMapping()->mapHandles_VkDescriptorSet_u64(local_pDescriptorSets, cgen_var_529, ((descriptorSetCount)));
7763 countingStream->write((uint64_t*)cgen_var_529, ((descriptorSetCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08007764 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007765 countingStream->write((uint32_t*)&local_dynamicOffsetCount, sizeof(uint32_t));
7766 countingStream->write((uint32_t*)local_pDynamicOffsets, ((dynamicOffsetCount)) * sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007767 }
7768 uint32_t packetSize_vkCmdBindDescriptorSets = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7769 countingStream->rewind();
7770 uint32_t opcode_vkCmdBindDescriptorSets = OP_vkCmdBindDescriptorSets;
7771 stream->write(&opcode_vkCmdBindDescriptorSets, sizeof(uint32_t));
7772 stream->write(&packetSize_vkCmdBindDescriptorSets, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007773 uint64_t cgen_var_530;
7774 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_530, 1);
7775 stream->write((uint64_t*)&cgen_var_530, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007776 stream->write((VkPipelineBindPoint*)&local_pipelineBindPoint, sizeof(VkPipelineBindPoint));
David Reveman9875f2c2019-06-11 21:47:12 -04007777 uint64_t cgen_var_531;
7778 stream->handleMapping()->mapHandles_VkPipelineLayout_u64(&local_layout, &cgen_var_531, 1);
7779 stream->write((uint64_t*)&cgen_var_531, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007780 stream->write((uint32_t*)&local_firstSet, sizeof(uint32_t));
7781 stream->write((uint32_t*)&local_descriptorSetCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08007782 if (((descriptorSetCount)))
7783 {
David Reveman9875f2c2019-06-11 21:47:12 -04007784 uint64_t* cgen_var_532;
7785 stream->alloc((void**)&cgen_var_532, ((descriptorSetCount)) * 8);
7786 stream->handleMapping()->mapHandles_VkDescriptorSet_u64(local_pDescriptorSets, cgen_var_532, ((descriptorSetCount)));
7787 stream->write((uint64_t*)cgen_var_532, ((descriptorSetCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08007788 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007789 stream->write((uint32_t*)&local_dynamicOffsetCount, sizeof(uint32_t));
7790 stream->write((uint32_t*)local_pDynamicOffsets, ((dynamicOffsetCount)) * sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007791 AEMU_SCOPED_TRACE("vkCmdBindDescriptorSets readParams");
7792 AEMU_SCOPED_TRACE("vkCmdBindDescriptorSets returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007793 pool->freeAll();
7794 countingStream->clearPool();
7795 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007796 mImpl->log("finish vkCmdBindDescriptorSets");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007797}
7798
7799void VkEncoder::vkCmdBindIndexBuffer(
7800 VkCommandBuffer commandBuffer,
7801 VkBuffer buffer,
7802 VkDeviceSize offset,
7803 VkIndexType indexType)
7804{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007805 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007806 AEMU_SCOPED_TRACE("vkCmdBindIndexBuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007807 mImpl->log("start vkCmdBindIndexBuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007808 auto stream = mImpl->stream();
7809 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007810 auto resources = mImpl->resources();
7811 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007812 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007813 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007814 VkBuffer local_buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007815 VkDeviceSize local_offset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007816 VkIndexType local_indexType;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007817 local_commandBuffer = commandBuffer;
7818 local_buffer = buffer;
7819 local_offset = offset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007820 local_indexType = indexType;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007821 countingStream->rewind();
7822 {
David Reveman9875f2c2019-06-11 21:47:12 -04007823 uint64_t cgen_var_533;
7824 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_533, 1);
7825 countingStream->write((uint64_t*)&cgen_var_533, 1 * 8);
7826 uint64_t cgen_var_534;
7827 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_534, 1);
7828 countingStream->write((uint64_t*)&cgen_var_534, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007829 countingStream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
7830 countingStream->write((VkIndexType*)&local_indexType, sizeof(VkIndexType));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007831 }
7832 uint32_t packetSize_vkCmdBindIndexBuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7833 countingStream->rewind();
7834 uint32_t opcode_vkCmdBindIndexBuffer = OP_vkCmdBindIndexBuffer;
7835 stream->write(&opcode_vkCmdBindIndexBuffer, sizeof(uint32_t));
7836 stream->write(&packetSize_vkCmdBindIndexBuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007837 uint64_t cgen_var_535;
7838 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_535, 1);
7839 stream->write((uint64_t*)&cgen_var_535, 1 * 8);
7840 uint64_t cgen_var_536;
7841 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_536, 1);
7842 stream->write((uint64_t*)&cgen_var_536, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007843 stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
7844 stream->write((VkIndexType*)&local_indexType, sizeof(VkIndexType));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007845 AEMU_SCOPED_TRACE("vkCmdBindIndexBuffer readParams");
7846 AEMU_SCOPED_TRACE("vkCmdBindIndexBuffer returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007847 pool->freeAll();
7848 countingStream->clearPool();
7849 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007850 mImpl->log("finish vkCmdBindIndexBuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007851}
7852
7853void VkEncoder::vkCmdBindVertexBuffers(
7854 VkCommandBuffer commandBuffer,
7855 uint32_t firstBinding,
7856 uint32_t bindingCount,
7857 const VkBuffer* pBuffers,
7858 const VkDeviceSize* pOffsets)
7859{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007860 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007861 AEMU_SCOPED_TRACE("vkCmdBindVertexBuffers encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007862 mImpl->log("start vkCmdBindVertexBuffers");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007863 auto stream = mImpl->stream();
7864 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007865 auto resources = mImpl->resources();
7866 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007867 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007868 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007869 uint32_t local_firstBinding;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007870 uint32_t local_bindingCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007871 VkBuffer* local_pBuffers;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007872 VkDeviceSize* local_pOffsets;
7873 local_commandBuffer = commandBuffer;
7874 local_firstBinding = firstBinding;
7875 local_bindingCount = bindingCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007876 local_pBuffers = nullptr;
7877 if (pBuffers)
7878 {
7879 local_pBuffers = (VkBuffer*)pool->dupArray(pBuffers, ((bindingCount)) * sizeof(const VkBuffer));
7880 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007881 local_pOffsets = nullptr;
7882 if (pOffsets)
7883 {
7884 local_pOffsets = (VkDeviceSize*)pool->dupArray(pOffsets, ((bindingCount)) * sizeof(const VkDeviceSize));
7885 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007886 countingStream->rewind();
7887 {
David Reveman9875f2c2019-06-11 21:47:12 -04007888 uint64_t cgen_var_537;
7889 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_537, 1);
7890 countingStream->write((uint64_t*)&cgen_var_537, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007891 countingStream->write((uint32_t*)&local_firstBinding, sizeof(uint32_t));
7892 countingStream->write((uint32_t*)&local_bindingCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08007893 if (((bindingCount)))
7894 {
David Reveman9875f2c2019-06-11 21:47:12 -04007895 uint64_t* cgen_var_538;
7896 countingStream->alloc((void**)&cgen_var_538, ((bindingCount)) * 8);
7897 countingStream->handleMapping()->mapHandles_VkBuffer_u64(local_pBuffers, cgen_var_538, ((bindingCount)));
7898 countingStream->write((uint64_t*)cgen_var_538, ((bindingCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08007899 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007900 countingStream->write((VkDeviceSize*)local_pOffsets, ((bindingCount)) * sizeof(VkDeviceSize));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007901 }
7902 uint32_t packetSize_vkCmdBindVertexBuffers = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7903 countingStream->rewind();
7904 uint32_t opcode_vkCmdBindVertexBuffers = OP_vkCmdBindVertexBuffers;
7905 stream->write(&opcode_vkCmdBindVertexBuffers, sizeof(uint32_t));
7906 stream->write(&packetSize_vkCmdBindVertexBuffers, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007907 uint64_t cgen_var_539;
7908 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_539, 1);
7909 stream->write((uint64_t*)&cgen_var_539, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007910 stream->write((uint32_t*)&local_firstBinding, sizeof(uint32_t));
7911 stream->write((uint32_t*)&local_bindingCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08007912 if (((bindingCount)))
7913 {
David Reveman9875f2c2019-06-11 21:47:12 -04007914 uint64_t* cgen_var_540;
7915 stream->alloc((void**)&cgen_var_540, ((bindingCount)) * 8);
7916 stream->handleMapping()->mapHandles_VkBuffer_u64(local_pBuffers, cgen_var_540, ((bindingCount)));
7917 stream->write((uint64_t*)cgen_var_540, ((bindingCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08007918 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007919 stream->write((VkDeviceSize*)local_pOffsets, ((bindingCount)) * sizeof(VkDeviceSize));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007920 AEMU_SCOPED_TRACE("vkCmdBindVertexBuffers readParams");
7921 AEMU_SCOPED_TRACE("vkCmdBindVertexBuffers returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007922 pool->freeAll();
7923 countingStream->clearPool();
7924 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007925 mImpl->log("finish vkCmdBindVertexBuffers");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007926}
7927
7928void VkEncoder::vkCmdDraw(
7929 VkCommandBuffer commandBuffer,
7930 uint32_t vertexCount,
7931 uint32_t instanceCount,
7932 uint32_t firstVertex,
7933 uint32_t firstInstance)
7934{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007935 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007936 AEMU_SCOPED_TRACE("vkCmdDraw encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007937 mImpl->log("start vkCmdDraw");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007938 auto stream = mImpl->stream();
7939 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007940 auto resources = mImpl->resources();
7941 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007942 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007943 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007944 uint32_t local_vertexCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007945 uint32_t local_instanceCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007946 uint32_t local_firstVertex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007947 uint32_t local_firstInstance;
Lingfeng Yang9666b852018-11-13 23:09:59 -08007948 local_commandBuffer = commandBuffer;
7949 local_vertexCount = vertexCount;
7950 local_instanceCount = instanceCount;
7951 local_firstVertex = firstVertex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007952 local_firstInstance = firstInstance;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007953 countingStream->rewind();
7954 {
David Reveman9875f2c2019-06-11 21:47:12 -04007955 uint64_t cgen_var_541;
7956 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_541, 1);
7957 countingStream->write((uint64_t*)&cgen_var_541, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007958 countingStream->write((uint32_t*)&local_vertexCount, sizeof(uint32_t));
7959 countingStream->write((uint32_t*)&local_instanceCount, sizeof(uint32_t));
7960 countingStream->write((uint32_t*)&local_firstVertex, sizeof(uint32_t));
7961 countingStream->write((uint32_t*)&local_firstInstance, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007962 }
7963 uint32_t packetSize_vkCmdDraw = 4 + 4 + (uint32_t)countingStream->bytesWritten();
7964 countingStream->rewind();
7965 uint32_t opcode_vkCmdDraw = OP_vkCmdDraw;
7966 stream->write(&opcode_vkCmdDraw, sizeof(uint32_t));
7967 stream->write(&packetSize_vkCmdDraw, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04007968 uint64_t cgen_var_542;
7969 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_542, 1);
7970 stream->write((uint64_t*)&cgen_var_542, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007971 stream->write((uint32_t*)&local_vertexCount, sizeof(uint32_t));
7972 stream->write((uint32_t*)&local_instanceCount, sizeof(uint32_t));
7973 stream->write((uint32_t*)&local_firstVertex, sizeof(uint32_t));
7974 stream->write((uint32_t*)&local_firstInstance, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007975 AEMU_SCOPED_TRACE("vkCmdDraw readParams");
7976 AEMU_SCOPED_TRACE("vkCmdDraw returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07007977 pool->freeAll();
7978 countingStream->clearPool();
7979 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007980 mImpl->log("finish vkCmdDraw");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007981}
7982
7983void VkEncoder::vkCmdDrawIndexed(
7984 VkCommandBuffer commandBuffer,
7985 uint32_t indexCount,
7986 uint32_t instanceCount,
7987 uint32_t firstIndex,
7988 int32_t vertexOffset,
7989 uint32_t firstInstance)
7990{
Lingfeng Yang256f9252020-07-14 14:27:33 -07007991 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08007992 AEMU_SCOPED_TRACE("vkCmdDrawIndexed encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08007993 mImpl->log("start vkCmdDrawIndexed");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07007994 auto stream = mImpl->stream();
7995 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007996 auto resources = mImpl->resources();
7997 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08007998 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08007999 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008000 uint32_t local_indexCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008001 uint32_t local_instanceCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008002 uint32_t local_firstIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008003 int32_t local_vertexOffset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008004 uint32_t local_firstInstance;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008005 local_commandBuffer = commandBuffer;
8006 local_indexCount = indexCount;
8007 local_instanceCount = instanceCount;
8008 local_firstIndex = firstIndex;
8009 local_vertexOffset = vertexOffset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008010 local_firstInstance = firstInstance;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008011 countingStream->rewind();
8012 {
David Reveman9875f2c2019-06-11 21:47:12 -04008013 uint64_t cgen_var_543;
8014 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_543, 1);
8015 countingStream->write((uint64_t*)&cgen_var_543, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008016 countingStream->write((uint32_t*)&local_indexCount, sizeof(uint32_t));
8017 countingStream->write((uint32_t*)&local_instanceCount, sizeof(uint32_t));
8018 countingStream->write((uint32_t*)&local_firstIndex, sizeof(uint32_t));
8019 countingStream->write((int32_t*)&local_vertexOffset, sizeof(int32_t));
8020 countingStream->write((uint32_t*)&local_firstInstance, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008021 }
8022 uint32_t packetSize_vkCmdDrawIndexed = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8023 countingStream->rewind();
8024 uint32_t opcode_vkCmdDrawIndexed = OP_vkCmdDrawIndexed;
8025 stream->write(&opcode_vkCmdDrawIndexed, sizeof(uint32_t));
8026 stream->write(&packetSize_vkCmdDrawIndexed, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008027 uint64_t cgen_var_544;
8028 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_544, 1);
8029 stream->write((uint64_t*)&cgen_var_544, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008030 stream->write((uint32_t*)&local_indexCount, sizeof(uint32_t));
8031 stream->write((uint32_t*)&local_instanceCount, sizeof(uint32_t));
8032 stream->write((uint32_t*)&local_firstIndex, sizeof(uint32_t));
8033 stream->write((int32_t*)&local_vertexOffset, sizeof(int32_t));
8034 stream->write((uint32_t*)&local_firstInstance, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008035 AEMU_SCOPED_TRACE("vkCmdDrawIndexed readParams");
8036 AEMU_SCOPED_TRACE("vkCmdDrawIndexed returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008037 pool->freeAll();
8038 countingStream->clearPool();
8039 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008040 mImpl->log("finish vkCmdDrawIndexed");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008041}
8042
8043void VkEncoder::vkCmdDrawIndirect(
8044 VkCommandBuffer commandBuffer,
8045 VkBuffer buffer,
8046 VkDeviceSize offset,
8047 uint32_t drawCount,
8048 uint32_t stride)
8049{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008050 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008051 AEMU_SCOPED_TRACE("vkCmdDrawIndirect encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008052 mImpl->log("start vkCmdDrawIndirect");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008053 auto stream = mImpl->stream();
8054 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008055 auto resources = mImpl->resources();
8056 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008057 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008058 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008059 VkBuffer local_buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008060 VkDeviceSize local_offset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008061 uint32_t local_drawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008062 uint32_t local_stride;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008063 local_commandBuffer = commandBuffer;
8064 local_buffer = buffer;
8065 local_offset = offset;
8066 local_drawCount = drawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008067 local_stride = stride;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008068 countingStream->rewind();
8069 {
David Reveman9875f2c2019-06-11 21:47:12 -04008070 uint64_t cgen_var_545;
8071 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_545, 1);
8072 countingStream->write((uint64_t*)&cgen_var_545, 1 * 8);
8073 uint64_t cgen_var_546;
8074 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_546, 1);
8075 countingStream->write((uint64_t*)&cgen_var_546, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008076 countingStream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
8077 countingStream->write((uint32_t*)&local_drawCount, sizeof(uint32_t));
8078 countingStream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008079 }
8080 uint32_t packetSize_vkCmdDrawIndirect = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8081 countingStream->rewind();
8082 uint32_t opcode_vkCmdDrawIndirect = OP_vkCmdDrawIndirect;
8083 stream->write(&opcode_vkCmdDrawIndirect, sizeof(uint32_t));
8084 stream->write(&packetSize_vkCmdDrawIndirect, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008085 uint64_t cgen_var_547;
8086 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_547, 1);
8087 stream->write((uint64_t*)&cgen_var_547, 1 * 8);
8088 uint64_t cgen_var_548;
8089 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_548, 1);
8090 stream->write((uint64_t*)&cgen_var_548, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008091 stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
8092 stream->write((uint32_t*)&local_drawCount, sizeof(uint32_t));
8093 stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008094 AEMU_SCOPED_TRACE("vkCmdDrawIndirect readParams");
8095 AEMU_SCOPED_TRACE("vkCmdDrawIndirect returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008096 pool->freeAll();
8097 countingStream->clearPool();
8098 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008099 mImpl->log("finish vkCmdDrawIndirect");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008100}
8101
8102void VkEncoder::vkCmdDrawIndexedIndirect(
8103 VkCommandBuffer commandBuffer,
8104 VkBuffer buffer,
8105 VkDeviceSize offset,
8106 uint32_t drawCount,
8107 uint32_t stride)
8108{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008109 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008110 AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirect encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008111 mImpl->log("start vkCmdDrawIndexedIndirect");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008112 auto stream = mImpl->stream();
8113 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008114 auto resources = mImpl->resources();
8115 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008116 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008117 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008118 VkBuffer local_buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008119 VkDeviceSize local_offset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008120 uint32_t local_drawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008121 uint32_t local_stride;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008122 local_commandBuffer = commandBuffer;
8123 local_buffer = buffer;
8124 local_offset = offset;
8125 local_drawCount = drawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008126 local_stride = stride;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008127 countingStream->rewind();
8128 {
David Reveman9875f2c2019-06-11 21:47:12 -04008129 uint64_t cgen_var_549;
8130 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_549, 1);
8131 countingStream->write((uint64_t*)&cgen_var_549, 1 * 8);
8132 uint64_t cgen_var_550;
8133 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_550, 1);
8134 countingStream->write((uint64_t*)&cgen_var_550, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008135 countingStream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
8136 countingStream->write((uint32_t*)&local_drawCount, sizeof(uint32_t));
8137 countingStream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008138 }
8139 uint32_t packetSize_vkCmdDrawIndexedIndirect = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8140 countingStream->rewind();
8141 uint32_t opcode_vkCmdDrawIndexedIndirect = OP_vkCmdDrawIndexedIndirect;
8142 stream->write(&opcode_vkCmdDrawIndexedIndirect, sizeof(uint32_t));
8143 stream->write(&packetSize_vkCmdDrawIndexedIndirect, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008144 uint64_t cgen_var_551;
8145 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_551, 1);
8146 stream->write((uint64_t*)&cgen_var_551, 1 * 8);
8147 uint64_t cgen_var_552;
8148 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_552, 1);
8149 stream->write((uint64_t*)&cgen_var_552, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008150 stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
8151 stream->write((uint32_t*)&local_drawCount, sizeof(uint32_t));
8152 stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008153 AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirect readParams");
8154 AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirect returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008155 pool->freeAll();
8156 countingStream->clearPool();
8157 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008158 mImpl->log("finish vkCmdDrawIndexedIndirect");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008159}
8160
8161void VkEncoder::vkCmdDispatch(
8162 VkCommandBuffer commandBuffer,
8163 uint32_t groupCountX,
8164 uint32_t groupCountY,
8165 uint32_t groupCountZ)
8166{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008167 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008168 AEMU_SCOPED_TRACE("vkCmdDispatch encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008169 mImpl->log("start vkCmdDispatch");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008170 auto stream = mImpl->stream();
8171 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008172 auto resources = mImpl->resources();
8173 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008174 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008175 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008176 uint32_t local_groupCountX;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008177 uint32_t local_groupCountY;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008178 uint32_t local_groupCountZ;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008179 local_commandBuffer = commandBuffer;
8180 local_groupCountX = groupCountX;
8181 local_groupCountY = groupCountY;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008182 local_groupCountZ = groupCountZ;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008183 countingStream->rewind();
8184 {
David Reveman9875f2c2019-06-11 21:47:12 -04008185 uint64_t cgen_var_553;
8186 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_553, 1);
8187 countingStream->write((uint64_t*)&cgen_var_553, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008188 countingStream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
8189 countingStream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
8190 countingStream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008191 }
8192 uint32_t packetSize_vkCmdDispatch = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8193 countingStream->rewind();
8194 uint32_t opcode_vkCmdDispatch = OP_vkCmdDispatch;
8195 stream->write(&opcode_vkCmdDispatch, sizeof(uint32_t));
8196 stream->write(&packetSize_vkCmdDispatch, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008197 uint64_t cgen_var_554;
8198 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_554, 1);
8199 stream->write((uint64_t*)&cgen_var_554, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008200 stream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
8201 stream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
8202 stream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008203 AEMU_SCOPED_TRACE("vkCmdDispatch readParams");
8204 AEMU_SCOPED_TRACE("vkCmdDispatch returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008205 pool->freeAll();
8206 countingStream->clearPool();
8207 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008208 mImpl->log("finish vkCmdDispatch");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008209}
8210
8211void VkEncoder::vkCmdDispatchIndirect(
8212 VkCommandBuffer commandBuffer,
8213 VkBuffer buffer,
8214 VkDeviceSize offset)
8215{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008216 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008217 AEMU_SCOPED_TRACE("vkCmdDispatchIndirect encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008218 mImpl->log("start vkCmdDispatchIndirect");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008219 auto stream = mImpl->stream();
8220 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008221 auto resources = mImpl->resources();
8222 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008223 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008224 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008225 VkBuffer local_buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008226 VkDeviceSize local_offset;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008227 local_commandBuffer = commandBuffer;
8228 local_buffer = buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008229 local_offset = offset;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008230 countingStream->rewind();
8231 {
David Reveman9875f2c2019-06-11 21:47:12 -04008232 uint64_t cgen_var_555;
8233 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_555, 1);
8234 countingStream->write((uint64_t*)&cgen_var_555, 1 * 8);
8235 uint64_t cgen_var_556;
8236 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_556, 1);
8237 countingStream->write((uint64_t*)&cgen_var_556, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008238 countingStream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008239 }
8240 uint32_t packetSize_vkCmdDispatchIndirect = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8241 countingStream->rewind();
8242 uint32_t opcode_vkCmdDispatchIndirect = OP_vkCmdDispatchIndirect;
8243 stream->write(&opcode_vkCmdDispatchIndirect, sizeof(uint32_t));
8244 stream->write(&packetSize_vkCmdDispatchIndirect, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008245 uint64_t cgen_var_557;
8246 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_557, 1);
8247 stream->write((uint64_t*)&cgen_var_557, 1 * 8);
8248 uint64_t cgen_var_558;
8249 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_558, 1);
8250 stream->write((uint64_t*)&cgen_var_558, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008251 stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008252 AEMU_SCOPED_TRACE("vkCmdDispatchIndirect readParams");
8253 AEMU_SCOPED_TRACE("vkCmdDispatchIndirect returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008254 pool->freeAll();
8255 countingStream->clearPool();
8256 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008257 mImpl->log("finish vkCmdDispatchIndirect");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008258}
8259
8260void VkEncoder::vkCmdCopyBuffer(
8261 VkCommandBuffer commandBuffer,
8262 VkBuffer srcBuffer,
8263 VkBuffer dstBuffer,
8264 uint32_t regionCount,
8265 const VkBufferCopy* pRegions)
8266{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008267 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008268 AEMU_SCOPED_TRACE("vkCmdCopyBuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008269 mImpl->log("start vkCmdCopyBuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008270 auto stream = mImpl->stream();
8271 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008272 auto resources = mImpl->resources();
8273 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008274 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008275 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008276 VkBuffer local_srcBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008277 VkBuffer local_dstBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008278 uint32_t local_regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008279 VkBufferCopy* local_pRegions;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008280 local_commandBuffer = commandBuffer;
8281 local_srcBuffer = srcBuffer;
8282 local_dstBuffer = dstBuffer;
8283 local_regionCount = regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008284 local_pRegions = nullptr;
8285 if (pRegions)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008286 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008287 local_pRegions = (VkBufferCopy*)pool->alloc(((regionCount)) * sizeof(const VkBufferCopy));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008288 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8289 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008290 deepcopy_VkBufferCopy(pool, pRegions + i, (VkBufferCopy*)(local_pRegions + i));
8291 }
8292 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08008293 if (local_pRegions)
8294 {
8295 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8296 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08008297 transform_tohost_VkBufferCopy(mImpl->resources(), (VkBufferCopy*)(local_pRegions + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08008298 }
8299 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008300 countingStream->rewind();
8301 {
David Reveman9875f2c2019-06-11 21:47:12 -04008302 uint64_t cgen_var_559;
8303 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_559, 1);
8304 countingStream->write((uint64_t*)&cgen_var_559, 1 * 8);
8305 uint64_t cgen_var_560;
8306 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_srcBuffer, &cgen_var_560, 1);
8307 countingStream->write((uint64_t*)&cgen_var_560, 1 * 8);
8308 uint64_t cgen_var_561;
8309 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_561, 1);
8310 countingStream->write((uint64_t*)&cgen_var_561, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008311 countingStream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
8312 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8313 {
8314 marshal_VkBufferCopy(countingStream, (VkBufferCopy*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008315 }
8316 }
8317 uint32_t packetSize_vkCmdCopyBuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8318 countingStream->rewind();
8319 uint32_t opcode_vkCmdCopyBuffer = OP_vkCmdCopyBuffer;
8320 stream->write(&opcode_vkCmdCopyBuffer, sizeof(uint32_t));
8321 stream->write(&packetSize_vkCmdCopyBuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008322 uint64_t cgen_var_562;
8323 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_562, 1);
8324 stream->write((uint64_t*)&cgen_var_562, 1 * 8);
8325 uint64_t cgen_var_563;
8326 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_srcBuffer, &cgen_var_563, 1);
8327 stream->write((uint64_t*)&cgen_var_563, 1 * 8);
8328 uint64_t cgen_var_564;
8329 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_564, 1);
8330 stream->write((uint64_t*)&cgen_var_564, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008331 stream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008332 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8333 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008334 marshal_VkBufferCopy(stream, (VkBufferCopy*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008335 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008336 AEMU_SCOPED_TRACE("vkCmdCopyBuffer readParams");
8337 AEMU_SCOPED_TRACE("vkCmdCopyBuffer returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008338 pool->freeAll();
8339 countingStream->clearPool();
8340 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008341 mImpl->log("finish vkCmdCopyBuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008342}
8343
8344void VkEncoder::vkCmdCopyImage(
8345 VkCommandBuffer commandBuffer,
8346 VkImage srcImage,
8347 VkImageLayout srcImageLayout,
8348 VkImage dstImage,
8349 VkImageLayout dstImageLayout,
8350 uint32_t regionCount,
8351 const VkImageCopy* pRegions)
8352{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008353 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008354 AEMU_SCOPED_TRACE("vkCmdCopyImage encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008355 mImpl->log("start vkCmdCopyImage");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008356 auto stream = mImpl->stream();
8357 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008358 auto resources = mImpl->resources();
8359 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008360 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008361 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008362 VkImage local_srcImage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008363 VkImageLayout local_srcImageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008364 VkImage local_dstImage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008365 VkImageLayout local_dstImageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008366 uint32_t local_regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008367 VkImageCopy* local_pRegions;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008368 local_commandBuffer = commandBuffer;
8369 local_srcImage = srcImage;
8370 local_srcImageLayout = srcImageLayout;
8371 local_dstImage = dstImage;
8372 local_dstImageLayout = dstImageLayout;
8373 local_regionCount = regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008374 local_pRegions = nullptr;
8375 if (pRegions)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008376 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008377 local_pRegions = (VkImageCopy*)pool->alloc(((regionCount)) * sizeof(const VkImageCopy));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008378 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8379 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008380 deepcopy_VkImageCopy(pool, pRegions + i, (VkImageCopy*)(local_pRegions + i));
8381 }
8382 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08008383 if (local_pRegions)
8384 {
8385 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8386 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08008387 transform_tohost_VkImageCopy(mImpl->resources(), (VkImageCopy*)(local_pRegions + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08008388 }
8389 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008390 countingStream->rewind();
8391 {
David Reveman9875f2c2019-06-11 21:47:12 -04008392 uint64_t cgen_var_565;
8393 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_565, 1);
8394 countingStream->write((uint64_t*)&cgen_var_565, 1 * 8);
8395 uint64_t cgen_var_566;
8396 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_srcImage, &cgen_var_566, 1);
8397 countingStream->write((uint64_t*)&cgen_var_566, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -08008398 countingStream->write((VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
David Reveman9875f2c2019-06-11 21:47:12 -04008399 uint64_t cgen_var_567;
8400 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_dstImage, &cgen_var_567, 1);
8401 countingStream->write((uint64_t*)&cgen_var_567, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008402 countingStream->write((VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
8403 countingStream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
8404 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8405 {
8406 marshal_VkImageCopy(countingStream, (VkImageCopy*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008407 }
8408 }
8409 uint32_t packetSize_vkCmdCopyImage = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8410 countingStream->rewind();
8411 uint32_t opcode_vkCmdCopyImage = OP_vkCmdCopyImage;
8412 stream->write(&opcode_vkCmdCopyImage, sizeof(uint32_t));
8413 stream->write(&packetSize_vkCmdCopyImage, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008414 uint64_t cgen_var_568;
8415 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_568, 1);
8416 stream->write((uint64_t*)&cgen_var_568, 1 * 8);
8417 uint64_t cgen_var_569;
8418 stream->handleMapping()->mapHandles_VkImage_u64(&local_srcImage, &cgen_var_569, 1);
8419 stream->write((uint64_t*)&cgen_var_569, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -08008420 stream->write((VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
David Reveman9875f2c2019-06-11 21:47:12 -04008421 uint64_t cgen_var_570;
8422 stream->handleMapping()->mapHandles_VkImage_u64(&local_dstImage, &cgen_var_570, 1);
8423 stream->write((uint64_t*)&cgen_var_570, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008424 stream->write((VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
8425 stream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008426 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8427 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008428 marshal_VkImageCopy(stream, (VkImageCopy*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008429 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008430 AEMU_SCOPED_TRACE("vkCmdCopyImage readParams");
8431 AEMU_SCOPED_TRACE("vkCmdCopyImage returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008432 pool->freeAll();
8433 countingStream->clearPool();
8434 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008435 mImpl->log("finish vkCmdCopyImage");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008436}
8437
8438void VkEncoder::vkCmdBlitImage(
8439 VkCommandBuffer commandBuffer,
8440 VkImage srcImage,
8441 VkImageLayout srcImageLayout,
8442 VkImage dstImage,
8443 VkImageLayout dstImageLayout,
8444 uint32_t regionCount,
8445 const VkImageBlit* pRegions,
8446 VkFilter filter)
8447{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008448 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008449 AEMU_SCOPED_TRACE("vkCmdBlitImage encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008450 mImpl->log("start vkCmdBlitImage");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008451 auto stream = mImpl->stream();
8452 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008453 auto resources = mImpl->resources();
8454 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008455 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008456 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008457 VkImage local_srcImage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008458 VkImageLayout local_srcImageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008459 VkImage local_dstImage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008460 VkImageLayout local_dstImageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008461 uint32_t local_regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008462 VkImageBlit* local_pRegions;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008463 VkFilter local_filter;
8464 local_commandBuffer = commandBuffer;
8465 local_srcImage = srcImage;
8466 local_srcImageLayout = srcImageLayout;
8467 local_dstImage = dstImage;
8468 local_dstImageLayout = dstImageLayout;
8469 local_regionCount = regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008470 local_pRegions = nullptr;
8471 if (pRegions)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008472 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008473 local_pRegions = (VkImageBlit*)pool->alloc(((regionCount)) * sizeof(const VkImageBlit));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008474 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8475 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008476 deepcopy_VkImageBlit(pool, pRegions + i, (VkImageBlit*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008477 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008478 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008479 local_filter = filter;
Lingfeng Yang62b23322018-12-24 12:45:47 -08008480 if (local_pRegions)
8481 {
8482 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8483 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08008484 transform_tohost_VkImageBlit(mImpl->resources(), (VkImageBlit*)(local_pRegions + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08008485 }
8486 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008487 countingStream->rewind();
8488 {
David Reveman9875f2c2019-06-11 21:47:12 -04008489 uint64_t cgen_var_571;
8490 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_571, 1);
8491 countingStream->write((uint64_t*)&cgen_var_571, 1 * 8);
8492 uint64_t cgen_var_572;
8493 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_srcImage, &cgen_var_572, 1);
8494 countingStream->write((uint64_t*)&cgen_var_572, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -08008495 countingStream->write((VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
David Reveman9875f2c2019-06-11 21:47:12 -04008496 uint64_t cgen_var_573;
8497 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_dstImage, &cgen_var_573, 1);
8498 countingStream->write((uint64_t*)&cgen_var_573, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008499 countingStream->write((VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
8500 countingStream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
8501 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8502 {
8503 marshal_VkImageBlit(countingStream, (VkImageBlit*)(local_pRegions + i));
8504 }
8505 countingStream->write((VkFilter*)&local_filter, sizeof(VkFilter));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008506 }
8507 uint32_t packetSize_vkCmdBlitImage = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8508 countingStream->rewind();
8509 uint32_t opcode_vkCmdBlitImage = OP_vkCmdBlitImage;
8510 stream->write(&opcode_vkCmdBlitImage, sizeof(uint32_t));
8511 stream->write(&packetSize_vkCmdBlitImage, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008512 uint64_t cgen_var_574;
8513 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_574, 1);
8514 stream->write((uint64_t*)&cgen_var_574, 1 * 8);
8515 uint64_t cgen_var_575;
8516 stream->handleMapping()->mapHandles_VkImage_u64(&local_srcImage, &cgen_var_575, 1);
8517 stream->write((uint64_t*)&cgen_var_575, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -08008518 stream->write((VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
David Reveman9875f2c2019-06-11 21:47:12 -04008519 uint64_t cgen_var_576;
8520 stream->handleMapping()->mapHandles_VkImage_u64(&local_dstImage, &cgen_var_576, 1);
8521 stream->write((uint64_t*)&cgen_var_576, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008522 stream->write((VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
8523 stream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008524 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8525 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008526 marshal_VkImageBlit(stream, (VkImageBlit*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008527 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008528 stream->write((VkFilter*)&local_filter, sizeof(VkFilter));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008529 AEMU_SCOPED_TRACE("vkCmdBlitImage readParams");
8530 AEMU_SCOPED_TRACE("vkCmdBlitImage returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008531 pool->freeAll();
8532 countingStream->clearPool();
8533 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008534 mImpl->log("finish vkCmdBlitImage");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008535}
8536
8537void VkEncoder::vkCmdCopyBufferToImage(
8538 VkCommandBuffer commandBuffer,
8539 VkBuffer srcBuffer,
8540 VkImage dstImage,
8541 VkImageLayout dstImageLayout,
8542 uint32_t regionCount,
8543 const VkBufferImageCopy* pRegions)
8544{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008545 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008546 AEMU_SCOPED_TRACE("vkCmdCopyBufferToImage encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008547 mImpl->log("start vkCmdCopyBufferToImage");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008548 auto stream = mImpl->stream();
8549 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008550 auto resources = mImpl->resources();
8551 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008552 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008553 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008554 VkBuffer local_srcBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008555 VkImage local_dstImage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008556 VkImageLayout local_dstImageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008557 uint32_t local_regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008558 VkBufferImageCopy* local_pRegions;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008559 local_commandBuffer = commandBuffer;
8560 local_srcBuffer = srcBuffer;
8561 local_dstImage = dstImage;
8562 local_dstImageLayout = dstImageLayout;
8563 local_regionCount = regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008564 local_pRegions = nullptr;
8565 if (pRegions)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008566 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008567 local_pRegions = (VkBufferImageCopy*)pool->alloc(((regionCount)) * sizeof(const VkBufferImageCopy));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008568 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8569 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008570 deepcopy_VkBufferImageCopy(pool, pRegions + i, (VkBufferImageCopy*)(local_pRegions + i));
8571 }
8572 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08008573 if (local_pRegions)
8574 {
8575 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8576 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08008577 transform_tohost_VkBufferImageCopy(mImpl->resources(), (VkBufferImageCopy*)(local_pRegions + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08008578 }
8579 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008580 countingStream->rewind();
8581 {
David Reveman9875f2c2019-06-11 21:47:12 -04008582 uint64_t cgen_var_577;
8583 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_577, 1);
8584 countingStream->write((uint64_t*)&cgen_var_577, 1 * 8);
8585 uint64_t cgen_var_578;
8586 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_srcBuffer, &cgen_var_578, 1);
8587 countingStream->write((uint64_t*)&cgen_var_578, 1 * 8);
8588 uint64_t cgen_var_579;
8589 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_dstImage, &cgen_var_579, 1);
8590 countingStream->write((uint64_t*)&cgen_var_579, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008591 countingStream->write((VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
8592 countingStream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
8593 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8594 {
8595 marshal_VkBufferImageCopy(countingStream, (VkBufferImageCopy*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008596 }
8597 }
8598 uint32_t packetSize_vkCmdCopyBufferToImage = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8599 countingStream->rewind();
8600 uint32_t opcode_vkCmdCopyBufferToImage = OP_vkCmdCopyBufferToImage;
8601 stream->write(&opcode_vkCmdCopyBufferToImage, sizeof(uint32_t));
8602 stream->write(&packetSize_vkCmdCopyBufferToImage, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008603 uint64_t cgen_var_580;
8604 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_580, 1);
8605 stream->write((uint64_t*)&cgen_var_580, 1 * 8);
8606 uint64_t cgen_var_581;
8607 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_srcBuffer, &cgen_var_581, 1);
8608 stream->write((uint64_t*)&cgen_var_581, 1 * 8);
8609 uint64_t cgen_var_582;
8610 stream->handleMapping()->mapHandles_VkImage_u64(&local_dstImage, &cgen_var_582, 1);
8611 stream->write((uint64_t*)&cgen_var_582, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008612 stream->write((VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
8613 stream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008614 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8615 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008616 marshal_VkBufferImageCopy(stream, (VkBufferImageCopy*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008617 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008618 AEMU_SCOPED_TRACE("vkCmdCopyBufferToImage readParams");
8619 AEMU_SCOPED_TRACE("vkCmdCopyBufferToImage returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008620 pool->freeAll();
8621 countingStream->clearPool();
8622 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008623 mImpl->log("finish vkCmdCopyBufferToImage");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008624}
8625
8626void VkEncoder::vkCmdCopyImageToBuffer(
8627 VkCommandBuffer commandBuffer,
8628 VkImage srcImage,
8629 VkImageLayout srcImageLayout,
8630 VkBuffer dstBuffer,
8631 uint32_t regionCount,
8632 const VkBufferImageCopy* pRegions)
8633{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008634 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008635 AEMU_SCOPED_TRACE("vkCmdCopyImageToBuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008636 mImpl->log("start vkCmdCopyImageToBuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008637 auto stream = mImpl->stream();
8638 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008639 auto resources = mImpl->resources();
8640 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008641 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008642 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008643 VkImage local_srcImage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008644 VkImageLayout local_srcImageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008645 VkBuffer local_dstBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008646 uint32_t local_regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008647 VkBufferImageCopy* local_pRegions;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008648 local_commandBuffer = commandBuffer;
8649 local_srcImage = srcImage;
8650 local_srcImageLayout = srcImageLayout;
8651 local_dstBuffer = dstBuffer;
8652 local_regionCount = regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008653 local_pRegions = nullptr;
8654 if (pRegions)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008655 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008656 local_pRegions = (VkBufferImageCopy*)pool->alloc(((regionCount)) * sizeof(const VkBufferImageCopy));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008657 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8658 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008659 deepcopy_VkBufferImageCopy(pool, pRegions + i, (VkBufferImageCopy*)(local_pRegions + i));
8660 }
8661 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08008662 if (local_pRegions)
8663 {
8664 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8665 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08008666 transform_tohost_VkBufferImageCopy(mImpl->resources(), (VkBufferImageCopy*)(local_pRegions + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08008667 }
8668 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008669 countingStream->rewind();
8670 {
David Reveman9875f2c2019-06-11 21:47:12 -04008671 uint64_t cgen_var_583;
8672 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_583, 1);
8673 countingStream->write((uint64_t*)&cgen_var_583, 1 * 8);
8674 uint64_t cgen_var_584;
8675 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_srcImage, &cgen_var_584, 1);
8676 countingStream->write((uint64_t*)&cgen_var_584, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -08008677 countingStream->write((VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
David Reveman9875f2c2019-06-11 21:47:12 -04008678 uint64_t cgen_var_585;
8679 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_585, 1);
8680 countingStream->write((uint64_t*)&cgen_var_585, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008681 countingStream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
8682 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8683 {
8684 marshal_VkBufferImageCopy(countingStream, (VkBufferImageCopy*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008685 }
8686 }
8687 uint32_t packetSize_vkCmdCopyImageToBuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8688 countingStream->rewind();
8689 uint32_t opcode_vkCmdCopyImageToBuffer = OP_vkCmdCopyImageToBuffer;
8690 stream->write(&opcode_vkCmdCopyImageToBuffer, sizeof(uint32_t));
8691 stream->write(&packetSize_vkCmdCopyImageToBuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008692 uint64_t cgen_var_586;
8693 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_586, 1);
8694 stream->write((uint64_t*)&cgen_var_586, 1 * 8);
8695 uint64_t cgen_var_587;
8696 stream->handleMapping()->mapHandles_VkImage_u64(&local_srcImage, &cgen_var_587, 1);
8697 stream->write((uint64_t*)&cgen_var_587, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -08008698 stream->write((VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
David Reveman9875f2c2019-06-11 21:47:12 -04008699 uint64_t cgen_var_588;
8700 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_588, 1);
8701 stream->write((uint64_t*)&cgen_var_588, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008702 stream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008703 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
8704 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008705 marshal_VkBufferImageCopy(stream, (VkBufferImageCopy*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008706 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008707 AEMU_SCOPED_TRACE("vkCmdCopyImageToBuffer readParams");
8708 AEMU_SCOPED_TRACE("vkCmdCopyImageToBuffer returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008709 pool->freeAll();
8710 countingStream->clearPool();
8711 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008712 mImpl->log("finish vkCmdCopyImageToBuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008713}
8714
8715void VkEncoder::vkCmdUpdateBuffer(
8716 VkCommandBuffer commandBuffer,
8717 VkBuffer dstBuffer,
8718 VkDeviceSize dstOffset,
8719 VkDeviceSize dataSize,
8720 const void* pData)
8721{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008722 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008723 AEMU_SCOPED_TRACE("vkCmdUpdateBuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008724 mImpl->log("start vkCmdUpdateBuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008725 auto stream = mImpl->stream();
8726 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008727 auto resources = mImpl->resources();
8728 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008729 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008730 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008731 VkBuffer local_dstBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008732 VkDeviceSize local_dstOffset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008733 VkDeviceSize local_dataSize;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008734 void* local_pData;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008735 local_commandBuffer = commandBuffer;
8736 local_dstBuffer = dstBuffer;
8737 local_dstOffset = dstOffset;
8738 local_dataSize = dataSize;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008739 local_pData = nullptr;
8740 if (pData)
8741 {
8742 local_pData = (void*)pool->dupArray(pData, ((dataSize)) * sizeof(const uint8_t));
8743 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008744 countingStream->rewind();
8745 {
David Reveman9875f2c2019-06-11 21:47:12 -04008746 uint64_t cgen_var_589;
8747 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_589, 1);
8748 countingStream->write((uint64_t*)&cgen_var_589, 1 * 8);
8749 uint64_t cgen_var_590;
8750 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_590, 1);
8751 countingStream->write((uint64_t*)&cgen_var_590, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008752 countingStream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
8753 countingStream->write((VkDeviceSize*)&local_dataSize, sizeof(VkDeviceSize));
8754 countingStream->write((void*)local_pData, ((dataSize)) * sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008755 }
8756 uint32_t packetSize_vkCmdUpdateBuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8757 countingStream->rewind();
8758 uint32_t opcode_vkCmdUpdateBuffer = OP_vkCmdUpdateBuffer;
8759 stream->write(&opcode_vkCmdUpdateBuffer, sizeof(uint32_t));
8760 stream->write(&packetSize_vkCmdUpdateBuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008761 uint64_t cgen_var_591;
8762 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_591, 1);
8763 stream->write((uint64_t*)&cgen_var_591, 1 * 8);
8764 uint64_t cgen_var_592;
8765 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_592, 1);
8766 stream->write((uint64_t*)&cgen_var_592, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008767 stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
8768 stream->write((VkDeviceSize*)&local_dataSize, sizeof(VkDeviceSize));
8769 stream->write((void*)local_pData, ((dataSize)) * sizeof(uint8_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008770 AEMU_SCOPED_TRACE("vkCmdUpdateBuffer readParams");
8771 AEMU_SCOPED_TRACE("vkCmdUpdateBuffer returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008772 pool->freeAll();
8773 countingStream->clearPool();
8774 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008775 mImpl->log("finish vkCmdUpdateBuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008776}
8777
8778void VkEncoder::vkCmdFillBuffer(
8779 VkCommandBuffer commandBuffer,
8780 VkBuffer dstBuffer,
8781 VkDeviceSize dstOffset,
8782 VkDeviceSize size,
8783 uint32_t data)
8784{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008785 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008786 AEMU_SCOPED_TRACE("vkCmdFillBuffer encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008787 mImpl->log("start vkCmdFillBuffer");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008788 auto stream = mImpl->stream();
8789 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008790 auto resources = mImpl->resources();
8791 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008792 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008793 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008794 VkBuffer local_dstBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008795 VkDeviceSize local_dstOffset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008796 VkDeviceSize local_size;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008797 uint32_t local_data;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008798 local_commandBuffer = commandBuffer;
8799 local_dstBuffer = dstBuffer;
8800 local_dstOffset = dstOffset;
8801 local_size = size;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008802 local_data = data;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008803 countingStream->rewind();
8804 {
David Reveman9875f2c2019-06-11 21:47:12 -04008805 uint64_t cgen_var_593;
8806 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_593, 1);
8807 countingStream->write((uint64_t*)&cgen_var_593, 1 * 8);
8808 uint64_t cgen_var_594;
8809 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_594, 1);
8810 countingStream->write((uint64_t*)&cgen_var_594, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008811 countingStream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
8812 countingStream->write((VkDeviceSize*)&local_size, sizeof(VkDeviceSize));
8813 countingStream->write((uint32_t*)&local_data, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008814 }
8815 uint32_t packetSize_vkCmdFillBuffer = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8816 countingStream->rewind();
8817 uint32_t opcode_vkCmdFillBuffer = OP_vkCmdFillBuffer;
8818 stream->write(&opcode_vkCmdFillBuffer, sizeof(uint32_t));
8819 stream->write(&packetSize_vkCmdFillBuffer, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008820 uint64_t cgen_var_595;
8821 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_595, 1);
8822 stream->write((uint64_t*)&cgen_var_595, 1 * 8);
8823 uint64_t cgen_var_596;
8824 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_596, 1);
8825 stream->write((uint64_t*)&cgen_var_596, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008826 stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
8827 stream->write((VkDeviceSize*)&local_size, sizeof(VkDeviceSize));
8828 stream->write((uint32_t*)&local_data, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008829 AEMU_SCOPED_TRACE("vkCmdFillBuffer readParams");
8830 AEMU_SCOPED_TRACE("vkCmdFillBuffer returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008831 pool->freeAll();
8832 countingStream->clearPool();
8833 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008834 mImpl->log("finish vkCmdFillBuffer");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008835}
8836
8837void VkEncoder::vkCmdClearColorImage(
8838 VkCommandBuffer commandBuffer,
8839 VkImage image,
8840 VkImageLayout imageLayout,
8841 const VkClearColorValue* pColor,
8842 uint32_t rangeCount,
8843 const VkImageSubresourceRange* pRanges)
8844{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008845 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008846 AEMU_SCOPED_TRACE("vkCmdClearColorImage encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008847 mImpl->log("start vkCmdClearColorImage");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008848 auto stream = mImpl->stream();
8849 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008850 auto resources = mImpl->resources();
8851 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008852 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008853 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008854 VkImage local_image;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008855 VkImageLayout local_imageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008856 VkClearColorValue* local_pColor;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008857 uint32_t local_rangeCount;
8858 VkImageSubresourceRange* local_pRanges;
8859 local_commandBuffer = commandBuffer;
8860 local_image = image;
8861 local_imageLayout = imageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008862 local_pColor = nullptr;
8863 if (pColor)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008864 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008865 local_pColor = (VkClearColorValue*)pool->alloc(sizeof(const VkClearColorValue));
8866 deepcopy_VkClearColorValue(pool, pColor, (VkClearColorValue*)(local_pColor));
8867 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008868 local_rangeCount = rangeCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008869 local_pRanges = nullptr;
8870 if (pRanges)
8871 {
8872 local_pRanges = (VkImageSubresourceRange*)pool->alloc(((rangeCount)) * sizeof(const VkImageSubresourceRange));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008873 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
8874 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008875 deepcopy_VkImageSubresourceRange(pool, pRanges + i, (VkImageSubresourceRange*)(local_pRanges + i));
8876 }
8877 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08008878 if (local_pColor)
8879 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08008880 transform_tohost_VkClearColorValue(mImpl->resources(), (VkClearColorValue*)(local_pColor));
Lingfeng Yang62b23322018-12-24 12:45:47 -08008881 }
8882 if (local_pRanges)
8883 {
8884 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
8885 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08008886 transform_tohost_VkImageSubresourceRange(mImpl->resources(), (VkImageSubresourceRange*)(local_pRanges + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08008887 }
8888 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008889 countingStream->rewind();
8890 {
David Reveman9875f2c2019-06-11 21:47:12 -04008891 uint64_t cgen_var_597;
8892 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_597, 1);
8893 countingStream->write((uint64_t*)&cgen_var_597, 1 * 8);
8894 uint64_t cgen_var_598;
8895 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_598, 1);
8896 countingStream->write((uint64_t*)&cgen_var_598, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008897 countingStream->write((VkImageLayout*)&local_imageLayout, sizeof(VkImageLayout));
8898 marshal_VkClearColorValue(countingStream, (VkClearColorValue*)(local_pColor));
8899 countingStream->write((uint32_t*)&local_rangeCount, sizeof(uint32_t));
8900 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
8901 {
8902 marshal_VkImageSubresourceRange(countingStream, (VkImageSubresourceRange*)(local_pRanges + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008903 }
8904 }
8905 uint32_t packetSize_vkCmdClearColorImage = 4 + 4 + (uint32_t)countingStream->bytesWritten();
8906 countingStream->rewind();
8907 uint32_t opcode_vkCmdClearColorImage = OP_vkCmdClearColorImage;
8908 stream->write(&opcode_vkCmdClearColorImage, sizeof(uint32_t));
8909 stream->write(&packetSize_vkCmdClearColorImage, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04008910 uint64_t cgen_var_599;
8911 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_599, 1);
8912 stream->write((uint64_t*)&cgen_var_599, 1 * 8);
8913 uint64_t cgen_var_600;
8914 stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_600, 1);
8915 stream->write((uint64_t*)&cgen_var_600, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008916 stream->write((VkImageLayout*)&local_imageLayout, sizeof(VkImageLayout));
8917 marshal_VkClearColorValue(stream, (VkClearColorValue*)(local_pColor));
8918 stream->write((uint32_t*)&local_rangeCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008919 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
8920 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008921 marshal_VkImageSubresourceRange(stream, (VkImageSubresourceRange*)(local_pRanges + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008922 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008923 AEMU_SCOPED_TRACE("vkCmdClearColorImage readParams");
8924 AEMU_SCOPED_TRACE("vkCmdClearColorImage returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07008925 pool->freeAll();
8926 countingStream->clearPool();
8927 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008928 mImpl->log("finish vkCmdClearColorImage");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008929}
8930
8931void VkEncoder::vkCmdClearDepthStencilImage(
8932 VkCommandBuffer commandBuffer,
8933 VkImage image,
8934 VkImageLayout imageLayout,
8935 const VkClearDepthStencilValue* pDepthStencil,
8936 uint32_t rangeCount,
8937 const VkImageSubresourceRange* pRanges)
8938{
Lingfeng Yang256f9252020-07-14 14:27:33 -07008939 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08008940 AEMU_SCOPED_TRACE("vkCmdClearDepthStencilImage encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08008941 mImpl->log("start vkCmdClearDepthStencilImage");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008942 auto stream = mImpl->stream();
8943 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008944 auto resources = mImpl->resources();
8945 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08008946 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008947 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008948 VkImage local_image;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008949 VkImageLayout local_imageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008950 VkClearDepthStencilValue* local_pDepthStencil;
Lingfeng Yang9666b852018-11-13 23:09:59 -08008951 uint32_t local_rangeCount;
8952 VkImageSubresourceRange* local_pRanges;
8953 local_commandBuffer = commandBuffer;
8954 local_image = image;
8955 local_imageLayout = imageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008956 local_pDepthStencil = nullptr;
8957 if (pDepthStencil)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008958 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008959 local_pDepthStencil = (VkClearDepthStencilValue*)pool->alloc(sizeof(const VkClearDepthStencilValue));
8960 deepcopy_VkClearDepthStencilValue(pool, pDepthStencil, (VkClearDepthStencilValue*)(local_pDepthStencil));
8961 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008962 local_rangeCount = rangeCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008963 local_pRanges = nullptr;
8964 if (pRanges)
8965 {
8966 local_pRanges = (VkImageSubresourceRange*)pool->alloc(((rangeCount)) * sizeof(const VkImageSubresourceRange));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008967 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
8968 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008969 deepcopy_VkImageSubresourceRange(pool, pRanges + i, (VkImageSubresourceRange*)(local_pRanges + i));
8970 }
8971 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08008972 if (local_pDepthStencil)
8973 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08008974 transform_tohost_VkClearDepthStencilValue(mImpl->resources(), (VkClearDepthStencilValue*)(local_pDepthStencil));
Lingfeng Yang62b23322018-12-24 12:45:47 -08008975 }
8976 if (local_pRanges)
8977 {
8978 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
8979 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08008980 transform_tohost_VkImageSubresourceRange(mImpl->resources(), (VkImageSubresourceRange*)(local_pRanges + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08008981 }
8982 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008983 countingStream->rewind();
8984 {
David Reveman9875f2c2019-06-11 21:47:12 -04008985 uint64_t cgen_var_601;
8986 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_601, 1);
8987 countingStream->write((uint64_t*)&cgen_var_601, 1 * 8);
8988 uint64_t cgen_var_602;
8989 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_602, 1);
8990 countingStream->write((uint64_t*)&cgen_var_602, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08008991 countingStream->write((VkImageLayout*)&local_imageLayout, sizeof(VkImageLayout));
8992 marshal_VkClearDepthStencilValue(countingStream, (VkClearDepthStencilValue*)(local_pDepthStencil));
8993 countingStream->write((uint32_t*)&local_rangeCount, sizeof(uint32_t));
8994 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
8995 {
8996 marshal_VkImageSubresourceRange(countingStream, (VkImageSubresourceRange*)(local_pRanges + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07008997 }
8998 }
8999 uint32_t packetSize_vkCmdClearDepthStencilImage = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9000 countingStream->rewind();
9001 uint32_t opcode_vkCmdClearDepthStencilImage = OP_vkCmdClearDepthStencilImage;
9002 stream->write(&opcode_vkCmdClearDepthStencilImage, sizeof(uint32_t));
9003 stream->write(&packetSize_vkCmdClearDepthStencilImage, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009004 uint64_t cgen_var_603;
9005 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_603, 1);
9006 stream->write((uint64_t*)&cgen_var_603, 1 * 8);
9007 uint64_t cgen_var_604;
9008 stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_604, 1);
9009 stream->write((uint64_t*)&cgen_var_604, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009010 stream->write((VkImageLayout*)&local_imageLayout, sizeof(VkImageLayout));
9011 marshal_VkClearDepthStencilValue(stream, (VkClearDepthStencilValue*)(local_pDepthStencil));
9012 stream->write((uint32_t*)&local_rangeCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009013 for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
9014 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009015 marshal_VkImageSubresourceRange(stream, (VkImageSubresourceRange*)(local_pRanges + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009016 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009017 AEMU_SCOPED_TRACE("vkCmdClearDepthStencilImage readParams");
9018 AEMU_SCOPED_TRACE("vkCmdClearDepthStencilImage returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009019 pool->freeAll();
9020 countingStream->clearPool();
9021 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009022 mImpl->log("finish vkCmdClearDepthStencilImage");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009023}
9024
9025void VkEncoder::vkCmdClearAttachments(
9026 VkCommandBuffer commandBuffer,
9027 uint32_t attachmentCount,
9028 const VkClearAttachment* pAttachments,
9029 uint32_t rectCount,
9030 const VkClearRect* pRects)
9031{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009032 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009033 AEMU_SCOPED_TRACE("vkCmdClearAttachments encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009034 mImpl->log("start vkCmdClearAttachments");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009035 auto stream = mImpl->stream();
9036 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009037 auto resources = mImpl->resources();
9038 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009039 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009040 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009041 uint32_t local_attachmentCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009042 VkClearAttachment* local_pAttachments;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009043 uint32_t local_rectCount;
9044 VkClearRect* local_pRects;
9045 local_commandBuffer = commandBuffer;
9046 local_attachmentCount = attachmentCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009047 local_pAttachments = nullptr;
9048 if (pAttachments)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009049 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009050 local_pAttachments = (VkClearAttachment*)pool->alloc(((attachmentCount)) * sizeof(const VkClearAttachment));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009051 for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i)
9052 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009053 deepcopy_VkClearAttachment(pool, pAttachments + i, (VkClearAttachment*)(local_pAttachments + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009054 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009055 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009056 local_rectCount = rectCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009057 local_pRects = nullptr;
9058 if (pRects)
9059 {
9060 local_pRects = (VkClearRect*)pool->alloc(((rectCount)) * sizeof(const VkClearRect));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009061 for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i)
9062 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009063 deepcopy_VkClearRect(pool, pRects + i, (VkClearRect*)(local_pRects + i));
9064 }
9065 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08009066 if (local_pAttachments)
9067 {
9068 for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i)
9069 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08009070 transform_tohost_VkClearAttachment(mImpl->resources(), (VkClearAttachment*)(local_pAttachments + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08009071 }
9072 }
9073 if (local_pRects)
9074 {
9075 for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i)
9076 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08009077 transform_tohost_VkClearRect(mImpl->resources(), (VkClearRect*)(local_pRects + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08009078 }
9079 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009080 countingStream->rewind();
9081 {
David Reveman9875f2c2019-06-11 21:47:12 -04009082 uint64_t cgen_var_605;
9083 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_605, 1);
9084 countingStream->write((uint64_t*)&cgen_var_605, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009085 countingStream->write((uint32_t*)&local_attachmentCount, sizeof(uint32_t));
9086 for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i)
9087 {
9088 marshal_VkClearAttachment(countingStream, (VkClearAttachment*)(local_pAttachments + i));
9089 }
9090 countingStream->write((uint32_t*)&local_rectCount, sizeof(uint32_t));
9091 for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i)
9092 {
9093 marshal_VkClearRect(countingStream, (VkClearRect*)(local_pRects + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009094 }
9095 }
9096 uint32_t packetSize_vkCmdClearAttachments = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9097 countingStream->rewind();
9098 uint32_t opcode_vkCmdClearAttachments = OP_vkCmdClearAttachments;
9099 stream->write(&opcode_vkCmdClearAttachments, sizeof(uint32_t));
9100 stream->write(&packetSize_vkCmdClearAttachments, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009101 uint64_t cgen_var_606;
9102 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_606, 1);
9103 stream->write((uint64_t*)&cgen_var_606, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009104 stream->write((uint32_t*)&local_attachmentCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009105 for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i)
9106 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009107 marshal_VkClearAttachment(stream, (VkClearAttachment*)(local_pAttachments + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009108 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009109 stream->write((uint32_t*)&local_rectCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009110 for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i)
9111 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009112 marshal_VkClearRect(stream, (VkClearRect*)(local_pRects + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009113 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009114 AEMU_SCOPED_TRACE("vkCmdClearAttachments readParams");
9115 AEMU_SCOPED_TRACE("vkCmdClearAttachments returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009116 pool->freeAll();
9117 countingStream->clearPool();
9118 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009119 mImpl->log("finish vkCmdClearAttachments");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009120}
9121
9122void VkEncoder::vkCmdResolveImage(
9123 VkCommandBuffer commandBuffer,
9124 VkImage srcImage,
9125 VkImageLayout srcImageLayout,
9126 VkImage dstImage,
9127 VkImageLayout dstImageLayout,
9128 uint32_t regionCount,
9129 const VkImageResolve* pRegions)
9130{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009131 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009132 AEMU_SCOPED_TRACE("vkCmdResolveImage encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009133 mImpl->log("start vkCmdResolveImage");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009134 auto stream = mImpl->stream();
9135 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009136 auto resources = mImpl->resources();
9137 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009138 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009139 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009140 VkImage local_srcImage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009141 VkImageLayout local_srcImageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009142 VkImage local_dstImage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009143 VkImageLayout local_dstImageLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009144 uint32_t local_regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009145 VkImageResolve* local_pRegions;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009146 local_commandBuffer = commandBuffer;
9147 local_srcImage = srcImage;
9148 local_srcImageLayout = srcImageLayout;
9149 local_dstImage = dstImage;
9150 local_dstImageLayout = dstImageLayout;
9151 local_regionCount = regionCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009152 local_pRegions = nullptr;
9153 if (pRegions)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009154 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009155 local_pRegions = (VkImageResolve*)pool->alloc(((regionCount)) * sizeof(const VkImageResolve));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009156 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
9157 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009158 deepcopy_VkImageResolve(pool, pRegions + i, (VkImageResolve*)(local_pRegions + i));
9159 }
9160 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08009161 if (local_pRegions)
9162 {
9163 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
9164 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08009165 transform_tohost_VkImageResolve(mImpl->resources(), (VkImageResolve*)(local_pRegions + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08009166 }
9167 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009168 countingStream->rewind();
9169 {
David Reveman9875f2c2019-06-11 21:47:12 -04009170 uint64_t cgen_var_607;
9171 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_607, 1);
9172 countingStream->write((uint64_t*)&cgen_var_607, 1 * 8);
9173 uint64_t cgen_var_608;
9174 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_srcImage, &cgen_var_608, 1);
9175 countingStream->write((uint64_t*)&cgen_var_608, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -08009176 countingStream->write((VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
David Reveman9875f2c2019-06-11 21:47:12 -04009177 uint64_t cgen_var_609;
9178 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_dstImage, &cgen_var_609, 1);
9179 countingStream->write((uint64_t*)&cgen_var_609, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009180 countingStream->write((VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
9181 countingStream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
9182 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
9183 {
9184 marshal_VkImageResolve(countingStream, (VkImageResolve*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009185 }
9186 }
9187 uint32_t packetSize_vkCmdResolveImage = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9188 countingStream->rewind();
9189 uint32_t opcode_vkCmdResolveImage = OP_vkCmdResolveImage;
9190 stream->write(&opcode_vkCmdResolveImage, sizeof(uint32_t));
9191 stream->write(&packetSize_vkCmdResolveImage, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009192 uint64_t cgen_var_610;
9193 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_610, 1);
9194 stream->write((uint64_t*)&cgen_var_610, 1 * 8);
9195 uint64_t cgen_var_611;
9196 stream->handleMapping()->mapHandles_VkImage_u64(&local_srcImage, &cgen_var_611, 1);
9197 stream->write((uint64_t*)&cgen_var_611, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -08009198 stream->write((VkImageLayout*)&local_srcImageLayout, sizeof(VkImageLayout));
David Reveman9875f2c2019-06-11 21:47:12 -04009199 uint64_t cgen_var_612;
9200 stream->handleMapping()->mapHandles_VkImage_u64(&local_dstImage, &cgen_var_612, 1);
9201 stream->write((uint64_t*)&cgen_var_612, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009202 stream->write((VkImageLayout*)&local_dstImageLayout, sizeof(VkImageLayout));
9203 stream->write((uint32_t*)&local_regionCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009204 for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
9205 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009206 marshal_VkImageResolve(stream, (VkImageResolve*)(local_pRegions + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009207 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009208 AEMU_SCOPED_TRACE("vkCmdResolveImage readParams");
9209 AEMU_SCOPED_TRACE("vkCmdResolveImage returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009210 pool->freeAll();
9211 countingStream->clearPool();
9212 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009213 mImpl->log("finish vkCmdResolveImage");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009214}
9215
9216void VkEncoder::vkCmdSetEvent(
9217 VkCommandBuffer commandBuffer,
9218 VkEvent event,
9219 VkPipelineStageFlags stageMask)
9220{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009221 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009222 AEMU_SCOPED_TRACE("vkCmdSetEvent encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009223 mImpl->log("start vkCmdSetEvent");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009224 auto stream = mImpl->stream();
9225 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009226 auto resources = mImpl->resources();
9227 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009228 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009229 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009230 VkEvent local_event;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009231 VkPipelineStageFlags local_stageMask;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009232 local_commandBuffer = commandBuffer;
9233 local_event = event;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009234 local_stageMask = stageMask;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009235 countingStream->rewind();
9236 {
David Reveman9875f2c2019-06-11 21:47:12 -04009237 uint64_t cgen_var_613;
9238 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_613, 1);
9239 countingStream->write((uint64_t*)&cgen_var_613, 1 * 8);
9240 uint64_t cgen_var_614;
9241 countingStream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_614, 1);
9242 countingStream->write((uint64_t*)&cgen_var_614, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009243 countingStream->write((VkPipelineStageFlags*)&local_stageMask, sizeof(VkPipelineStageFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009244 }
9245 uint32_t packetSize_vkCmdSetEvent = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9246 countingStream->rewind();
9247 uint32_t opcode_vkCmdSetEvent = OP_vkCmdSetEvent;
9248 stream->write(&opcode_vkCmdSetEvent, sizeof(uint32_t));
9249 stream->write(&packetSize_vkCmdSetEvent, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009250 uint64_t cgen_var_615;
9251 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_615, 1);
9252 stream->write((uint64_t*)&cgen_var_615, 1 * 8);
9253 uint64_t cgen_var_616;
9254 stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_616, 1);
9255 stream->write((uint64_t*)&cgen_var_616, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009256 stream->write((VkPipelineStageFlags*)&local_stageMask, sizeof(VkPipelineStageFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009257 AEMU_SCOPED_TRACE("vkCmdSetEvent readParams");
9258 AEMU_SCOPED_TRACE("vkCmdSetEvent returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009259 pool->freeAll();
9260 countingStream->clearPool();
9261 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009262 mImpl->log("finish vkCmdSetEvent");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009263}
9264
9265void VkEncoder::vkCmdResetEvent(
9266 VkCommandBuffer commandBuffer,
9267 VkEvent event,
9268 VkPipelineStageFlags stageMask)
9269{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009270 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009271 AEMU_SCOPED_TRACE("vkCmdResetEvent encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009272 mImpl->log("start vkCmdResetEvent");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009273 auto stream = mImpl->stream();
9274 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009275 auto resources = mImpl->resources();
9276 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009277 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009278 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009279 VkEvent local_event;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009280 VkPipelineStageFlags local_stageMask;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009281 local_commandBuffer = commandBuffer;
9282 local_event = event;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009283 local_stageMask = stageMask;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009284 countingStream->rewind();
9285 {
David Reveman9875f2c2019-06-11 21:47:12 -04009286 uint64_t cgen_var_617;
9287 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_617, 1);
9288 countingStream->write((uint64_t*)&cgen_var_617, 1 * 8);
9289 uint64_t cgen_var_618;
9290 countingStream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_618, 1);
9291 countingStream->write((uint64_t*)&cgen_var_618, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009292 countingStream->write((VkPipelineStageFlags*)&local_stageMask, sizeof(VkPipelineStageFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009293 }
9294 uint32_t packetSize_vkCmdResetEvent = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9295 countingStream->rewind();
9296 uint32_t opcode_vkCmdResetEvent = OP_vkCmdResetEvent;
9297 stream->write(&opcode_vkCmdResetEvent, sizeof(uint32_t));
9298 stream->write(&packetSize_vkCmdResetEvent, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009299 uint64_t cgen_var_619;
9300 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_619, 1);
9301 stream->write((uint64_t*)&cgen_var_619, 1 * 8);
9302 uint64_t cgen_var_620;
9303 stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_620, 1);
9304 stream->write((uint64_t*)&cgen_var_620, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009305 stream->write((VkPipelineStageFlags*)&local_stageMask, sizeof(VkPipelineStageFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009306 AEMU_SCOPED_TRACE("vkCmdResetEvent readParams");
9307 AEMU_SCOPED_TRACE("vkCmdResetEvent returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009308 pool->freeAll();
9309 countingStream->clearPool();
9310 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009311 mImpl->log("finish vkCmdResetEvent");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009312}
9313
9314void VkEncoder::vkCmdWaitEvents(
9315 VkCommandBuffer commandBuffer,
9316 uint32_t eventCount,
9317 const VkEvent* pEvents,
9318 VkPipelineStageFlags srcStageMask,
9319 VkPipelineStageFlags dstStageMask,
9320 uint32_t memoryBarrierCount,
9321 const VkMemoryBarrier* pMemoryBarriers,
9322 uint32_t bufferMemoryBarrierCount,
9323 const VkBufferMemoryBarrier* pBufferMemoryBarriers,
9324 uint32_t imageMemoryBarrierCount,
9325 const VkImageMemoryBarrier* pImageMemoryBarriers)
9326{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009327 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009328 AEMU_SCOPED_TRACE("vkCmdWaitEvents encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009329 mImpl->log("start vkCmdWaitEvents");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009330 auto stream = mImpl->stream();
9331 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009332 auto resources = mImpl->resources();
9333 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009334 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009335 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009336 uint32_t local_eventCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009337 VkEvent* local_pEvents;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009338 VkPipelineStageFlags local_srcStageMask;
9339 VkPipelineStageFlags local_dstStageMask;
9340 uint32_t local_memoryBarrierCount;
9341 VkMemoryBarrier* local_pMemoryBarriers;
9342 uint32_t local_bufferMemoryBarrierCount;
9343 VkBufferMemoryBarrier* local_pBufferMemoryBarriers;
9344 uint32_t local_imageMemoryBarrierCount;
9345 VkImageMemoryBarrier* local_pImageMemoryBarriers;
9346 local_commandBuffer = commandBuffer;
9347 local_eventCount = eventCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009348 local_pEvents = nullptr;
9349 if (pEvents)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009350 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009351 local_pEvents = (VkEvent*)pool->dupArray(pEvents, ((eventCount)) * sizeof(const VkEvent));
9352 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009353 local_srcStageMask = srcStageMask;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009354 local_dstStageMask = dstStageMask;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009355 local_memoryBarrierCount = memoryBarrierCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009356 local_pMemoryBarriers = nullptr;
9357 if (pMemoryBarriers)
9358 {
9359 local_pMemoryBarriers = (VkMemoryBarrier*)pool->alloc(((memoryBarrierCount)) * sizeof(const VkMemoryBarrier));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009360 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
9361 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009362 deepcopy_VkMemoryBarrier(pool, pMemoryBarriers + i, (VkMemoryBarrier*)(local_pMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009363 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009364 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009365 local_bufferMemoryBarrierCount = bufferMemoryBarrierCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009366 local_pBufferMemoryBarriers = nullptr;
9367 if (pBufferMemoryBarriers)
9368 {
9369 local_pBufferMemoryBarriers = (VkBufferMemoryBarrier*)pool->alloc(((bufferMemoryBarrierCount)) * sizeof(const VkBufferMemoryBarrier));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009370 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
9371 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009372 deepcopy_VkBufferMemoryBarrier(pool, pBufferMemoryBarriers + i, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009373 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009374 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009375 local_imageMemoryBarrierCount = imageMemoryBarrierCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009376 local_pImageMemoryBarriers = nullptr;
9377 if (pImageMemoryBarriers)
9378 {
9379 local_pImageMemoryBarriers = (VkImageMemoryBarrier*)pool->alloc(((imageMemoryBarrierCount)) * sizeof(const VkImageMemoryBarrier));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009380 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
9381 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009382 deepcopy_VkImageMemoryBarrier(pool, pImageMemoryBarriers + i, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
9383 }
9384 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08009385 if (local_pMemoryBarriers)
9386 {
9387 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
9388 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08009389 transform_tohost_VkMemoryBarrier(mImpl->resources(), (VkMemoryBarrier*)(local_pMemoryBarriers + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08009390 }
9391 }
9392 if (local_pBufferMemoryBarriers)
9393 {
9394 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
9395 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08009396 transform_tohost_VkBufferMemoryBarrier(mImpl->resources(), (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08009397 }
9398 }
9399 if (local_pImageMemoryBarriers)
9400 {
9401 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
9402 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08009403 transform_tohost_VkImageMemoryBarrier(mImpl->resources(), (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08009404 }
9405 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009406 countingStream->rewind();
9407 {
David Reveman9875f2c2019-06-11 21:47:12 -04009408 uint64_t cgen_var_621;
9409 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_621, 1);
9410 countingStream->write((uint64_t*)&cgen_var_621, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009411 countingStream->write((uint32_t*)&local_eventCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08009412 if (((eventCount)))
9413 {
David Reveman9875f2c2019-06-11 21:47:12 -04009414 uint64_t* cgen_var_622;
9415 countingStream->alloc((void**)&cgen_var_622, ((eventCount)) * 8);
9416 countingStream->handleMapping()->mapHandles_VkEvent_u64(local_pEvents, cgen_var_622, ((eventCount)));
9417 countingStream->write((uint64_t*)cgen_var_622, ((eventCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08009418 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009419 countingStream->write((VkPipelineStageFlags*)&local_srcStageMask, sizeof(VkPipelineStageFlags));
9420 countingStream->write((VkPipelineStageFlags*)&local_dstStageMask, sizeof(VkPipelineStageFlags));
9421 countingStream->write((uint32_t*)&local_memoryBarrierCount, sizeof(uint32_t));
9422 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
9423 {
9424 marshal_VkMemoryBarrier(countingStream, (VkMemoryBarrier*)(local_pMemoryBarriers + i));
9425 }
9426 countingStream->write((uint32_t*)&local_bufferMemoryBarrierCount, sizeof(uint32_t));
9427 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
9428 {
9429 marshal_VkBufferMemoryBarrier(countingStream, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
9430 }
9431 countingStream->write((uint32_t*)&local_imageMemoryBarrierCount, sizeof(uint32_t));
9432 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
9433 {
9434 marshal_VkImageMemoryBarrier(countingStream, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009435 }
9436 }
9437 uint32_t packetSize_vkCmdWaitEvents = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9438 countingStream->rewind();
9439 uint32_t opcode_vkCmdWaitEvents = OP_vkCmdWaitEvents;
9440 stream->write(&opcode_vkCmdWaitEvents, sizeof(uint32_t));
9441 stream->write(&packetSize_vkCmdWaitEvents, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009442 uint64_t cgen_var_623;
9443 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_623, 1);
9444 stream->write((uint64_t*)&cgen_var_623, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009445 stream->write((uint32_t*)&local_eventCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -08009446 if (((eventCount)))
9447 {
David Reveman9875f2c2019-06-11 21:47:12 -04009448 uint64_t* cgen_var_624;
9449 stream->alloc((void**)&cgen_var_624, ((eventCount)) * 8);
9450 stream->handleMapping()->mapHandles_VkEvent_u64(local_pEvents, cgen_var_624, ((eventCount)));
9451 stream->write((uint64_t*)cgen_var_624, ((eventCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -08009452 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009453 stream->write((VkPipelineStageFlags*)&local_srcStageMask, sizeof(VkPipelineStageFlags));
9454 stream->write((VkPipelineStageFlags*)&local_dstStageMask, sizeof(VkPipelineStageFlags));
9455 stream->write((uint32_t*)&local_memoryBarrierCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009456 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
9457 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009458 marshal_VkMemoryBarrier(stream, (VkMemoryBarrier*)(local_pMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009459 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009460 stream->write((uint32_t*)&local_bufferMemoryBarrierCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009461 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
9462 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009463 marshal_VkBufferMemoryBarrier(stream, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009464 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009465 stream->write((uint32_t*)&local_imageMemoryBarrierCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009466 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
9467 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009468 marshal_VkImageMemoryBarrier(stream, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009469 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009470 AEMU_SCOPED_TRACE("vkCmdWaitEvents readParams");
9471 AEMU_SCOPED_TRACE("vkCmdWaitEvents returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009472 pool->freeAll();
9473 countingStream->clearPool();
9474 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009475 mImpl->log("finish vkCmdWaitEvents");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009476}
9477
9478void VkEncoder::vkCmdPipelineBarrier(
9479 VkCommandBuffer commandBuffer,
9480 VkPipelineStageFlags srcStageMask,
9481 VkPipelineStageFlags dstStageMask,
9482 VkDependencyFlags dependencyFlags,
9483 uint32_t memoryBarrierCount,
9484 const VkMemoryBarrier* pMemoryBarriers,
9485 uint32_t bufferMemoryBarrierCount,
9486 const VkBufferMemoryBarrier* pBufferMemoryBarriers,
9487 uint32_t imageMemoryBarrierCount,
9488 const VkImageMemoryBarrier* pImageMemoryBarriers)
9489{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009490 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009491 AEMU_SCOPED_TRACE("vkCmdPipelineBarrier encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009492 mImpl->log("start vkCmdPipelineBarrier");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009493 auto stream = mImpl->stream();
9494 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009495 auto resources = mImpl->resources();
9496 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009497 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009498 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009499 VkPipelineStageFlags local_srcStageMask;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009500 VkPipelineStageFlags local_dstStageMask;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009501 VkDependencyFlags local_dependencyFlags;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009502 uint32_t local_memoryBarrierCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009503 VkMemoryBarrier* local_pMemoryBarriers;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009504 uint32_t local_bufferMemoryBarrierCount;
9505 VkBufferMemoryBarrier* local_pBufferMemoryBarriers;
9506 uint32_t local_imageMemoryBarrierCount;
9507 VkImageMemoryBarrier* local_pImageMemoryBarriers;
9508 local_commandBuffer = commandBuffer;
9509 local_srcStageMask = srcStageMask;
9510 local_dstStageMask = dstStageMask;
9511 local_dependencyFlags = dependencyFlags;
9512 local_memoryBarrierCount = memoryBarrierCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009513 local_pMemoryBarriers = nullptr;
9514 if (pMemoryBarriers)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009515 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009516 local_pMemoryBarriers = (VkMemoryBarrier*)pool->alloc(((memoryBarrierCount)) * sizeof(const VkMemoryBarrier));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009517 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
9518 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009519 deepcopy_VkMemoryBarrier(pool, pMemoryBarriers + i, (VkMemoryBarrier*)(local_pMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009520 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009521 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009522 local_bufferMemoryBarrierCount = bufferMemoryBarrierCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009523 local_pBufferMemoryBarriers = nullptr;
9524 if (pBufferMemoryBarriers)
9525 {
9526 local_pBufferMemoryBarriers = (VkBufferMemoryBarrier*)pool->alloc(((bufferMemoryBarrierCount)) * sizeof(const VkBufferMemoryBarrier));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009527 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
9528 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009529 deepcopy_VkBufferMemoryBarrier(pool, pBufferMemoryBarriers + i, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009530 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009531 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009532 local_imageMemoryBarrierCount = imageMemoryBarrierCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009533 local_pImageMemoryBarriers = nullptr;
9534 if (pImageMemoryBarriers)
9535 {
9536 local_pImageMemoryBarriers = (VkImageMemoryBarrier*)pool->alloc(((imageMemoryBarrierCount)) * sizeof(const VkImageMemoryBarrier));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009537 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
9538 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009539 deepcopy_VkImageMemoryBarrier(pool, pImageMemoryBarriers + i, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
9540 }
9541 }
Lingfeng Yang62b23322018-12-24 12:45:47 -08009542 if (local_pMemoryBarriers)
9543 {
9544 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
9545 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08009546 transform_tohost_VkMemoryBarrier(mImpl->resources(), (VkMemoryBarrier*)(local_pMemoryBarriers + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08009547 }
9548 }
9549 if (local_pBufferMemoryBarriers)
9550 {
9551 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
9552 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08009553 transform_tohost_VkBufferMemoryBarrier(mImpl->resources(), (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08009554 }
9555 }
9556 if (local_pImageMemoryBarriers)
9557 {
9558 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
9559 {
Lingfeng Yang97a06702018-12-24 17:02:43 -08009560 transform_tohost_VkImageMemoryBarrier(mImpl->resources(), (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -08009561 }
9562 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009563 countingStream->rewind();
9564 {
David Reveman9875f2c2019-06-11 21:47:12 -04009565 uint64_t cgen_var_625;
9566 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_625, 1);
9567 countingStream->write((uint64_t*)&cgen_var_625, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009568 countingStream->write((VkPipelineStageFlags*)&local_srcStageMask, sizeof(VkPipelineStageFlags));
9569 countingStream->write((VkPipelineStageFlags*)&local_dstStageMask, sizeof(VkPipelineStageFlags));
9570 countingStream->write((VkDependencyFlags*)&local_dependencyFlags, sizeof(VkDependencyFlags));
9571 countingStream->write((uint32_t*)&local_memoryBarrierCount, sizeof(uint32_t));
9572 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
9573 {
9574 marshal_VkMemoryBarrier(countingStream, (VkMemoryBarrier*)(local_pMemoryBarriers + i));
9575 }
9576 countingStream->write((uint32_t*)&local_bufferMemoryBarrierCount, sizeof(uint32_t));
9577 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
9578 {
9579 marshal_VkBufferMemoryBarrier(countingStream, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
9580 }
9581 countingStream->write((uint32_t*)&local_imageMemoryBarrierCount, sizeof(uint32_t));
9582 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
9583 {
9584 marshal_VkImageMemoryBarrier(countingStream, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009585 }
9586 }
9587 uint32_t packetSize_vkCmdPipelineBarrier = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9588 countingStream->rewind();
9589 uint32_t opcode_vkCmdPipelineBarrier = OP_vkCmdPipelineBarrier;
9590 stream->write(&opcode_vkCmdPipelineBarrier, sizeof(uint32_t));
9591 stream->write(&packetSize_vkCmdPipelineBarrier, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009592 uint64_t cgen_var_626;
9593 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_626, 1);
9594 stream->write((uint64_t*)&cgen_var_626, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009595 stream->write((VkPipelineStageFlags*)&local_srcStageMask, sizeof(VkPipelineStageFlags));
9596 stream->write((VkPipelineStageFlags*)&local_dstStageMask, sizeof(VkPipelineStageFlags));
9597 stream->write((VkDependencyFlags*)&local_dependencyFlags, sizeof(VkDependencyFlags));
9598 stream->write((uint32_t*)&local_memoryBarrierCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009599 for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
9600 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009601 marshal_VkMemoryBarrier(stream, (VkMemoryBarrier*)(local_pMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009602 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009603 stream->write((uint32_t*)&local_bufferMemoryBarrierCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009604 for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
9605 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009606 marshal_VkBufferMemoryBarrier(stream, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009607 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009608 stream->write((uint32_t*)&local_imageMemoryBarrierCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009609 for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
9610 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009611 marshal_VkImageMemoryBarrier(stream, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009612 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009613 AEMU_SCOPED_TRACE("vkCmdPipelineBarrier readParams");
9614 AEMU_SCOPED_TRACE("vkCmdPipelineBarrier returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009615 pool->freeAll();
9616 countingStream->clearPool();
9617 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009618 mImpl->log("finish vkCmdPipelineBarrier");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009619}
9620
9621void VkEncoder::vkCmdBeginQuery(
9622 VkCommandBuffer commandBuffer,
9623 VkQueryPool queryPool,
9624 uint32_t query,
9625 VkQueryControlFlags flags)
9626{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009627 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009628 AEMU_SCOPED_TRACE("vkCmdBeginQuery encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009629 mImpl->log("start vkCmdBeginQuery");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009630 auto stream = mImpl->stream();
9631 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009632 auto resources = mImpl->resources();
9633 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009634 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009635 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009636 VkQueryPool local_queryPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009637 uint32_t local_query;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009638 VkQueryControlFlags local_flags;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009639 local_commandBuffer = commandBuffer;
9640 local_queryPool = queryPool;
9641 local_query = query;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009642 local_flags = flags;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009643 countingStream->rewind();
9644 {
David Reveman9875f2c2019-06-11 21:47:12 -04009645 uint64_t cgen_var_627;
9646 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_627, 1);
9647 countingStream->write((uint64_t*)&cgen_var_627, 1 * 8);
9648 uint64_t cgen_var_628;
9649 countingStream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_628, 1);
9650 countingStream->write((uint64_t*)&cgen_var_628, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009651 countingStream->write((uint32_t*)&local_query, sizeof(uint32_t));
9652 countingStream->write((VkQueryControlFlags*)&local_flags, sizeof(VkQueryControlFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009653 }
9654 uint32_t packetSize_vkCmdBeginQuery = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9655 countingStream->rewind();
9656 uint32_t opcode_vkCmdBeginQuery = OP_vkCmdBeginQuery;
9657 stream->write(&opcode_vkCmdBeginQuery, sizeof(uint32_t));
9658 stream->write(&packetSize_vkCmdBeginQuery, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009659 uint64_t cgen_var_629;
9660 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_629, 1);
9661 stream->write((uint64_t*)&cgen_var_629, 1 * 8);
9662 uint64_t cgen_var_630;
9663 stream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_630, 1);
9664 stream->write((uint64_t*)&cgen_var_630, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009665 stream->write((uint32_t*)&local_query, sizeof(uint32_t));
9666 stream->write((VkQueryControlFlags*)&local_flags, sizeof(VkQueryControlFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009667 AEMU_SCOPED_TRACE("vkCmdBeginQuery readParams");
9668 AEMU_SCOPED_TRACE("vkCmdBeginQuery returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009669 pool->freeAll();
9670 countingStream->clearPool();
9671 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009672 mImpl->log("finish vkCmdBeginQuery");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009673}
9674
9675void VkEncoder::vkCmdEndQuery(
9676 VkCommandBuffer commandBuffer,
9677 VkQueryPool queryPool,
9678 uint32_t query)
9679{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009680 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009681 AEMU_SCOPED_TRACE("vkCmdEndQuery encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009682 mImpl->log("start vkCmdEndQuery");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009683 auto stream = mImpl->stream();
9684 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009685 auto resources = mImpl->resources();
9686 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009687 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009688 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009689 VkQueryPool local_queryPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009690 uint32_t local_query;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009691 local_commandBuffer = commandBuffer;
9692 local_queryPool = queryPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009693 local_query = query;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009694 countingStream->rewind();
9695 {
David Reveman9875f2c2019-06-11 21:47:12 -04009696 uint64_t cgen_var_631;
9697 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_631, 1);
9698 countingStream->write((uint64_t*)&cgen_var_631, 1 * 8);
9699 uint64_t cgen_var_632;
9700 countingStream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_632, 1);
9701 countingStream->write((uint64_t*)&cgen_var_632, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009702 countingStream->write((uint32_t*)&local_query, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009703 }
9704 uint32_t packetSize_vkCmdEndQuery = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9705 countingStream->rewind();
9706 uint32_t opcode_vkCmdEndQuery = OP_vkCmdEndQuery;
9707 stream->write(&opcode_vkCmdEndQuery, sizeof(uint32_t));
9708 stream->write(&packetSize_vkCmdEndQuery, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009709 uint64_t cgen_var_633;
9710 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_633, 1);
9711 stream->write((uint64_t*)&cgen_var_633, 1 * 8);
9712 uint64_t cgen_var_634;
9713 stream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_634, 1);
9714 stream->write((uint64_t*)&cgen_var_634, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009715 stream->write((uint32_t*)&local_query, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009716 AEMU_SCOPED_TRACE("vkCmdEndQuery readParams");
9717 AEMU_SCOPED_TRACE("vkCmdEndQuery returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009718 pool->freeAll();
9719 countingStream->clearPool();
9720 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009721 mImpl->log("finish vkCmdEndQuery");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009722}
9723
9724void VkEncoder::vkCmdResetQueryPool(
9725 VkCommandBuffer commandBuffer,
9726 VkQueryPool queryPool,
9727 uint32_t firstQuery,
9728 uint32_t queryCount)
9729{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009730 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009731 AEMU_SCOPED_TRACE("vkCmdResetQueryPool encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009732 mImpl->log("start vkCmdResetQueryPool");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009733 auto stream = mImpl->stream();
9734 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009735 auto resources = mImpl->resources();
9736 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009737 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009738 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009739 VkQueryPool local_queryPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009740 uint32_t local_firstQuery;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009741 uint32_t local_queryCount;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009742 local_commandBuffer = commandBuffer;
9743 local_queryPool = queryPool;
9744 local_firstQuery = firstQuery;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009745 local_queryCount = queryCount;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009746 countingStream->rewind();
9747 {
David Reveman9875f2c2019-06-11 21:47:12 -04009748 uint64_t cgen_var_635;
9749 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_635, 1);
9750 countingStream->write((uint64_t*)&cgen_var_635, 1 * 8);
9751 uint64_t cgen_var_636;
9752 countingStream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_636, 1);
9753 countingStream->write((uint64_t*)&cgen_var_636, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009754 countingStream->write((uint32_t*)&local_firstQuery, sizeof(uint32_t));
9755 countingStream->write((uint32_t*)&local_queryCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009756 }
9757 uint32_t packetSize_vkCmdResetQueryPool = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9758 countingStream->rewind();
9759 uint32_t opcode_vkCmdResetQueryPool = OP_vkCmdResetQueryPool;
9760 stream->write(&opcode_vkCmdResetQueryPool, sizeof(uint32_t));
9761 stream->write(&packetSize_vkCmdResetQueryPool, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009762 uint64_t cgen_var_637;
9763 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_637, 1);
9764 stream->write((uint64_t*)&cgen_var_637, 1 * 8);
9765 uint64_t cgen_var_638;
9766 stream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_638, 1);
9767 stream->write((uint64_t*)&cgen_var_638, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009768 stream->write((uint32_t*)&local_firstQuery, sizeof(uint32_t));
9769 stream->write((uint32_t*)&local_queryCount, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009770 AEMU_SCOPED_TRACE("vkCmdResetQueryPool readParams");
9771 AEMU_SCOPED_TRACE("vkCmdResetQueryPool returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009772 pool->freeAll();
9773 countingStream->clearPool();
9774 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009775 mImpl->log("finish vkCmdResetQueryPool");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009776}
9777
9778void VkEncoder::vkCmdWriteTimestamp(
9779 VkCommandBuffer commandBuffer,
9780 VkPipelineStageFlagBits pipelineStage,
9781 VkQueryPool queryPool,
9782 uint32_t query)
9783{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009784 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009785 AEMU_SCOPED_TRACE("vkCmdWriteTimestamp encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009786 mImpl->log("start vkCmdWriteTimestamp");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009787 auto stream = mImpl->stream();
9788 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009789 auto resources = mImpl->resources();
9790 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009791 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009792 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009793 VkPipelineStageFlagBits local_pipelineStage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009794 VkQueryPool local_queryPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009795 uint32_t local_query;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009796 local_commandBuffer = commandBuffer;
9797 local_pipelineStage = pipelineStage;
9798 local_queryPool = queryPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009799 local_query = query;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009800 countingStream->rewind();
9801 {
David Reveman9875f2c2019-06-11 21:47:12 -04009802 uint64_t cgen_var_639;
9803 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_639, 1);
9804 countingStream->write((uint64_t*)&cgen_var_639, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009805 countingStream->write((VkPipelineStageFlagBits*)&local_pipelineStage, sizeof(VkPipelineStageFlagBits));
David Reveman9875f2c2019-06-11 21:47:12 -04009806 uint64_t cgen_var_640;
9807 countingStream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_640, 1);
9808 countingStream->write((uint64_t*)&cgen_var_640, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009809 countingStream->write((uint32_t*)&local_query, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009810 }
9811 uint32_t packetSize_vkCmdWriteTimestamp = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9812 countingStream->rewind();
9813 uint32_t opcode_vkCmdWriteTimestamp = OP_vkCmdWriteTimestamp;
9814 stream->write(&opcode_vkCmdWriteTimestamp, sizeof(uint32_t));
9815 stream->write(&packetSize_vkCmdWriteTimestamp, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009816 uint64_t cgen_var_641;
9817 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_641, 1);
9818 stream->write((uint64_t*)&cgen_var_641, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009819 stream->write((VkPipelineStageFlagBits*)&local_pipelineStage, sizeof(VkPipelineStageFlagBits));
David Reveman9875f2c2019-06-11 21:47:12 -04009820 uint64_t cgen_var_642;
9821 stream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_642, 1);
9822 stream->write((uint64_t*)&cgen_var_642, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009823 stream->write((uint32_t*)&local_query, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009824 AEMU_SCOPED_TRACE("vkCmdWriteTimestamp readParams");
9825 AEMU_SCOPED_TRACE("vkCmdWriteTimestamp returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009826 pool->freeAll();
9827 countingStream->clearPool();
9828 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009829 mImpl->log("finish vkCmdWriteTimestamp");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009830}
9831
9832void VkEncoder::vkCmdCopyQueryPoolResults(
9833 VkCommandBuffer commandBuffer,
9834 VkQueryPool queryPool,
9835 uint32_t firstQuery,
9836 uint32_t queryCount,
9837 VkBuffer dstBuffer,
9838 VkDeviceSize dstOffset,
9839 VkDeviceSize stride,
9840 VkQueryResultFlags flags)
9841{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009842 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009843 AEMU_SCOPED_TRACE("vkCmdCopyQueryPoolResults encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009844 mImpl->log("start vkCmdCopyQueryPoolResults");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009845 auto stream = mImpl->stream();
9846 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009847 auto resources = mImpl->resources();
9848 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009849 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009850 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009851 VkQueryPool local_queryPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009852 uint32_t local_firstQuery;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009853 uint32_t local_queryCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009854 VkBuffer local_dstBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009855 VkDeviceSize local_dstOffset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009856 VkDeviceSize local_stride;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009857 VkQueryResultFlags local_flags;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009858 local_commandBuffer = commandBuffer;
9859 local_queryPool = queryPool;
9860 local_firstQuery = firstQuery;
9861 local_queryCount = queryCount;
9862 local_dstBuffer = dstBuffer;
9863 local_dstOffset = dstOffset;
9864 local_stride = stride;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009865 local_flags = flags;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009866 countingStream->rewind();
9867 {
David Reveman9875f2c2019-06-11 21:47:12 -04009868 uint64_t cgen_var_643;
9869 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_643, 1);
9870 countingStream->write((uint64_t*)&cgen_var_643, 1 * 8);
9871 uint64_t cgen_var_644;
9872 countingStream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_644, 1);
9873 countingStream->write((uint64_t*)&cgen_var_644, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009874 countingStream->write((uint32_t*)&local_firstQuery, sizeof(uint32_t));
9875 countingStream->write((uint32_t*)&local_queryCount, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009876 uint64_t cgen_var_645;
9877 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_645, 1);
9878 countingStream->write((uint64_t*)&cgen_var_645, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009879 countingStream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
9880 countingStream->write((VkDeviceSize*)&local_stride, sizeof(VkDeviceSize));
9881 countingStream->write((VkQueryResultFlags*)&local_flags, sizeof(VkQueryResultFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009882 }
9883 uint32_t packetSize_vkCmdCopyQueryPoolResults = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9884 countingStream->rewind();
9885 uint32_t opcode_vkCmdCopyQueryPoolResults = OP_vkCmdCopyQueryPoolResults;
9886 stream->write(&opcode_vkCmdCopyQueryPoolResults, sizeof(uint32_t));
9887 stream->write(&packetSize_vkCmdCopyQueryPoolResults, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009888 uint64_t cgen_var_646;
9889 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_646, 1);
9890 stream->write((uint64_t*)&cgen_var_646, 1 * 8);
9891 uint64_t cgen_var_647;
9892 stream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_647, 1);
9893 stream->write((uint64_t*)&cgen_var_647, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009894 stream->write((uint32_t*)&local_firstQuery, sizeof(uint32_t));
9895 stream->write((uint32_t*)&local_queryCount, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009896 uint64_t cgen_var_648;
9897 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_648, 1);
9898 stream->write((uint64_t*)&cgen_var_648, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009899 stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
9900 stream->write((VkDeviceSize*)&local_stride, sizeof(VkDeviceSize));
9901 stream->write((VkQueryResultFlags*)&local_flags, sizeof(VkQueryResultFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009902 AEMU_SCOPED_TRACE("vkCmdCopyQueryPoolResults readParams");
9903 AEMU_SCOPED_TRACE("vkCmdCopyQueryPoolResults returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009904 pool->freeAll();
9905 countingStream->clearPool();
9906 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009907 mImpl->log("finish vkCmdCopyQueryPoolResults");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009908}
9909
9910void VkEncoder::vkCmdPushConstants(
9911 VkCommandBuffer commandBuffer,
9912 VkPipelineLayout layout,
9913 VkShaderStageFlags stageFlags,
9914 uint32_t offset,
9915 uint32_t size,
9916 const void* pValues)
9917{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009918 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009919 AEMU_SCOPED_TRACE("vkCmdPushConstants encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009920 mImpl->log("start vkCmdPushConstants");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009921 auto stream = mImpl->stream();
9922 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009923 auto resources = mImpl->resources();
9924 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009925 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009926 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009927 VkPipelineLayout local_layout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009928 VkShaderStageFlags local_stageFlags;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009929 uint32_t local_offset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009930 uint32_t local_size;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009931 void* local_pValues;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009932 local_commandBuffer = commandBuffer;
9933 local_layout = layout;
9934 local_stageFlags = stageFlags;
9935 local_offset = offset;
9936 local_size = size;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009937 local_pValues = nullptr;
9938 if (pValues)
9939 {
9940 local_pValues = (void*)pool->dupArray(pValues, ((size)) * sizeof(const uint8_t));
9941 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009942 countingStream->rewind();
9943 {
David Reveman9875f2c2019-06-11 21:47:12 -04009944 uint64_t cgen_var_649;
9945 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_649, 1);
9946 countingStream->write((uint64_t*)&cgen_var_649, 1 * 8);
9947 uint64_t cgen_var_650;
9948 countingStream->handleMapping()->mapHandles_VkPipelineLayout_u64(&local_layout, &cgen_var_650, 1);
9949 countingStream->write((uint64_t*)&cgen_var_650, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009950 countingStream->write((VkShaderStageFlags*)&local_stageFlags, sizeof(VkShaderStageFlags));
9951 countingStream->write((uint32_t*)&local_offset, sizeof(uint32_t));
9952 countingStream->write((uint32_t*)&local_size, sizeof(uint32_t));
9953 countingStream->write((void*)local_pValues, ((size)) * sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009954 }
9955 uint32_t packetSize_vkCmdPushConstants = 4 + 4 + (uint32_t)countingStream->bytesWritten();
9956 countingStream->rewind();
9957 uint32_t opcode_vkCmdPushConstants = OP_vkCmdPushConstants;
9958 stream->write(&opcode_vkCmdPushConstants, sizeof(uint32_t));
9959 stream->write(&packetSize_vkCmdPushConstants, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -04009960 uint64_t cgen_var_651;
9961 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_651, 1);
9962 stream->write((uint64_t*)&cgen_var_651, 1 * 8);
9963 uint64_t cgen_var_652;
9964 stream->handleMapping()->mapHandles_VkPipelineLayout_u64(&local_layout, &cgen_var_652, 1);
9965 stream->write((uint64_t*)&cgen_var_652, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009966 stream->write((VkShaderStageFlags*)&local_stageFlags, sizeof(VkShaderStageFlags));
9967 stream->write((uint32_t*)&local_offset, sizeof(uint32_t));
9968 stream->write((uint32_t*)&local_size, sizeof(uint32_t));
9969 stream->write((void*)local_pValues, ((size)) * sizeof(uint8_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009970 AEMU_SCOPED_TRACE("vkCmdPushConstants readParams");
9971 AEMU_SCOPED_TRACE("vkCmdPushConstants returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -07009972 pool->freeAll();
9973 countingStream->clearPool();
9974 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009975 mImpl->log("finish vkCmdPushConstants");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009976}
9977
9978void VkEncoder::vkCmdBeginRenderPass(
9979 VkCommandBuffer commandBuffer,
9980 const VkRenderPassBeginInfo* pRenderPassBegin,
9981 VkSubpassContents contents)
9982{
Lingfeng Yang256f9252020-07-14 14:27:33 -07009983 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -08009984 AEMU_SCOPED_TRACE("vkCmdBeginRenderPass encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -08009985 mImpl->log("start vkCmdBeginRenderPass");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -07009986 auto stream = mImpl->stream();
9987 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009988 auto resources = mImpl->resources();
9989 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -08009990 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009991 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009992 VkRenderPassBeginInfo* local_pRenderPassBegin;
Lingfeng Yang9666b852018-11-13 23:09:59 -08009993 VkSubpassContents local_contents;
9994 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -08009995 local_pRenderPassBegin = nullptr;
9996 if (pRenderPassBegin)
9997 {
9998 local_pRenderPassBegin = (VkRenderPassBeginInfo*)pool->alloc(sizeof(const VkRenderPassBeginInfo));
9999 deepcopy_VkRenderPassBeginInfo(pool, pRenderPassBegin, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
10000 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010001 local_contents = contents;
Lingfeng Yang62b23322018-12-24 12:45:47 -080010002 if (local_pRenderPassBegin)
10003 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080010004 transform_tohost_VkRenderPassBeginInfo(mImpl->resources(), (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
Lingfeng Yang62b23322018-12-24 12:45:47 -080010005 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010006 countingStream->rewind();
10007 {
David Reveman9875f2c2019-06-11 21:47:12 -040010008 uint64_t cgen_var_653;
10009 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_653, 1);
10010 countingStream->write((uint64_t*)&cgen_var_653, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010011 marshal_VkRenderPassBeginInfo(countingStream, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
10012 countingStream->write((VkSubpassContents*)&local_contents, sizeof(VkSubpassContents));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010013 }
10014 uint32_t packetSize_vkCmdBeginRenderPass = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10015 countingStream->rewind();
10016 uint32_t opcode_vkCmdBeginRenderPass = OP_vkCmdBeginRenderPass;
10017 stream->write(&opcode_vkCmdBeginRenderPass, sizeof(uint32_t));
10018 stream->write(&packetSize_vkCmdBeginRenderPass, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010019 uint64_t cgen_var_654;
10020 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_654, 1);
10021 stream->write((uint64_t*)&cgen_var_654, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010022 marshal_VkRenderPassBeginInfo(stream, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
10023 stream->write((VkSubpassContents*)&local_contents, sizeof(VkSubpassContents));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010024 AEMU_SCOPED_TRACE("vkCmdBeginRenderPass readParams");
10025 AEMU_SCOPED_TRACE("vkCmdBeginRenderPass returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010026 pool->freeAll();
10027 countingStream->clearPool();
10028 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010029 mImpl->log("finish vkCmdBeginRenderPass");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010030}
10031
10032void VkEncoder::vkCmdNextSubpass(
10033 VkCommandBuffer commandBuffer,
10034 VkSubpassContents contents)
10035{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010036 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010037 AEMU_SCOPED_TRACE("vkCmdNextSubpass encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010038 mImpl->log("start vkCmdNextSubpass");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010039 auto stream = mImpl->stream();
10040 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010041 auto resources = mImpl->resources();
10042 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010043 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010044 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010045 VkSubpassContents local_contents;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010046 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010047 local_contents = contents;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010048 countingStream->rewind();
10049 {
David Reveman9875f2c2019-06-11 21:47:12 -040010050 uint64_t cgen_var_655;
10051 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_655, 1);
10052 countingStream->write((uint64_t*)&cgen_var_655, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010053 countingStream->write((VkSubpassContents*)&local_contents, sizeof(VkSubpassContents));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010054 }
10055 uint32_t packetSize_vkCmdNextSubpass = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10056 countingStream->rewind();
10057 uint32_t opcode_vkCmdNextSubpass = OP_vkCmdNextSubpass;
10058 stream->write(&opcode_vkCmdNextSubpass, sizeof(uint32_t));
10059 stream->write(&packetSize_vkCmdNextSubpass, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010060 uint64_t cgen_var_656;
10061 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_656, 1);
10062 stream->write((uint64_t*)&cgen_var_656, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010063 stream->write((VkSubpassContents*)&local_contents, sizeof(VkSubpassContents));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010064 AEMU_SCOPED_TRACE("vkCmdNextSubpass readParams");
10065 AEMU_SCOPED_TRACE("vkCmdNextSubpass returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010066 pool->freeAll();
10067 countingStream->clearPool();
10068 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010069 mImpl->log("finish vkCmdNextSubpass");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010070}
10071
10072void VkEncoder::vkCmdEndRenderPass(
10073 VkCommandBuffer commandBuffer)
10074{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010075 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010076 AEMU_SCOPED_TRACE("vkCmdEndRenderPass encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010077 mImpl->log("start vkCmdEndRenderPass");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010078 auto stream = mImpl->stream();
10079 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010080 auto resources = mImpl->resources();
10081 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010082 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010083 VkCommandBuffer local_commandBuffer;
10084 local_commandBuffer = commandBuffer;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010085 countingStream->rewind();
10086 {
David Reveman9875f2c2019-06-11 21:47:12 -040010087 uint64_t cgen_var_657;
10088 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_657, 1);
10089 countingStream->write((uint64_t*)&cgen_var_657, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010090 }
10091 uint32_t packetSize_vkCmdEndRenderPass = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10092 countingStream->rewind();
10093 uint32_t opcode_vkCmdEndRenderPass = OP_vkCmdEndRenderPass;
10094 stream->write(&opcode_vkCmdEndRenderPass, sizeof(uint32_t));
10095 stream->write(&packetSize_vkCmdEndRenderPass, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010096 uint64_t cgen_var_658;
10097 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_658, 1);
10098 stream->write((uint64_t*)&cgen_var_658, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010099 AEMU_SCOPED_TRACE("vkCmdEndRenderPass readParams");
10100 AEMU_SCOPED_TRACE("vkCmdEndRenderPass returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010101 pool->freeAll();
10102 countingStream->clearPool();
10103 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010104 mImpl->log("finish vkCmdEndRenderPass");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010105}
10106
10107void VkEncoder::vkCmdExecuteCommands(
10108 VkCommandBuffer commandBuffer,
10109 uint32_t commandBufferCount,
10110 const VkCommandBuffer* pCommandBuffers)
10111{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010112 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010113 AEMU_SCOPED_TRACE("vkCmdExecuteCommands encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010114 mImpl->log("start vkCmdExecuteCommands");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010115 auto stream = mImpl->stream();
10116 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010117 auto resources = mImpl->resources();
10118 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010119 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010120 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010121 uint32_t local_commandBufferCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010122 VkCommandBuffer* local_pCommandBuffers;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010123 local_commandBuffer = commandBuffer;
10124 local_commandBufferCount = commandBufferCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010125 local_pCommandBuffers = nullptr;
10126 if (pCommandBuffers)
10127 {
10128 local_pCommandBuffers = (VkCommandBuffer*)pool->dupArray(pCommandBuffers, ((commandBufferCount)) * sizeof(const VkCommandBuffer));
10129 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010130 countingStream->rewind();
10131 {
David Reveman9875f2c2019-06-11 21:47:12 -040010132 uint64_t cgen_var_659;
10133 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_659, 1);
10134 countingStream->write((uint64_t*)&cgen_var_659, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010135 countingStream->write((uint32_t*)&local_commandBufferCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -080010136 if (((commandBufferCount)))
10137 {
David Reveman9875f2c2019-06-11 21:47:12 -040010138 uint64_t* cgen_var_660;
10139 countingStream->alloc((void**)&cgen_var_660, ((commandBufferCount)) * 8);
10140 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(local_pCommandBuffers, cgen_var_660, ((commandBufferCount)));
10141 countingStream->write((uint64_t*)cgen_var_660, ((commandBufferCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080010142 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010143 }
10144 uint32_t packetSize_vkCmdExecuteCommands = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10145 countingStream->rewind();
10146 uint32_t opcode_vkCmdExecuteCommands = OP_vkCmdExecuteCommands;
10147 stream->write(&opcode_vkCmdExecuteCommands, sizeof(uint32_t));
10148 stream->write(&packetSize_vkCmdExecuteCommands, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010149 uint64_t cgen_var_661;
10150 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_661, 1);
10151 stream->write((uint64_t*)&cgen_var_661, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010152 stream->write((uint32_t*)&local_commandBufferCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -080010153 if (((commandBufferCount)))
10154 {
David Reveman9875f2c2019-06-11 21:47:12 -040010155 uint64_t* cgen_var_662;
10156 stream->alloc((void**)&cgen_var_662, ((commandBufferCount)) * 8);
10157 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(local_pCommandBuffers, cgen_var_662, ((commandBufferCount)));
10158 stream->write((uint64_t*)cgen_var_662, ((commandBufferCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080010159 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010160 AEMU_SCOPED_TRACE("vkCmdExecuteCommands readParams");
10161 AEMU_SCOPED_TRACE("vkCmdExecuteCommands returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010162 pool->freeAll();
10163 countingStream->clearPool();
10164 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010165 mImpl->log("finish vkCmdExecuteCommands");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010166}
10167
10168#endif
10169#ifdef VK_VERSION_1_1
10170VkResult VkEncoder::vkEnumerateInstanceVersion(
10171 uint32_t* pApiVersion)
10172{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010173 EncoderAutoLock encoderLock(this);
Lingfeng Yange7391992019-03-15 09:42:13 -070010174 AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion encode");
10175 mImpl->log("start vkEnumerateInstanceVersion");
10176 auto stream = mImpl->stream();
10177 auto countingStream = mImpl->countingStream();
10178 auto resources = mImpl->resources();
10179 auto pool = mImpl->pool();
10180 stream->setHandleMapping(resources->unwrapMapping());
10181 countingStream->rewind();
10182 {
10183 countingStream->write((uint32_t*)pApiVersion, sizeof(uint32_t));
10184 }
10185 uint32_t packetSize_vkEnumerateInstanceVersion = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10186 countingStream->rewind();
10187 uint32_t opcode_vkEnumerateInstanceVersion = OP_vkEnumerateInstanceVersion;
10188 stream->write(&opcode_vkEnumerateInstanceVersion, sizeof(uint32_t));
10189 stream->write(&packetSize_vkEnumerateInstanceVersion, sizeof(uint32_t));
10190 stream->write((uint32_t*)pApiVersion, sizeof(uint32_t));
10191 AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion readParams");
10192 stream->read((uint32_t*)pApiVersion, sizeof(uint32_t));
10193 AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010194 VkResult vkEnumerateInstanceVersion_VkResult_return = (VkResult)0;
Lingfeng Yange7391992019-03-15 09:42:13 -070010195 stream->read(&vkEnumerateInstanceVersion_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070010196 pool->freeAll();
Lingfeng Yange7391992019-03-15 09:42:13 -070010197 countingStream->clearPool();
10198 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010199 mImpl->log("finish vkEnumerateInstanceVersion");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010200 return vkEnumerateInstanceVersion_VkResult_return;
10201}
10202
10203VkResult VkEncoder::vkBindBufferMemory2(
10204 VkDevice device,
10205 uint32_t bindInfoCount,
10206 const VkBindBufferMemoryInfo* pBindInfos)
10207{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010208 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010209 AEMU_SCOPED_TRACE("vkBindBufferMemory2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010210 mImpl->log("start vkBindBufferMemory2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010211 auto stream = mImpl->stream();
10212 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010213 auto resources = mImpl->resources();
10214 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010215 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010216 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010217 uint32_t local_bindInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010218 VkBindBufferMemoryInfo* local_pBindInfos;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010219 local_device = device;
10220 local_bindInfoCount = bindInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010221 local_pBindInfos = nullptr;
10222 if (pBindInfos)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010223 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010224 local_pBindInfos = (VkBindBufferMemoryInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindBufferMemoryInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010225 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
10226 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010227 deepcopy_VkBindBufferMemoryInfo(pool, pBindInfos + i, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
10228 }
10229 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080010230 if (local_pBindInfos)
10231 {
10232 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
10233 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080010234 transform_tohost_VkBindBufferMemoryInfo(mImpl->resources(), (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -080010235 }
10236 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010237 countingStream->rewind();
10238 {
David Reveman9875f2c2019-06-11 21:47:12 -040010239 uint64_t cgen_var_663;
10240 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_663, 1);
10241 countingStream->write((uint64_t*)&cgen_var_663, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010242 countingStream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
10243 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
10244 {
10245 marshal_VkBindBufferMemoryInfo(countingStream, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010246 }
10247 }
10248 uint32_t packetSize_vkBindBufferMemory2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10249 countingStream->rewind();
10250 uint32_t opcode_vkBindBufferMemory2 = OP_vkBindBufferMemory2;
10251 stream->write(&opcode_vkBindBufferMemory2, sizeof(uint32_t));
10252 stream->write(&packetSize_vkBindBufferMemory2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010253 uint64_t cgen_var_664;
10254 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_664, 1);
10255 stream->write((uint64_t*)&cgen_var_664, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010256 stream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010257 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
10258 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010259 marshal_VkBindBufferMemoryInfo(stream, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010260 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010261 AEMU_SCOPED_TRACE("vkBindBufferMemory2 readParams");
10262 AEMU_SCOPED_TRACE("vkBindBufferMemory2 returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010263 VkResult vkBindBufferMemory2_VkResult_return = (VkResult)0;
10264 stream->read(&vkBindBufferMemory2_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070010265 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080010266 countingStream->clearPool();
10267 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010268 mImpl->log("finish vkBindBufferMemory2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010269 return vkBindBufferMemory2_VkResult_return;
10270}
10271
10272VkResult VkEncoder::vkBindImageMemory2(
10273 VkDevice device,
10274 uint32_t bindInfoCount,
10275 const VkBindImageMemoryInfo* pBindInfos)
10276{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010277 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010278 AEMU_SCOPED_TRACE("vkBindImageMemory2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010279 mImpl->log("start vkBindImageMemory2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010280 auto stream = mImpl->stream();
10281 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010282 auto resources = mImpl->resources();
10283 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010284 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010285 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010286 uint32_t local_bindInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010287 VkBindImageMemoryInfo* local_pBindInfos;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010288 local_device = device;
10289 local_bindInfoCount = bindInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010290 local_pBindInfos = nullptr;
10291 if (pBindInfos)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010292 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010293 local_pBindInfos = (VkBindImageMemoryInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindImageMemoryInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010294 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
10295 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010296 deepcopy_VkBindImageMemoryInfo(pool, pBindInfos + i, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
10297 }
10298 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080010299 if (local_pBindInfos)
10300 {
10301 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
10302 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080010303 transform_tohost_VkBindImageMemoryInfo(mImpl->resources(), (VkBindImageMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -080010304 }
10305 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010306 countingStream->rewind();
10307 {
David Reveman9875f2c2019-06-11 21:47:12 -040010308 uint64_t cgen_var_665;
10309 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_665, 1);
10310 countingStream->write((uint64_t*)&cgen_var_665, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010311 countingStream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
10312 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
10313 {
10314 marshal_VkBindImageMemoryInfo(countingStream, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010315 }
10316 }
10317 uint32_t packetSize_vkBindImageMemory2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10318 countingStream->rewind();
10319 uint32_t opcode_vkBindImageMemory2 = OP_vkBindImageMemory2;
10320 stream->write(&opcode_vkBindImageMemory2, sizeof(uint32_t));
10321 stream->write(&packetSize_vkBindImageMemory2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010322 uint64_t cgen_var_666;
10323 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_666, 1);
10324 stream->write((uint64_t*)&cgen_var_666, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010325 stream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010326 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
10327 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010328 marshal_VkBindImageMemoryInfo(stream, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010329 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010330 AEMU_SCOPED_TRACE("vkBindImageMemory2 readParams");
10331 AEMU_SCOPED_TRACE("vkBindImageMemory2 returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010332 VkResult vkBindImageMemory2_VkResult_return = (VkResult)0;
10333 stream->read(&vkBindImageMemory2_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070010334 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080010335 countingStream->clearPool();
10336 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010337 mImpl->log("finish vkBindImageMemory2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010338 return vkBindImageMemory2_VkResult_return;
10339}
10340
10341void VkEncoder::vkGetDeviceGroupPeerMemoryFeatures(
10342 VkDevice device,
10343 uint32_t heapIndex,
10344 uint32_t localDeviceIndex,
10345 uint32_t remoteDeviceIndex,
10346 VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
10347{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010348 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010349 AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeatures encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010350 mImpl->log("start vkGetDeviceGroupPeerMemoryFeatures");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010351 auto stream = mImpl->stream();
10352 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010353 auto resources = mImpl->resources();
10354 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010355 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010356 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010357 uint32_t local_heapIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010358 uint32_t local_localDeviceIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010359 uint32_t local_remoteDeviceIndex;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010360 local_device = device;
10361 local_heapIndex = heapIndex;
10362 local_localDeviceIndex = localDeviceIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010363 local_remoteDeviceIndex = remoteDeviceIndex;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010364 countingStream->rewind();
10365 {
David Reveman9875f2c2019-06-11 21:47:12 -040010366 uint64_t cgen_var_667;
10367 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_667, 1);
10368 countingStream->write((uint64_t*)&cgen_var_667, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010369 countingStream->write((uint32_t*)&local_heapIndex, sizeof(uint32_t));
10370 countingStream->write((uint32_t*)&local_localDeviceIndex, sizeof(uint32_t));
10371 countingStream->write((uint32_t*)&local_remoteDeviceIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010372 countingStream->write((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
10373 }
10374 uint32_t packetSize_vkGetDeviceGroupPeerMemoryFeatures = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10375 countingStream->rewind();
10376 uint32_t opcode_vkGetDeviceGroupPeerMemoryFeatures = OP_vkGetDeviceGroupPeerMemoryFeatures;
10377 stream->write(&opcode_vkGetDeviceGroupPeerMemoryFeatures, sizeof(uint32_t));
10378 stream->write(&packetSize_vkGetDeviceGroupPeerMemoryFeatures, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010379 uint64_t cgen_var_668;
10380 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_668, 1);
10381 stream->write((uint64_t*)&cgen_var_668, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010382 stream->write((uint32_t*)&local_heapIndex, sizeof(uint32_t));
10383 stream->write((uint32_t*)&local_localDeviceIndex, sizeof(uint32_t));
10384 stream->write((uint32_t*)&local_remoteDeviceIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010385 stream->write((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010386 AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeatures readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010387 stream->read((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010388 AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeatures returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010389 pool->freeAll();
10390 countingStream->clearPool();
10391 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010392 mImpl->log("finish vkGetDeviceGroupPeerMemoryFeatures");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010393}
10394
10395void VkEncoder::vkCmdSetDeviceMask(
10396 VkCommandBuffer commandBuffer,
10397 uint32_t deviceMask)
10398{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010399 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010400 AEMU_SCOPED_TRACE("vkCmdSetDeviceMask encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010401 mImpl->log("start vkCmdSetDeviceMask");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010402 auto stream = mImpl->stream();
10403 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010404 auto resources = mImpl->resources();
10405 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010406 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010407 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010408 uint32_t local_deviceMask;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010409 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010410 local_deviceMask = deviceMask;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010411 countingStream->rewind();
10412 {
David Reveman9875f2c2019-06-11 21:47:12 -040010413 uint64_t cgen_var_669;
10414 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_669, 1);
10415 countingStream->write((uint64_t*)&cgen_var_669, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010416 countingStream->write((uint32_t*)&local_deviceMask, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010417 }
10418 uint32_t packetSize_vkCmdSetDeviceMask = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10419 countingStream->rewind();
10420 uint32_t opcode_vkCmdSetDeviceMask = OP_vkCmdSetDeviceMask;
10421 stream->write(&opcode_vkCmdSetDeviceMask, sizeof(uint32_t));
10422 stream->write(&packetSize_vkCmdSetDeviceMask, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010423 uint64_t cgen_var_670;
10424 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_670, 1);
10425 stream->write((uint64_t*)&cgen_var_670, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010426 stream->write((uint32_t*)&local_deviceMask, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010427 AEMU_SCOPED_TRACE("vkCmdSetDeviceMask readParams");
10428 AEMU_SCOPED_TRACE("vkCmdSetDeviceMask returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010429 pool->freeAll();
10430 countingStream->clearPool();
10431 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010432 mImpl->log("finish vkCmdSetDeviceMask");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010433}
10434
10435void VkEncoder::vkCmdDispatchBase(
10436 VkCommandBuffer commandBuffer,
10437 uint32_t baseGroupX,
10438 uint32_t baseGroupY,
10439 uint32_t baseGroupZ,
10440 uint32_t groupCountX,
10441 uint32_t groupCountY,
10442 uint32_t groupCountZ)
10443{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010444 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010445 AEMU_SCOPED_TRACE("vkCmdDispatchBase encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010446 mImpl->log("start vkCmdDispatchBase");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010447 auto stream = mImpl->stream();
10448 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010449 auto resources = mImpl->resources();
10450 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010451 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010452 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010453 uint32_t local_baseGroupX;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010454 uint32_t local_baseGroupY;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010455 uint32_t local_baseGroupZ;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010456 uint32_t local_groupCountX;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010457 uint32_t local_groupCountY;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010458 uint32_t local_groupCountZ;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010459 local_commandBuffer = commandBuffer;
10460 local_baseGroupX = baseGroupX;
10461 local_baseGroupY = baseGroupY;
10462 local_baseGroupZ = baseGroupZ;
10463 local_groupCountX = groupCountX;
10464 local_groupCountY = groupCountY;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010465 local_groupCountZ = groupCountZ;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010466 countingStream->rewind();
10467 {
David Reveman9875f2c2019-06-11 21:47:12 -040010468 uint64_t cgen_var_671;
10469 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_671, 1);
10470 countingStream->write((uint64_t*)&cgen_var_671, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010471 countingStream->write((uint32_t*)&local_baseGroupX, sizeof(uint32_t));
10472 countingStream->write((uint32_t*)&local_baseGroupY, sizeof(uint32_t));
10473 countingStream->write((uint32_t*)&local_baseGroupZ, sizeof(uint32_t));
10474 countingStream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
10475 countingStream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
10476 countingStream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010477 }
10478 uint32_t packetSize_vkCmdDispatchBase = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10479 countingStream->rewind();
10480 uint32_t opcode_vkCmdDispatchBase = OP_vkCmdDispatchBase;
10481 stream->write(&opcode_vkCmdDispatchBase, sizeof(uint32_t));
10482 stream->write(&packetSize_vkCmdDispatchBase, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010483 uint64_t cgen_var_672;
10484 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_672, 1);
10485 stream->write((uint64_t*)&cgen_var_672, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010486 stream->write((uint32_t*)&local_baseGroupX, sizeof(uint32_t));
10487 stream->write((uint32_t*)&local_baseGroupY, sizeof(uint32_t));
10488 stream->write((uint32_t*)&local_baseGroupZ, sizeof(uint32_t));
10489 stream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
10490 stream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
10491 stream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010492 AEMU_SCOPED_TRACE("vkCmdDispatchBase readParams");
10493 AEMU_SCOPED_TRACE("vkCmdDispatchBase returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010494 pool->freeAll();
10495 countingStream->clearPool();
10496 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010497 mImpl->log("finish vkCmdDispatchBase");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010498}
10499
10500VkResult VkEncoder::vkEnumeratePhysicalDeviceGroups(
10501 VkInstance instance,
10502 uint32_t* pPhysicalDeviceGroupCount,
10503 VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
10504{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010505 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010506 AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroups encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010507 mImpl->log("start vkEnumeratePhysicalDeviceGroups");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010508 auto stream = mImpl->stream();
10509 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010510 auto resources = mImpl->resources();
10511 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010512 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010513 VkInstance local_instance;
10514 local_instance = instance;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010515 countingStream->rewind();
10516 {
David Reveman9875f2c2019-06-11 21:47:12 -040010517 uint64_t cgen_var_673;
10518 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_673, 1);
10519 countingStream->write((uint64_t*)&cgen_var_673, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010520 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040010521 uint64_t cgen_var_674 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupCount;
10522 countingStream->putBe64(cgen_var_674);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010523 if (pPhysicalDeviceGroupCount)
10524 {
10525 countingStream->write((uint32_t*)pPhysicalDeviceGroupCount, sizeof(uint32_t));
10526 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010527 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040010528 uint64_t cgen_var_675 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupProperties;
10529 countingStream->putBe64(cgen_var_675);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010530 if (pPhysicalDeviceGroupProperties)
10531 {
10532 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
10533 {
10534 marshal_VkPhysicalDeviceGroupProperties(countingStream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
10535 }
10536 }
10537 }
10538 uint32_t packetSize_vkEnumeratePhysicalDeviceGroups = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10539 countingStream->rewind();
10540 uint32_t opcode_vkEnumeratePhysicalDeviceGroups = OP_vkEnumeratePhysicalDeviceGroups;
10541 stream->write(&opcode_vkEnumeratePhysicalDeviceGroups, sizeof(uint32_t));
10542 stream->write(&packetSize_vkEnumeratePhysicalDeviceGroups, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010543 uint64_t cgen_var_676;
10544 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_676, 1);
10545 stream->write((uint64_t*)&cgen_var_676, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010546 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040010547 uint64_t cgen_var_677 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupCount;
10548 stream->putBe64(cgen_var_677);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010549 if (pPhysicalDeviceGroupCount)
10550 {
10551 stream->write((uint32_t*)pPhysicalDeviceGroupCount, sizeof(uint32_t));
10552 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010553 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040010554 uint64_t cgen_var_678 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupProperties;
10555 stream->putBe64(cgen_var_678);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010556 if (pPhysicalDeviceGroupProperties)
10557 {
10558 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
10559 {
10560 marshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
10561 }
10562 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010563 AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroups readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010564 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010565 uint32_t* check_pPhysicalDeviceGroupCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010566 check_pPhysicalDeviceGroupCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010567 if (pPhysicalDeviceGroupCount)
10568 {
10569 if (!(check_pPhysicalDeviceGroupCount))
10570 {
10571 fprintf(stderr, "fatal: pPhysicalDeviceGroupCount inconsistent between guest and host\n");
10572 }
10573 stream->read((uint32_t*)pPhysicalDeviceGroupCount, sizeof(uint32_t));
10574 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010575 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010576 VkPhysicalDeviceGroupProperties* check_pPhysicalDeviceGroupProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010577 check_pPhysicalDeviceGroupProperties = (VkPhysicalDeviceGroupProperties*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010578 if (pPhysicalDeviceGroupProperties)
10579 {
10580 if (!(check_pPhysicalDeviceGroupProperties))
10581 {
10582 fprintf(stderr, "fatal: pPhysicalDeviceGroupProperties inconsistent between guest and host\n");
10583 }
10584 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
10585 {
10586 unmarshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
10587 }
10588 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080010589 if (pPhysicalDeviceGroupProperties)
10590 {
10591 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
10592 {
10593 transform_fromhost_VkPhysicalDeviceGroupProperties(mImpl->resources(), (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
10594 }
10595 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010596 AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroups returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010597 VkResult vkEnumeratePhysicalDeviceGroups_VkResult_return = (VkResult)0;
10598 stream->read(&vkEnumeratePhysicalDeviceGroups_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070010599 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080010600 countingStream->clearPool();
10601 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010602 mImpl->log("finish vkEnumeratePhysicalDeviceGroups");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010603 return vkEnumeratePhysicalDeviceGroups_VkResult_return;
10604}
10605
10606void VkEncoder::vkGetImageMemoryRequirements2(
10607 VkDevice device,
10608 const VkImageMemoryRequirementsInfo2* pInfo,
10609 VkMemoryRequirements2* pMemoryRequirements)
10610{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010611 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010612 AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010613 mImpl->log("start vkGetImageMemoryRequirements2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010614 auto stream = mImpl->stream();
10615 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010616 auto resources = mImpl->resources();
10617 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010618 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010619 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010620 VkImageMemoryRequirementsInfo2* local_pInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010621 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010622 local_pInfo = nullptr;
10623 if (pInfo)
10624 {
10625 local_pInfo = (VkImageMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkImageMemoryRequirementsInfo2));
10626 deepcopy_VkImageMemoryRequirementsInfo2(pool, pInfo, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
10627 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080010628 if (local_pInfo)
10629 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080010630 transform_tohost_VkImageMemoryRequirementsInfo2(mImpl->resources(), (VkImageMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080010631 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010632 countingStream->rewind();
10633 {
David Reveman9875f2c2019-06-11 21:47:12 -040010634 uint64_t cgen_var_681;
10635 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_681, 1);
10636 countingStream->write((uint64_t*)&cgen_var_681, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010637 marshal_VkImageMemoryRequirementsInfo2(countingStream, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010638 marshal_VkMemoryRequirements2(countingStream, (VkMemoryRequirements2*)(pMemoryRequirements));
10639 }
10640 uint32_t packetSize_vkGetImageMemoryRequirements2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10641 countingStream->rewind();
10642 uint32_t opcode_vkGetImageMemoryRequirements2 = OP_vkGetImageMemoryRequirements2;
10643 stream->write(&opcode_vkGetImageMemoryRequirements2, sizeof(uint32_t));
10644 stream->write(&packetSize_vkGetImageMemoryRequirements2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010645 uint64_t cgen_var_682;
10646 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_682, 1);
10647 stream->write((uint64_t*)&cgen_var_682, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010648 marshal_VkImageMemoryRequirementsInfo2(stream, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010649 marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010650 AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2 readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010651 unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
Lingfeng Yang97a06702018-12-24 17:02:43 -080010652 if (pMemoryRequirements)
10653 {
10654 transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
10655 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010656 AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2 returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010657 pool->freeAll();
10658 countingStream->clearPool();
10659 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010660 mImpl->log("finish vkGetImageMemoryRequirements2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010661}
10662
10663void VkEncoder::vkGetBufferMemoryRequirements2(
10664 VkDevice device,
10665 const VkBufferMemoryRequirementsInfo2* pInfo,
10666 VkMemoryRequirements2* pMemoryRequirements)
10667{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010668 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010669 AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010670 mImpl->log("start vkGetBufferMemoryRequirements2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010671 auto stream = mImpl->stream();
10672 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010673 auto resources = mImpl->resources();
10674 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010675 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010676 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010677 VkBufferMemoryRequirementsInfo2* local_pInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010678 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010679 local_pInfo = nullptr;
10680 if (pInfo)
10681 {
10682 local_pInfo = (VkBufferMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkBufferMemoryRequirementsInfo2));
10683 deepcopy_VkBufferMemoryRequirementsInfo2(pool, pInfo, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
10684 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080010685 if (local_pInfo)
10686 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080010687 transform_tohost_VkBufferMemoryRequirementsInfo2(mImpl->resources(), (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080010688 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010689 countingStream->rewind();
10690 {
David Reveman9875f2c2019-06-11 21:47:12 -040010691 uint64_t cgen_var_683;
10692 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_683, 1);
10693 countingStream->write((uint64_t*)&cgen_var_683, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010694 marshal_VkBufferMemoryRequirementsInfo2(countingStream, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010695 marshal_VkMemoryRequirements2(countingStream, (VkMemoryRequirements2*)(pMemoryRequirements));
10696 }
10697 uint32_t packetSize_vkGetBufferMemoryRequirements2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10698 countingStream->rewind();
10699 uint32_t opcode_vkGetBufferMemoryRequirements2 = OP_vkGetBufferMemoryRequirements2;
10700 stream->write(&opcode_vkGetBufferMemoryRequirements2, sizeof(uint32_t));
10701 stream->write(&packetSize_vkGetBufferMemoryRequirements2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010702 uint64_t cgen_var_684;
10703 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_684, 1);
10704 stream->write((uint64_t*)&cgen_var_684, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010705 marshal_VkBufferMemoryRequirementsInfo2(stream, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010706 marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010707 AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2 readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010708 unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
Lingfeng Yang97a06702018-12-24 17:02:43 -080010709 if (pMemoryRequirements)
10710 {
10711 transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
10712 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010713 AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2 returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010714 pool->freeAll();
10715 countingStream->clearPool();
10716 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010717 mImpl->log("finish vkGetBufferMemoryRequirements2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010718}
10719
10720void VkEncoder::vkGetImageSparseMemoryRequirements2(
10721 VkDevice device,
10722 const VkImageSparseMemoryRequirementsInfo2* pInfo,
10723 uint32_t* pSparseMemoryRequirementCount,
10724 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
10725{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010726 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010727 AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010728 mImpl->log("start vkGetImageSparseMemoryRequirements2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010729 auto stream = mImpl->stream();
10730 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010731 auto resources = mImpl->resources();
10732 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010733 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010734 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010735 VkImageSparseMemoryRequirementsInfo2* local_pInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010736 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010737 local_pInfo = nullptr;
10738 if (pInfo)
10739 {
10740 local_pInfo = (VkImageSparseMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkImageSparseMemoryRequirementsInfo2));
10741 deepcopy_VkImageSparseMemoryRequirementsInfo2(pool, pInfo, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
10742 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080010743 if (local_pInfo)
10744 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080010745 transform_tohost_VkImageSparseMemoryRequirementsInfo2(mImpl->resources(), (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080010746 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010747 countingStream->rewind();
10748 {
David Reveman9875f2c2019-06-11 21:47:12 -040010749 uint64_t cgen_var_685;
10750 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_685, 1);
10751 countingStream->write((uint64_t*)&cgen_var_685, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010752 marshal_VkImageSparseMemoryRequirementsInfo2(countingStream, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010753 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040010754 uint64_t cgen_var_686 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
10755 countingStream->putBe64(cgen_var_686);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010756 if (pSparseMemoryRequirementCount)
10757 {
10758 countingStream->write((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
10759 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010760 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040010761 uint64_t cgen_var_687 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
10762 countingStream->putBe64(cgen_var_687);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010763 if (pSparseMemoryRequirements)
10764 {
10765 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
10766 {
10767 marshal_VkSparseImageMemoryRequirements2(countingStream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
10768 }
10769 }
10770 }
10771 uint32_t packetSize_vkGetImageSparseMemoryRequirements2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10772 countingStream->rewind();
10773 uint32_t opcode_vkGetImageSparseMemoryRequirements2 = OP_vkGetImageSparseMemoryRequirements2;
10774 stream->write(&opcode_vkGetImageSparseMemoryRequirements2, sizeof(uint32_t));
10775 stream->write(&packetSize_vkGetImageSparseMemoryRequirements2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010776 uint64_t cgen_var_688;
10777 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_688, 1);
10778 stream->write((uint64_t*)&cgen_var_688, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010779 marshal_VkImageSparseMemoryRequirementsInfo2(stream, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010780 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040010781 uint64_t cgen_var_689 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
10782 stream->putBe64(cgen_var_689);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010783 if (pSparseMemoryRequirementCount)
10784 {
10785 stream->write((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
10786 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010787 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040010788 uint64_t cgen_var_690 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
10789 stream->putBe64(cgen_var_690);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010790 if (pSparseMemoryRequirements)
10791 {
10792 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
10793 {
10794 marshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
10795 }
10796 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010797 AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2 readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010798 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010799 uint32_t* check_pSparseMemoryRequirementCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010800 check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010801 if (pSparseMemoryRequirementCount)
10802 {
10803 if (!(check_pSparseMemoryRequirementCount))
10804 {
10805 fprintf(stderr, "fatal: pSparseMemoryRequirementCount inconsistent between guest and host\n");
10806 }
10807 stream->read((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
10808 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010809 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010810 VkSparseImageMemoryRequirements2* check_pSparseMemoryRequirements;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080010811 check_pSparseMemoryRequirements = (VkSparseImageMemoryRequirements2*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010812 if (pSparseMemoryRequirements)
10813 {
10814 if (!(check_pSparseMemoryRequirements))
10815 {
10816 fprintf(stderr, "fatal: pSparseMemoryRequirements inconsistent between guest and host\n");
10817 }
10818 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
10819 {
10820 unmarshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
10821 }
10822 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080010823 if (pSparseMemoryRequirements)
10824 {
10825 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
10826 {
10827 transform_fromhost_VkSparseImageMemoryRequirements2(mImpl->resources(), (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
10828 }
10829 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010830 AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2 returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010831 pool->freeAll();
10832 countingStream->clearPool();
10833 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010834 mImpl->log("finish vkGetImageSparseMemoryRequirements2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010835}
10836
10837void VkEncoder::vkGetPhysicalDeviceFeatures2(
10838 VkPhysicalDevice physicalDevice,
10839 VkPhysicalDeviceFeatures2* pFeatures)
10840{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010841 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010842 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010843 mImpl->log("start vkGetPhysicalDeviceFeatures2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010844 auto stream = mImpl->stream();
10845 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010846 auto resources = mImpl->resources();
10847 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010848 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010849 VkPhysicalDevice local_physicalDevice;
10850 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010851 countingStream->rewind();
10852 {
David Reveman9875f2c2019-06-11 21:47:12 -040010853 uint64_t cgen_var_693;
10854 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_693, 1);
10855 countingStream->write((uint64_t*)&cgen_var_693, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010856 marshal_VkPhysicalDeviceFeatures2(countingStream, (VkPhysicalDeviceFeatures2*)(pFeatures));
10857 }
10858 uint32_t packetSize_vkGetPhysicalDeviceFeatures2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10859 countingStream->rewind();
10860 uint32_t opcode_vkGetPhysicalDeviceFeatures2 = OP_vkGetPhysicalDeviceFeatures2;
10861 stream->write(&opcode_vkGetPhysicalDeviceFeatures2, sizeof(uint32_t));
10862 stream->write(&packetSize_vkGetPhysicalDeviceFeatures2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010863 uint64_t cgen_var_694;
10864 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_694, 1);
10865 stream->write((uint64_t*)&cgen_var_694, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010866 marshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010867 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2 readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010868 unmarshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
Lingfeng Yang97a06702018-12-24 17:02:43 -080010869 if (pFeatures)
10870 {
10871 transform_fromhost_VkPhysicalDeviceFeatures2(mImpl->resources(), (VkPhysicalDeviceFeatures2*)(pFeatures));
10872 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010873 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2 returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010874 pool->freeAll();
10875 countingStream->clearPool();
10876 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010877 mImpl->log("finish vkGetPhysicalDeviceFeatures2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010878}
10879
10880void VkEncoder::vkGetPhysicalDeviceProperties2(
10881 VkPhysicalDevice physicalDevice,
10882 VkPhysicalDeviceProperties2* pProperties)
10883{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010884 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010885 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2 encode");
Lingfeng Yang154a33c2019-01-29 19:06:23 -080010886 mImpl->log("start vkGetPhysicalDeviceProperties2");
10887 auto stream = mImpl->stream();
10888 auto countingStream = mImpl->countingStream();
10889 auto resources = mImpl->resources();
10890 auto pool = mImpl->pool();
10891 stream->setHandleMapping(resources->unwrapMapping());
10892 VkPhysicalDevice local_physicalDevice;
10893 local_physicalDevice = physicalDevice;
10894 countingStream->rewind();
10895 {
David Reveman9875f2c2019-06-11 21:47:12 -040010896 uint64_t cgen_var_695;
10897 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_695, 1);
10898 countingStream->write((uint64_t*)&cgen_var_695, 1 * 8);
Lingfeng Yang154a33c2019-01-29 19:06:23 -080010899 marshal_VkPhysicalDeviceProperties2(countingStream, (VkPhysicalDeviceProperties2*)(pProperties));
10900 }
10901 uint32_t packetSize_vkGetPhysicalDeviceProperties2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10902 countingStream->rewind();
10903 uint32_t opcode_vkGetPhysicalDeviceProperties2 = OP_vkGetPhysicalDeviceProperties2;
10904 stream->write(&opcode_vkGetPhysicalDeviceProperties2, sizeof(uint32_t));
10905 stream->write(&packetSize_vkGetPhysicalDeviceProperties2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010906 uint64_t cgen_var_696;
10907 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_696, 1);
10908 stream->write((uint64_t*)&cgen_var_696, 1 * 8);
Lingfeng Yang154a33c2019-01-29 19:06:23 -080010909 marshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010910 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2 readParams");
Lingfeng Yang154a33c2019-01-29 19:06:23 -080010911 unmarshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
10912 if (pProperties)
10913 {
10914 transform_fromhost_VkPhysicalDeviceProperties2(mImpl->resources(), (VkPhysicalDeviceProperties2*)(pProperties));
10915 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010916 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2 returnUnmarshal");
Yilong Lif3369082020-06-25 03:39:24 -070010917 mImpl->resources()->on_vkGetPhysicalDeviceProperties2(this, physicalDevice, pProperties);
Lingfeng Yang256f9252020-07-14 14:27:33 -070010918 pool->freeAll();
10919 countingStream->clearPool();
10920 stream->clearPool();
Lingfeng Yang154a33c2019-01-29 19:06:23 -080010921 mImpl->log("finish vkGetPhysicalDeviceProperties2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010922}
10923
10924void VkEncoder::vkGetPhysicalDeviceFormatProperties2(
10925 VkPhysicalDevice physicalDevice,
10926 VkFormat format,
10927 VkFormatProperties2* pFormatProperties)
10928{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010929 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010930 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010931 mImpl->log("start vkGetPhysicalDeviceFormatProperties2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010932 auto stream = mImpl->stream();
10933 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010934 auto resources = mImpl->resources();
10935 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010936 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010937 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010938 VkFormat local_format;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010939 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010940 local_format = format;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010941 countingStream->rewind();
10942 {
David Reveman9875f2c2019-06-11 21:47:12 -040010943 uint64_t cgen_var_697;
10944 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_697, 1);
10945 countingStream->write((uint64_t*)&cgen_var_697, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010946 countingStream->write((VkFormat*)&local_format, sizeof(VkFormat));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010947 marshal_VkFormatProperties2(countingStream, (VkFormatProperties2*)(pFormatProperties));
10948 }
10949 uint32_t packetSize_vkGetPhysicalDeviceFormatProperties2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
10950 countingStream->rewind();
10951 uint32_t opcode_vkGetPhysicalDeviceFormatProperties2 = OP_vkGetPhysicalDeviceFormatProperties2;
10952 stream->write(&opcode_vkGetPhysicalDeviceFormatProperties2, sizeof(uint32_t));
10953 stream->write(&packetSize_vkGetPhysicalDeviceFormatProperties2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040010954 uint64_t cgen_var_698;
10955 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_698, 1);
10956 stream->write((uint64_t*)&cgen_var_698, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010957 stream->write((VkFormat*)&local_format, sizeof(VkFormat));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010958 marshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010959 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2 readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010960 unmarshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080010961 if (pFormatProperties)
10962 {
10963 transform_fromhost_VkFormatProperties2(mImpl->resources(), (VkFormatProperties2*)(pFormatProperties));
10964 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010965 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2 returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070010966 pool->freeAll();
10967 countingStream->clearPool();
10968 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010969 mImpl->log("finish vkGetPhysicalDeviceFormatProperties2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010970}
10971
10972VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2(
10973 VkPhysicalDevice physicalDevice,
10974 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
10975 VkImageFormatProperties2* pImageFormatProperties)
10976{
Lingfeng Yang256f9252020-07-14 14:27:33 -070010977 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080010978 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080010979 mImpl->log("start vkGetPhysicalDeviceImageFormatProperties2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010980 auto stream = mImpl->stream();
10981 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010982 auto resources = mImpl->resources();
10983 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080010984 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010985 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010986 VkPhysicalDeviceImageFormatInfo2* local_pImageFormatInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080010987 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080010988 local_pImageFormatInfo = nullptr;
10989 if (pImageFormatInfo)
10990 {
10991 local_pImageFormatInfo = (VkPhysicalDeviceImageFormatInfo2*)pool->alloc(sizeof(const VkPhysicalDeviceImageFormatInfo2));
10992 deepcopy_VkPhysicalDeviceImageFormatInfo2(pool, pImageFormatInfo, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
10993 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080010994 if (local_pImageFormatInfo)
10995 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080010996 transform_tohost_VkPhysicalDeviceImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080010997 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070010998 countingStream->rewind();
10999 {
David Reveman9875f2c2019-06-11 21:47:12 -040011000 uint64_t cgen_var_699;
11001 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_699, 1);
11002 countingStream->write((uint64_t*)&cgen_var_699, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011003 marshal_VkPhysicalDeviceImageFormatInfo2(countingStream, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011004 marshal_VkImageFormatProperties2(countingStream, (VkImageFormatProperties2*)(pImageFormatProperties));
11005 }
11006 uint32_t packetSize_vkGetPhysicalDeviceImageFormatProperties2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11007 countingStream->rewind();
11008 uint32_t opcode_vkGetPhysicalDeviceImageFormatProperties2 = OP_vkGetPhysicalDeviceImageFormatProperties2;
11009 stream->write(&opcode_vkGetPhysicalDeviceImageFormatProperties2, sizeof(uint32_t));
11010 stream->write(&packetSize_vkGetPhysicalDeviceImageFormatProperties2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011011 uint64_t cgen_var_700;
11012 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_700, 1);
11013 stream->write((uint64_t*)&cgen_var_700, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011014 marshal_VkPhysicalDeviceImageFormatInfo2(stream, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011015 marshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011016 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2 readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011017 unmarshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080011018 if (pImageFormatProperties)
11019 {
11020 transform_fromhost_VkImageFormatProperties2(mImpl->resources(), (VkImageFormatProperties2*)(pImageFormatProperties));
11021 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011022 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2 returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011023 VkResult vkGetPhysicalDeviceImageFormatProperties2_VkResult_return = (VkResult)0;
11024 stream->read(&vkGetPhysicalDeviceImageFormatProperties2_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070011025 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080011026 countingStream->clearPool();
11027 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011028 mImpl->log("finish vkGetPhysicalDeviceImageFormatProperties2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011029 return vkGetPhysicalDeviceImageFormatProperties2_VkResult_return;
11030}
11031
11032void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties2(
11033 VkPhysicalDevice physicalDevice,
11034 uint32_t* pQueueFamilyPropertyCount,
11035 VkQueueFamilyProperties2* pQueueFamilyProperties)
11036{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011037 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011038 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011039 mImpl->log("start vkGetPhysicalDeviceQueueFamilyProperties2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011040 auto stream = mImpl->stream();
11041 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011042 auto resources = mImpl->resources();
11043 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011044 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011045 VkPhysicalDevice local_physicalDevice;
11046 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011047 countingStream->rewind();
11048 {
David Reveman9875f2c2019-06-11 21:47:12 -040011049 uint64_t cgen_var_701;
11050 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_701, 1);
11051 countingStream->write((uint64_t*)&cgen_var_701, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011052 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011053 uint64_t cgen_var_702 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
11054 countingStream->putBe64(cgen_var_702);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011055 if (pQueueFamilyPropertyCount)
11056 {
11057 countingStream->write((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
11058 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011059 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011060 uint64_t cgen_var_703 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
11061 countingStream->putBe64(cgen_var_703);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011062 if (pQueueFamilyProperties)
11063 {
11064 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
11065 {
11066 marshal_VkQueueFamilyProperties2(countingStream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
11067 }
11068 }
11069 }
11070 uint32_t packetSize_vkGetPhysicalDeviceQueueFamilyProperties2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11071 countingStream->rewind();
11072 uint32_t opcode_vkGetPhysicalDeviceQueueFamilyProperties2 = OP_vkGetPhysicalDeviceQueueFamilyProperties2;
11073 stream->write(&opcode_vkGetPhysicalDeviceQueueFamilyProperties2, sizeof(uint32_t));
11074 stream->write(&packetSize_vkGetPhysicalDeviceQueueFamilyProperties2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011075 uint64_t cgen_var_704;
11076 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_704, 1);
11077 stream->write((uint64_t*)&cgen_var_704, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011078 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011079 uint64_t cgen_var_705 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
11080 stream->putBe64(cgen_var_705);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011081 if (pQueueFamilyPropertyCount)
11082 {
11083 stream->write((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
11084 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011085 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011086 uint64_t cgen_var_706 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
11087 stream->putBe64(cgen_var_706);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011088 if (pQueueFamilyProperties)
11089 {
11090 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
11091 {
11092 marshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
11093 }
11094 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011095 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2 readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011096 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011097 uint32_t* check_pQueueFamilyPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011098 check_pQueueFamilyPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011099 if (pQueueFamilyPropertyCount)
11100 {
11101 if (!(check_pQueueFamilyPropertyCount))
11102 {
11103 fprintf(stderr, "fatal: pQueueFamilyPropertyCount inconsistent between guest and host\n");
11104 }
11105 stream->read((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
11106 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011107 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011108 VkQueueFamilyProperties2* check_pQueueFamilyProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011109 check_pQueueFamilyProperties = (VkQueueFamilyProperties2*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011110 if (pQueueFamilyProperties)
11111 {
11112 if (!(check_pQueueFamilyProperties))
11113 {
11114 fprintf(stderr, "fatal: pQueueFamilyProperties inconsistent between guest and host\n");
11115 }
11116 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
11117 {
11118 unmarshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
11119 }
11120 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080011121 if (pQueueFamilyProperties)
11122 {
11123 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
11124 {
11125 transform_fromhost_VkQueueFamilyProperties2(mImpl->resources(), (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
11126 }
11127 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011128 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2 returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070011129 pool->freeAll();
11130 countingStream->clearPool();
11131 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011132 mImpl->log("finish vkGetPhysicalDeviceQueueFamilyProperties2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011133}
11134
11135void VkEncoder::vkGetPhysicalDeviceMemoryProperties2(
11136 VkPhysicalDevice physicalDevice,
11137 VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
11138{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011139 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011140 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011141 mImpl->log("start vkGetPhysicalDeviceMemoryProperties2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011142 auto stream = mImpl->stream();
11143 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011144 auto resources = mImpl->resources();
11145 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011146 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011147 VkPhysicalDevice local_physicalDevice;
11148 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011149 countingStream->rewind();
11150 {
David Reveman9875f2c2019-06-11 21:47:12 -040011151 uint64_t cgen_var_709;
11152 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_709, 1);
11153 countingStream->write((uint64_t*)&cgen_var_709, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011154 marshal_VkPhysicalDeviceMemoryProperties2(countingStream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
11155 }
11156 uint32_t packetSize_vkGetPhysicalDeviceMemoryProperties2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11157 countingStream->rewind();
11158 uint32_t opcode_vkGetPhysicalDeviceMemoryProperties2 = OP_vkGetPhysicalDeviceMemoryProperties2;
11159 stream->write(&opcode_vkGetPhysicalDeviceMemoryProperties2, sizeof(uint32_t));
11160 stream->write(&packetSize_vkGetPhysicalDeviceMemoryProperties2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011161 uint64_t cgen_var_710;
11162 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_710, 1);
11163 stream->write((uint64_t*)&cgen_var_710, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011164 marshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011165 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2 readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011166 unmarshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080011167 if (pMemoryProperties)
11168 {
11169 transform_fromhost_VkPhysicalDeviceMemoryProperties2(mImpl->resources(), (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
11170 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011171 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2 returnUnmarshal");
Lingfeng Yang154a33c2019-01-29 19:06:23 -080011172 mImpl->resources()->on_vkGetPhysicalDeviceMemoryProperties2(this, physicalDevice, pMemoryProperties);
Lingfeng Yang256f9252020-07-14 14:27:33 -070011173 pool->freeAll();
11174 countingStream->clearPool();
11175 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011176 mImpl->log("finish vkGetPhysicalDeviceMemoryProperties2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011177}
11178
11179void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2(
11180 VkPhysicalDevice physicalDevice,
11181 const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
11182 uint32_t* pPropertyCount,
11183 VkSparseImageFormatProperties2* pProperties)
11184{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011185 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011186 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011187 mImpl->log("start vkGetPhysicalDeviceSparseImageFormatProperties2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011188 auto stream = mImpl->stream();
11189 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011190 auto resources = mImpl->resources();
11191 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011192 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011193 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011194 VkPhysicalDeviceSparseImageFormatInfo2* local_pFormatInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011195 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011196 local_pFormatInfo = nullptr;
11197 if (pFormatInfo)
11198 {
11199 local_pFormatInfo = (VkPhysicalDeviceSparseImageFormatInfo2*)pool->alloc(sizeof(const VkPhysicalDeviceSparseImageFormatInfo2));
11200 deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(pool, pFormatInfo, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
11201 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080011202 if (local_pFormatInfo)
11203 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080011204 transform_tohost_VkPhysicalDeviceSparseImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080011205 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011206 countingStream->rewind();
11207 {
David Reveman9875f2c2019-06-11 21:47:12 -040011208 uint64_t cgen_var_711;
11209 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_711, 1);
11210 countingStream->write((uint64_t*)&cgen_var_711, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011211 marshal_VkPhysicalDeviceSparseImageFormatInfo2(countingStream, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011212 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011213 uint64_t cgen_var_712 = (uint64_t)(uintptr_t)pPropertyCount;
11214 countingStream->putBe64(cgen_var_712);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011215 if (pPropertyCount)
11216 {
11217 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
11218 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011219 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011220 uint64_t cgen_var_713 = (uint64_t)(uintptr_t)pProperties;
11221 countingStream->putBe64(cgen_var_713);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011222 if (pProperties)
11223 {
11224 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
11225 {
11226 marshal_VkSparseImageFormatProperties2(countingStream, (VkSparseImageFormatProperties2*)(pProperties + i));
11227 }
11228 }
11229 }
11230 uint32_t packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11231 countingStream->rewind();
11232 uint32_t opcode_vkGetPhysicalDeviceSparseImageFormatProperties2 = OP_vkGetPhysicalDeviceSparseImageFormatProperties2;
11233 stream->write(&opcode_vkGetPhysicalDeviceSparseImageFormatProperties2, sizeof(uint32_t));
11234 stream->write(&packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011235 uint64_t cgen_var_714;
11236 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_714, 1);
11237 stream->write((uint64_t*)&cgen_var_714, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011238 marshal_VkPhysicalDeviceSparseImageFormatInfo2(stream, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011239 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011240 uint64_t cgen_var_715 = (uint64_t)(uintptr_t)pPropertyCount;
11241 stream->putBe64(cgen_var_715);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011242 if (pPropertyCount)
11243 {
11244 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
11245 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011246 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011247 uint64_t cgen_var_716 = (uint64_t)(uintptr_t)pProperties;
11248 stream->putBe64(cgen_var_716);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011249 if (pProperties)
11250 {
11251 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
11252 {
11253 marshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i));
11254 }
11255 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011256 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2 readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011257 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011258 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011259 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011260 if (pPropertyCount)
11261 {
11262 if (!(check_pPropertyCount))
11263 {
11264 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
11265 }
11266 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
11267 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011268 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011269 VkSparseImageFormatProperties2* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011270 check_pProperties = (VkSparseImageFormatProperties2*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011271 if (pProperties)
11272 {
11273 if (!(check_pProperties))
11274 {
11275 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
11276 }
11277 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
11278 {
11279 unmarshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i));
11280 }
11281 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080011282 if (pProperties)
11283 {
11284 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
11285 {
11286 transform_fromhost_VkSparseImageFormatProperties2(mImpl->resources(), (VkSparseImageFormatProperties2*)(pProperties + i));
11287 }
11288 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011289 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2 returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070011290 pool->freeAll();
11291 countingStream->clearPool();
11292 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011293 mImpl->log("finish vkGetPhysicalDeviceSparseImageFormatProperties2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011294}
11295
11296void VkEncoder::vkTrimCommandPool(
11297 VkDevice device,
11298 VkCommandPool commandPool,
11299 VkCommandPoolTrimFlags flags)
11300{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011301 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011302 AEMU_SCOPED_TRACE("vkTrimCommandPool encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011303 mImpl->log("start vkTrimCommandPool");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011304 auto stream = mImpl->stream();
11305 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011306 auto resources = mImpl->resources();
11307 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011308 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011309 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011310 VkCommandPool local_commandPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011311 VkCommandPoolTrimFlags local_flags;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011312 local_device = device;
11313 local_commandPool = commandPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011314 local_flags = flags;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011315 countingStream->rewind();
11316 {
David Reveman9875f2c2019-06-11 21:47:12 -040011317 uint64_t cgen_var_719;
11318 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_719, 1);
11319 countingStream->write((uint64_t*)&cgen_var_719, 1 * 8);
11320 uint64_t cgen_var_720;
11321 countingStream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_720, 1);
11322 countingStream->write((uint64_t*)&cgen_var_720, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011323 countingStream->write((VkCommandPoolTrimFlags*)&local_flags, sizeof(VkCommandPoolTrimFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011324 }
11325 uint32_t packetSize_vkTrimCommandPool = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11326 countingStream->rewind();
11327 uint32_t opcode_vkTrimCommandPool = OP_vkTrimCommandPool;
11328 stream->write(&opcode_vkTrimCommandPool, sizeof(uint32_t));
11329 stream->write(&packetSize_vkTrimCommandPool, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011330 uint64_t cgen_var_721;
11331 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_721, 1);
11332 stream->write((uint64_t*)&cgen_var_721, 1 * 8);
11333 uint64_t cgen_var_722;
11334 stream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_722, 1);
11335 stream->write((uint64_t*)&cgen_var_722, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011336 stream->write((VkCommandPoolTrimFlags*)&local_flags, sizeof(VkCommandPoolTrimFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011337 AEMU_SCOPED_TRACE("vkTrimCommandPool readParams");
11338 AEMU_SCOPED_TRACE("vkTrimCommandPool returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070011339 pool->freeAll();
11340 countingStream->clearPool();
11341 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011342 mImpl->log("finish vkTrimCommandPool");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011343}
11344
11345void VkEncoder::vkGetDeviceQueue2(
11346 VkDevice device,
11347 const VkDeviceQueueInfo2* pQueueInfo,
11348 VkQueue* pQueue)
11349{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011350 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011351 AEMU_SCOPED_TRACE("vkGetDeviceQueue2 encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011352 mImpl->log("start vkGetDeviceQueue2");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011353 auto stream = mImpl->stream();
11354 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011355 auto resources = mImpl->resources();
11356 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011357 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011358 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011359 VkDeviceQueueInfo2* local_pQueueInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011360 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011361 local_pQueueInfo = nullptr;
11362 if (pQueueInfo)
11363 {
11364 local_pQueueInfo = (VkDeviceQueueInfo2*)pool->alloc(sizeof(const VkDeviceQueueInfo2));
11365 deepcopy_VkDeviceQueueInfo2(pool, pQueueInfo, (VkDeviceQueueInfo2*)(local_pQueueInfo));
11366 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080011367 if (local_pQueueInfo)
11368 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080011369 transform_tohost_VkDeviceQueueInfo2(mImpl->resources(), (VkDeviceQueueInfo2*)(local_pQueueInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080011370 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011371 countingStream->rewind();
11372 {
David Reveman9875f2c2019-06-11 21:47:12 -040011373 uint64_t cgen_var_723;
11374 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_723, 1);
11375 countingStream->write((uint64_t*)&cgen_var_723, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011376 marshal_VkDeviceQueueInfo2(countingStream, (VkDeviceQueueInfo2*)(local_pQueueInfo));
David Reveman9875f2c2019-06-11 21:47:12 -040011377 uint64_t cgen_var_724;
11378 countingStream->handleMapping()->mapHandles_VkQueue_u64(pQueue, &cgen_var_724, 1);
11379 countingStream->write((uint64_t*)&cgen_var_724, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011380 }
11381 uint32_t packetSize_vkGetDeviceQueue2 = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11382 countingStream->rewind();
11383 uint32_t opcode_vkGetDeviceQueue2 = OP_vkGetDeviceQueue2;
11384 stream->write(&opcode_vkGetDeviceQueue2, sizeof(uint32_t));
11385 stream->write(&packetSize_vkGetDeviceQueue2, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011386 uint64_t cgen_var_725;
11387 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_725, 1);
11388 stream->write((uint64_t*)&cgen_var_725, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011389 marshal_VkDeviceQueueInfo2(stream, (VkDeviceQueueInfo2*)(local_pQueueInfo));
Lingfeng Yange4008a02018-11-18 12:22:48 -080011390 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040011391 uint64_t cgen_var_726;
11392 stream->handleMapping()->mapHandles_VkQueue_u64(pQueue, &cgen_var_726, 1);
11393 stream->write((uint64_t*)&cgen_var_726, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080011394 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011395 AEMU_SCOPED_TRACE("vkGetDeviceQueue2 readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040011396 uint64_t cgen_var_727;
11397 stream->read((uint64_t*)&cgen_var_727, 8);
11398 stream->handleMapping()->mapHandles_u64_VkQueue(&cgen_var_727, (VkQueue*)pQueue, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011399 AEMU_SCOPED_TRACE("vkGetDeviceQueue2 returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070011400 pool->freeAll();
11401 countingStream->clearPool();
11402 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011403 mImpl->log("finish vkGetDeviceQueue2");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011404}
11405
11406VkResult VkEncoder::vkCreateSamplerYcbcrConversion(
11407 VkDevice device,
11408 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
11409 const VkAllocationCallbacks* pAllocator,
11410 VkSamplerYcbcrConversion* pYcbcrConversion)
11411{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011412 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011413 AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversion encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011414 mImpl->log("start vkCreateSamplerYcbcrConversion");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011415 auto stream = mImpl->stream();
11416 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011417 auto resources = mImpl->resources();
11418 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011419 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011420 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011421 VkSamplerYcbcrConversionCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011422 VkAllocationCallbacks* local_pAllocator;
11423 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011424 local_pCreateInfo = nullptr;
11425 if (pCreateInfo)
11426 {
11427 local_pCreateInfo = (VkSamplerYcbcrConversionCreateInfo*)pool->alloc(sizeof(const VkSamplerYcbcrConversionCreateInfo));
11428 deepcopy_VkSamplerYcbcrConversionCreateInfo(pool, pCreateInfo, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
11429 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011430 local_pAllocator = nullptr;
11431 if (pAllocator)
11432 {
11433 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
11434 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
11435 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080011436 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080011437 if (local_pCreateInfo)
11438 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080011439 transform_tohost_VkSamplerYcbcrConversionCreateInfo(mImpl->resources(), (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080011440 }
11441 if (local_pAllocator)
11442 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080011443 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080011444 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011445 countingStream->rewind();
11446 {
David Reveman9875f2c2019-06-11 21:47:12 -040011447 uint64_t cgen_var_728;
11448 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_728, 1);
11449 countingStream->write((uint64_t*)&cgen_var_728, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011450 marshal_VkSamplerYcbcrConversionCreateInfo(countingStream, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011451 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011452 uint64_t cgen_var_729 = (uint64_t)(uintptr_t)local_pAllocator;
11453 countingStream->putBe64(cgen_var_729);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011454 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011455 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011456 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011457 }
David Reveman9875f2c2019-06-11 21:47:12 -040011458 uint64_t cgen_var_730;
11459 countingStream->handleMapping()->mapHandles_VkSamplerYcbcrConversion_u64(pYcbcrConversion, &cgen_var_730, 1);
11460 countingStream->write((uint64_t*)&cgen_var_730, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011461 }
11462 uint32_t packetSize_vkCreateSamplerYcbcrConversion = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11463 countingStream->rewind();
11464 uint32_t opcode_vkCreateSamplerYcbcrConversion = OP_vkCreateSamplerYcbcrConversion;
11465 stream->write(&opcode_vkCreateSamplerYcbcrConversion, sizeof(uint32_t));
11466 stream->write(&packetSize_vkCreateSamplerYcbcrConversion, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011467 uint64_t cgen_var_731;
11468 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_731, 1);
11469 stream->write((uint64_t*)&cgen_var_731, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011470 marshal_VkSamplerYcbcrConversionCreateInfo(stream, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011471 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011472 uint64_t cgen_var_732 = (uint64_t)(uintptr_t)local_pAllocator;
11473 stream->putBe64(cgen_var_732);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011474 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011475 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011476 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011477 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080011478 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040011479 uint64_t cgen_var_733;
11480 stream->handleMapping()->mapHandles_VkSamplerYcbcrConversion_u64(pYcbcrConversion, &cgen_var_733, 1);
11481 stream->write((uint64_t*)&cgen_var_733, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080011482 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011483 AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversion readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -080011484 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -040011485 uint64_t cgen_var_734;
11486 stream->read((uint64_t*)&cgen_var_734, 8);
11487 stream->handleMapping()->mapHandles_u64_VkSamplerYcbcrConversion(&cgen_var_734, (VkSamplerYcbcrConversion*)pYcbcrConversion, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -080011488 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011489 AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversion returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011490 VkResult vkCreateSamplerYcbcrConversion_VkResult_return = (VkResult)0;
11491 stream->read(&vkCreateSamplerYcbcrConversion_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070011492 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080011493 countingStream->clearPool();
11494 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011495 mImpl->log("finish vkCreateSamplerYcbcrConversion");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011496 return vkCreateSamplerYcbcrConversion_VkResult_return;
11497}
11498
11499void VkEncoder::vkDestroySamplerYcbcrConversion(
11500 VkDevice device,
11501 VkSamplerYcbcrConversion ycbcrConversion,
11502 const VkAllocationCallbacks* pAllocator)
11503{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011504 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011505 AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversion encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011506 mImpl->log("start vkDestroySamplerYcbcrConversion");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011507 auto stream = mImpl->stream();
11508 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011509 auto resources = mImpl->resources();
11510 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011511 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011512 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -080011513 VkSamplerYcbcrConversion local_ycbcrConversion;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011514 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011515 local_device = device;
11516 local_ycbcrConversion = ycbcrConversion;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011517 local_pAllocator = nullptr;
11518 if (pAllocator)
11519 {
11520 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
11521 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
11522 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080011523 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080011524 if (local_pAllocator)
11525 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080011526 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080011527 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011528 countingStream->rewind();
11529 {
David Reveman9875f2c2019-06-11 21:47:12 -040011530 uint64_t cgen_var_735;
11531 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_735, 1);
11532 countingStream->write((uint64_t*)&cgen_var_735, 1 * 8);
11533 uint64_t cgen_var_736;
11534 countingStream->handleMapping()->mapHandles_VkSamplerYcbcrConversion_u64(&local_ycbcrConversion, &cgen_var_736, 1);
11535 countingStream->write((uint64_t*)&cgen_var_736, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011536 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011537 uint64_t cgen_var_737 = (uint64_t)(uintptr_t)local_pAllocator;
11538 countingStream->putBe64(cgen_var_737);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011539 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011540 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011541 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011542 }
11543 }
11544 uint32_t packetSize_vkDestroySamplerYcbcrConversion = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11545 countingStream->rewind();
11546 uint32_t opcode_vkDestroySamplerYcbcrConversion = OP_vkDestroySamplerYcbcrConversion;
11547 stream->write(&opcode_vkDestroySamplerYcbcrConversion, sizeof(uint32_t));
11548 stream->write(&packetSize_vkDestroySamplerYcbcrConversion, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011549 uint64_t cgen_var_738;
11550 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_738, 1);
11551 stream->write((uint64_t*)&cgen_var_738, 1 * 8);
11552 uint64_t cgen_var_739;
11553 stream->handleMapping()->mapHandles_VkSamplerYcbcrConversion_u64(&local_ycbcrConversion, &cgen_var_739, 1);
11554 stream->write((uint64_t*)&cgen_var_739, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011555 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011556 uint64_t cgen_var_740 = (uint64_t)(uintptr_t)local_pAllocator;
11557 stream->putBe64(cgen_var_740);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011558 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011559 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011560 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011561 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011562 AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversion readParams");
11563 AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversion returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011564 resources->destroyMapping()->mapHandles_VkSamplerYcbcrConversion((VkSamplerYcbcrConversion*)&ycbcrConversion);
Lingfeng Yang256f9252020-07-14 14:27:33 -070011565 pool->freeAll();
11566 countingStream->clearPool();
11567 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011568 mImpl->log("finish vkDestroySamplerYcbcrConversion");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011569}
11570
11571VkResult VkEncoder::vkCreateDescriptorUpdateTemplate(
11572 VkDevice device,
11573 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
11574 const VkAllocationCallbacks* pAllocator,
11575 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
11576{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011577 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011578 AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplate encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011579 mImpl->log("start vkCreateDescriptorUpdateTemplate");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011580 auto stream = mImpl->stream();
11581 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011582 auto resources = mImpl->resources();
11583 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011584 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011585 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011586 VkDescriptorUpdateTemplateCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011587 VkAllocationCallbacks* local_pAllocator;
11588 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011589 local_pCreateInfo = nullptr;
11590 if (pCreateInfo)
11591 {
11592 local_pCreateInfo = (VkDescriptorUpdateTemplateCreateInfo*)pool->alloc(sizeof(const VkDescriptorUpdateTemplateCreateInfo));
11593 deepcopy_VkDescriptorUpdateTemplateCreateInfo(pool, pCreateInfo, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
11594 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011595 local_pAllocator = nullptr;
11596 if (pAllocator)
11597 {
11598 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
11599 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
11600 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080011601 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080011602 if (local_pCreateInfo)
11603 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080011604 transform_tohost_VkDescriptorUpdateTemplateCreateInfo(mImpl->resources(), (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080011605 }
11606 if (local_pAllocator)
11607 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080011608 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080011609 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011610 countingStream->rewind();
11611 {
David Reveman9875f2c2019-06-11 21:47:12 -040011612 uint64_t cgen_var_741;
11613 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_741, 1);
11614 countingStream->write((uint64_t*)&cgen_var_741, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011615 marshal_VkDescriptorUpdateTemplateCreateInfo(countingStream, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011616 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011617 uint64_t cgen_var_742 = (uint64_t)(uintptr_t)local_pAllocator;
11618 countingStream->putBe64(cgen_var_742);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011619 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011620 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011621 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011622 }
David Reveman9875f2c2019-06-11 21:47:12 -040011623 uint64_t cgen_var_743;
11624 countingStream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(pDescriptorUpdateTemplate, &cgen_var_743, 1);
11625 countingStream->write((uint64_t*)&cgen_var_743, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011626 }
11627 uint32_t packetSize_vkCreateDescriptorUpdateTemplate = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11628 countingStream->rewind();
11629 uint32_t opcode_vkCreateDescriptorUpdateTemplate = OP_vkCreateDescriptorUpdateTemplate;
11630 stream->write(&opcode_vkCreateDescriptorUpdateTemplate, sizeof(uint32_t));
11631 stream->write(&packetSize_vkCreateDescriptorUpdateTemplate, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011632 uint64_t cgen_var_744;
11633 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_744, 1);
11634 stream->write((uint64_t*)&cgen_var_744, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011635 marshal_VkDescriptorUpdateTemplateCreateInfo(stream, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011636 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011637 uint64_t cgen_var_745 = (uint64_t)(uintptr_t)local_pAllocator;
11638 stream->putBe64(cgen_var_745);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011639 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011640 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011641 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011642 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080011643 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040011644 uint64_t cgen_var_746;
11645 stream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(pDescriptorUpdateTemplate, &cgen_var_746, 1);
11646 stream->write((uint64_t*)&cgen_var_746, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080011647 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011648 AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplate readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -080011649 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -040011650 uint64_t cgen_var_747;
11651 stream->read((uint64_t*)&cgen_var_747, 8);
11652 stream->handleMapping()->mapHandles_u64_VkDescriptorUpdateTemplate(&cgen_var_747, (VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -080011653 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011654 AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplate returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011655 VkResult vkCreateDescriptorUpdateTemplate_VkResult_return = (VkResult)0;
11656 stream->read(&vkCreateDescriptorUpdateTemplate_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070011657 mImpl->resources()->on_vkCreateDescriptorUpdateTemplate(this, vkCreateDescriptorUpdateTemplate_VkResult_return, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
11658 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080011659 countingStream->clearPool();
11660 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011661 mImpl->log("finish vkCreateDescriptorUpdateTemplate");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011662 return vkCreateDescriptorUpdateTemplate_VkResult_return;
11663}
11664
11665void VkEncoder::vkDestroyDescriptorUpdateTemplate(
11666 VkDevice device,
11667 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
11668 const VkAllocationCallbacks* pAllocator)
11669{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011670 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011671 AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplate encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011672 mImpl->log("start vkDestroyDescriptorUpdateTemplate");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011673 auto stream = mImpl->stream();
11674 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011675 auto resources = mImpl->resources();
11676 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011677 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011678 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -080011679 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011680 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011681 local_device = device;
11682 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011683 local_pAllocator = nullptr;
11684 if (pAllocator)
11685 {
11686 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
11687 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
11688 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080011689 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080011690 if (local_pAllocator)
11691 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080011692 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080011693 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011694 countingStream->rewind();
11695 {
David Reveman9875f2c2019-06-11 21:47:12 -040011696 uint64_t cgen_var_748;
11697 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_748, 1);
11698 countingStream->write((uint64_t*)&cgen_var_748, 1 * 8);
11699 uint64_t cgen_var_749;
11700 countingStream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_749, 1);
11701 countingStream->write((uint64_t*)&cgen_var_749, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011702 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011703 uint64_t cgen_var_750 = (uint64_t)(uintptr_t)local_pAllocator;
11704 countingStream->putBe64(cgen_var_750);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011705 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011706 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011707 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011708 }
11709 }
11710 uint32_t packetSize_vkDestroyDescriptorUpdateTemplate = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11711 countingStream->rewind();
11712 uint32_t opcode_vkDestroyDescriptorUpdateTemplate = OP_vkDestroyDescriptorUpdateTemplate;
11713 stream->write(&opcode_vkDestroyDescriptorUpdateTemplate, sizeof(uint32_t));
11714 stream->write(&packetSize_vkDestroyDescriptorUpdateTemplate, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011715 uint64_t cgen_var_751;
11716 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_751, 1);
11717 stream->write((uint64_t*)&cgen_var_751, 1 * 8);
11718 uint64_t cgen_var_752;
11719 stream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_752, 1);
11720 stream->write((uint64_t*)&cgen_var_752, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011721 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011722 uint64_t cgen_var_753 = (uint64_t)(uintptr_t)local_pAllocator;
11723 stream->putBe64(cgen_var_753);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011724 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011725 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011726 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011727 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011728 AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplate readParams");
11729 AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplate returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011730 resources->destroyMapping()->mapHandles_VkDescriptorUpdateTemplate((VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate);
Lingfeng Yang256f9252020-07-14 14:27:33 -070011731 pool->freeAll();
11732 countingStream->clearPool();
11733 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011734 mImpl->log("finish vkDestroyDescriptorUpdateTemplate");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011735}
11736
11737void VkEncoder::vkUpdateDescriptorSetWithTemplate(
11738 VkDevice device,
11739 VkDescriptorSet descriptorSet,
11740 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
11741 const void* pData)
11742{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011743 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011744 AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplate encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011745 mImpl->log("start vkUpdateDescriptorSetWithTemplate");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011746 auto stream = mImpl->stream();
11747 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011748 auto resources = mImpl->resources();
11749 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011750 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011751 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011752 VkDescriptorSet local_descriptorSet;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011753 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011754 void* local_pData;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011755 local_device = device;
11756 local_descriptorSet = descriptorSet;
11757 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011758 local_pData = nullptr;
11759 if (pData)
11760 {
11761 local_pData = (void*)pool->dupArray(pData, sizeof(const uint8_t));
11762 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011763 countingStream->rewind();
11764 {
David Reveman9875f2c2019-06-11 21:47:12 -040011765 uint64_t cgen_var_754;
11766 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_754, 1);
11767 countingStream->write((uint64_t*)&cgen_var_754, 1 * 8);
11768 uint64_t cgen_var_755;
11769 countingStream->handleMapping()->mapHandles_VkDescriptorSet_u64(&local_descriptorSet, &cgen_var_755, 1);
11770 countingStream->write((uint64_t*)&cgen_var_755, 1 * 8);
11771 uint64_t cgen_var_756;
11772 countingStream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_756, 1);
11773 countingStream->write((uint64_t*)&cgen_var_756, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011774 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011775 uint64_t cgen_var_757 = (uint64_t)(uintptr_t)local_pData;
11776 countingStream->putBe64(cgen_var_757);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011777 if (local_pData)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011778 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011779 countingStream->write((void*)local_pData, sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011780 }
11781 }
11782 uint32_t packetSize_vkUpdateDescriptorSetWithTemplate = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11783 countingStream->rewind();
11784 uint32_t opcode_vkUpdateDescriptorSetWithTemplate = OP_vkUpdateDescriptorSetWithTemplate;
11785 stream->write(&opcode_vkUpdateDescriptorSetWithTemplate, sizeof(uint32_t));
11786 stream->write(&packetSize_vkUpdateDescriptorSetWithTemplate, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011787 uint64_t cgen_var_758;
11788 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_758, 1);
11789 stream->write((uint64_t*)&cgen_var_758, 1 * 8);
11790 uint64_t cgen_var_759;
11791 stream->handleMapping()->mapHandles_VkDescriptorSet_u64(&local_descriptorSet, &cgen_var_759, 1);
11792 stream->write((uint64_t*)&cgen_var_759, 1 * 8);
11793 uint64_t cgen_var_760;
11794 stream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_760, 1);
11795 stream->write((uint64_t*)&cgen_var_760, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080011796 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040011797 uint64_t cgen_var_761 = (uint64_t)(uintptr_t)local_pData;
11798 stream->putBe64(cgen_var_761);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011799 if (local_pData)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011800 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011801 stream->write((void*)local_pData, sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011802 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011803 AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplate readParams");
11804 AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplate returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070011805 pool->freeAll();
11806 countingStream->clearPool();
11807 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011808 mImpl->log("finish vkUpdateDescriptorSetWithTemplate");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011809}
11810
11811void VkEncoder::vkGetPhysicalDeviceExternalBufferProperties(
11812 VkPhysicalDevice physicalDevice,
11813 const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
11814 VkExternalBufferProperties* pExternalBufferProperties)
11815{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011816 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011817 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011818 mImpl->log("start vkGetPhysicalDeviceExternalBufferProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011819 auto stream = mImpl->stream();
11820 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011821 auto resources = mImpl->resources();
11822 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011823 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011824 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011825 VkPhysicalDeviceExternalBufferInfo* local_pExternalBufferInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011826 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011827 local_pExternalBufferInfo = nullptr;
11828 if (pExternalBufferInfo)
11829 {
11830 local_pExternalBufferInfo = (VkPhysicalDeviceExternalBufferInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalBufferInfo));
11831 deepcopy_VkPhysicalDeviceExternalBufferInfo(pool, pExternalBufferInfo, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
11832 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080011833 if (local_pExternalBufferInfo)
11834 {
Lingfeng Yang2b1b8cf2019-02-08 09:53:36 -080011835 mImpl->resources()->transformImpl_VkPhysicalDeviceExternalBufferInfo_tohost(local_pExternalBufferInfo, 1);
Lingfeng Yang97a06702018-12-24 17:02:43 -080011836 transform_tohost_VkPhysicalDeviceExternalBufferInfo(mImpl->resources(), (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080011837 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011838 countingStream->rewind();
11839 {
David Reveman9875f2c2019-06-11 21:47:12 -040011840 uint64_t cgen_var_762;
11841 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_762, 1);
11842 countingStream->write((uint64_t*)&cgen_var_762, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011843 marshal_VkPhysicalDeviceExternalBufferInfo(countingStream, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011844 marshal_VkExternalBufferProperties(countingStream, (VkExternalBufferProperties*)(pExternalBufferProperties));
11845 }
11846 uint32_t packetSize_vkGetPhysicalDeviceExternalBufferProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11847 countingStream->rewind();
11848 uint32_t opcode_vkGetPhysicalDeviceExternalBufferProperties = OP_vkGetPhysicalDeviceExternalBufferProperties;
11849 stream->write(&opcode_vkGetPhysicalDeviceExternalBufferProperties, sizeof(uint32_t));
11850 stream->write(&packetSize_vkGetPhysicalDeviceExternalBufferProperties, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011851 uint64_t cgen_var_763;
11852 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_763, 1);
11853 stream->write((uint64_t*)&cgen_var_763, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011854 marshal_VkPhysicalDeviceExternalBufferInfo(stream, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011855 marshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011856 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferProperties readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011857 unmarshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080011858 if (pExternalBufferProperties)
11859 {
Lingfeng Yang2b1b8cf2019-02-08 09:53:36 -080011860 mImpl->resources()->transformImpl_VkExternalBufferProperties_fromhost(pExternalBufferProperties, 1);
Lingfeng Yang97a06702018-12-24 17:02:43 -080011861 transform_fromhost_VkExternalBufferProperties(mImpl->resources(), (VkExternalBufferProperties*)(pExternalBufferProperties));
11862 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011863 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferProperties returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070011864 pool->freeAll();
11865 countingStream->clearPool();
11866 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011867 mImpl->log("finish vkGetPhysicalDeviceExternalBufferProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011868}
11869
11870void VkEncoder::vkGetPhysicalDeviceExternalFenceProperties(
11871 VkPhysicalDevice physicalDevice,
11872 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
11873 VkExternalFenceProperties* pExternalFenceProperties)
11874{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011875 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011876 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFenceProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011877 mImpl->log("start vkGetPhysicalDeviceExternalFenceProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011878 auto stream = mImpl->stream();
11879 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011880 auto resources = mImpl->resources();
11881 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011882 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011883 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011884 VkPhysicalDeviceExternalFenceInfo* local_pExternalFenceInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011885 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011886 local_pExternalFenceInfo = nullptr;
11887 if (pExternalFenceInfo)
11888 {
11889 local_pExternalFenceInfo = (VkPhysicalDeviceExternalFenceInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalFenceInfo));
11890 deepcopy_VkPhysicalDeviceExternalFenceInfo(pool, pExternalFenceInfo, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
11891 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080011892 if (local_pExternalFenceInfo)
11893 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080011894 transform_tohost_VkPhysicalDeviceExternalFenceInfo(mImpl->resources(), (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080011895 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011896 countingStream->rewind();
11897 {
David Reveman9875f2c2019-06-11 21:47:12 -040011898 uint64_t cgen_var_764;
11899 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_764, 1);
11900 countingStream->write((uint64_t*)&cgen_var_764, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011901 marshal_VkPhysicalDeviceExternalFenceInfo(countingStream, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011902 marshal_VkExternalFenceProperties(countingStream, (VkExternalFenceProperties*)(pExternalFenceProperties));
11903 }
11904 uint32_t packetSize_vkGetPhysicalDeviceExternalFenceProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11905 countingStream->rewind();
11906 uint32_t opcode_vkGetPhysicalDeviceExternalFenceProperties = OP_vkGetPhysicalDeviceExternalFenceProperties;
11907 stream->write(&opcode_vkGetPhysicalDeviceExternalFenceProperties, sizeof(uint32_t));
11908 stream->write(&packetSize_vkGetPhysicalDeviceExternalFenceProperties, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011909 uint64_t cgen_var_765;
11910 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_765, 1);
11911 stream->write((uint64_t*)&cgen_var_765, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011912 marshal_VkPhysicalDeviceExternalFenceInfo(stream, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011913 marshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011914 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFenceProperties readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011915 unmarshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080011916 if (pExternalFenceProperties)
11917 {
11918 transform_fromhost_VkExternalFenceProperties(mImpl->resources(), (VkExternalFenceProperties*)(pExternalFenceProperties));
11919 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011920 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFenceProperties returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070011921 pool->freeAll();
11922 countingStream->clearPool();
11923 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011924 mImpl->log("finish vkGetPhysicalDeviceExternalFenceProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011925}
11926
11927void VkEncoder::vkGetPhysicalDeviceExternalSemaphoreProperties(
11928 VkPhysicalDevice physicalDevice,
11929 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
11930 VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
11931{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011932 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011933 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphoreProperties encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011934 mImpl->log("start vkGetPhysicalDeviceExternalSemaphoreProperties");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011935 auto stream = mImpl->stream();
11936 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011937 auto resources = mImpl->resources();
11938 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011939 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011940 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011941 VkPhysicalDeviceExternalSemaphoreInfo* local_pExternalSemaphoreInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011942 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011943 local_pExternalSemaphoreInfo = nullptr;
11944 if (pExternalSemaphoreInfo)
11945 {
11946 local_pExternalSemaphoreInfo = (VkPhysicalDeviceExternalSemaphoreInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalSemaphoreInfo));
11947 deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(pool, pExternalSemaphoreInfo, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
11948 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080011949 if (local_pExternalSemaphoreInfo)
11950 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080011951 transform_tohost_VkPhysicalDeviceExternalSemaphoreInfo(mImpl->resources(), (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080011952 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011953 countingStream->rewind();
11954 {
David Reveman9875f2c2019-06-11 21:47:12 -040011955 uint64_t cgen_var_766;
11956 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_766, 1);
11957 countingStream->write((uint64_t*)&cgen_var_766, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011958 marshal_VkPhysicalDeviceExternalSemaphoreInfo(countingStream, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011959 marshal_VkExternalSemaphoreProperties(countingStream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
11960 }
11961 uint32_t packetSize_vkGetPhysicalDeviceExternalSemaphoreProperties = 4 + 4 + (uint32_t)countingStream->bytesWritten();
11962 countingStream->rewind();
11963 uint32_t opcode_vkGetPhysicalDeviceExternalSemaphoreProperties = OP_vkGetPhysicalDeviceExternalSemaphoreProperties;
11964 stream->write(&opcode_vkGetPhysicalDeviceExternalSemaphoreProperties, sizeof(uint32_t));
11965 stream->write(&packetSize_vkGetPhysicalDeviceExternalSemaphoreProperties, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040011966 uint64_t cgen_var_767;
11967 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_767, 1);
11968 stream->write((uint64_t*)&cgen_var_767, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011969 marshal_VkPhysicalDeviceExternalSemaphoreInfo(stream, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011970 marshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011971 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphoreProperties readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011972 unmarshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080011973 if (pExternalSemaphoreProperties)
11974 {
11975 transform_fromhost_VkExternalSemaphoreProperties(mImpl->resources(), (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
11976 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011977 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphoreProperties returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070011978 pool->freeAll();
11979 countingStream->clearPool();
11980 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011981 mImpl->log("finish vkGetPhysicalDeviceExternalSemaphoreProperties");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011982}
11983
11984void VkEncoder::vkGetDescriptorSetLayoutSupport(
11985 VkDevice device,
11986 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
11987 VkDescriptorSetLayoutSupport* pSupport)
11988{
Lingfeng Yang256f9252020-07-14 14:27:33 -070011989 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080011990 AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupport encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080011991 mImpl->log("start vkGetDescriptorSetLayoutSupport");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070011992 auto stream = mImpl->stream();
11993 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011994 auto resources = mImpl->resources();
11995 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080011996 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011997 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080011998 VkDescriptorSetLayoutCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080011999 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012000 local_pCreateInfo = nullptr;
12001 if (pCreateInfo)
12002 {
12003 local_pCreateInfo = (VkDescriptorSetLayoutCreateInfo*)pool->alloc(sizeof(const VkDescriptorSetLayoutCreateInfo));
12004 deepcopy_VkDescriptorSetLayoutCreateInfo(pool, pCreateInfo, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
12005 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080012006 if (local_pCreateInfo)
12007 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080012008 transform_tohost_VkDescriptorSetLayoutCreateInfo(mImpl->resources(), (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080012009 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012010 countingStream->rewind();
12011 {
David Reveman9875f2c2019-06-11 21:47:12 -040012012 uint64_t cgen_var_768;
12013 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_768, 1);
12014 countingStream->write((uint64_t*)&cgen_var_768, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012015 marshal_VkDescriptorSetLayoutCreateInfo(countingStream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012016 marshal_VkDescriptorSetLayoutSupport(countingStream, (VkDescriptorSetLayoutSupport*)(pSupport));
12017 }
12018 uint32_t packetSize_vkGetDescriptorSetLayoutSupport = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12019 countingStream->rewind();
12020 uint32_t opcode_vkGetDescriptorSetLayoutSupport = OP_vkGetDescriptorSetLayoutSupport;
12021 stream->write(&opcode_vkGetDescriptorSetLayoutSupport, sizeof(uint32_t));
12022 stream->write(&packetSize_vkGetDescriptorSetLayoutSupport, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012023 uint64_t cgen_var_769;
12024 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_769, 1);
12025 stream->write((uint64_t*)&cgen_var_769, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012026 marshal_VkDescriptorSetLayoutCreateInfo(stream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012027 marshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012028 AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupport readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012029 unmarshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
Lingfeng Yang97a06702018-12-24 17:02:43 -080012030 if (pSupport)
12031 {
12032 transform_fromhost_VkDescriptorSetLayoutSupport(mImpl->resources(), (VkDescriptorSetLayoutSupport*)(pSupport));
12033 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012034 AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupport returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070012035 pool->freeAll();
12036 countingStream->clearPool();
12037 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012038 mImpl->log("finish vkGetDescriptorSetLayoutSupport");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012039}
12040
12041#endif
12042#ifdef VK_KHR_surface
12043void VkEncoder::vkDestroySurfaceKHR(
12044 VkInstance instance,
12045 VkSurfaceKHR surface,
12046 const VkAllocationCallbacks* pAllocator)
12047{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012048 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012049 AEMU_SCOPED_TRACE("vkDestroySurfaceKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012050 mImpl->log("start vkDestroySurfaceKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012051 auto stream = mImpl->stream();
12052 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012053 auto resources = mImpl->resources();
12054 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012055 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012056 VkInstance local_instance;
Lingfeng Yang9d02e102018-11-10 01:51:46 -080012057 VkSurfaceKHR local_surface;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012058 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012059 local_instance = instance;
12060 local_surface = surface;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012061 local_pAllocator = nullptr;
12062 if (pAllocator)
12063 {
12064 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
12065 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
12066 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080012067 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080012068 if (local_pAllocator)
12069 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080012070 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080012071 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012072 countingStream->rewind();
12073 {
David Reveman9875f2c2019-06-11 21:47:12 -040012074 uint64_t cgen_var_770;
12075 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_770, 1);
12076 countingStream->write((uint64_t*)&cgen_var_770, 1 * 8);
12077 uint64_t cgen_var_771;
12078 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_771, 1);
12079 countingStream->write((uint64_t*)&cgen_var_771, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012080 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012081 uint64_t cgen_var_772 = (uint64_t)(uintptr_t)local_pAllocator;
12082 countingStream->putBe64(cgen_var_772);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012083 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012084 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012085 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012086 }
12087 }
12088 uint32_t packetSize_vkDestroySurfaceKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12089 countingStream->rewind();
12090 uint32_t opcode_vkDestroySurfaceKHR = OP_vkDestroySurfaceKHR;
12091 stream->write(&opcode_vkDestroySurfaceKHR, sizeof(uint32_t));
12092 stream->write(&packetSize_vkDestroySurfaceKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012093 uint64_t cgen_var_773;
12094 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_773, 1);
12095 stream->write((uint64_t*)&cgen_var_773, 1 * 8);
12096 uint64_t cgen_var_774;
12097 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_774, 1);
12098 stream->write((uint64_t*)&cgen_var_774, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012099 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012100 uint64_t cgen_var_775 = (uint64_t)(uintptr_t)local_pAllocator;
12101 stream->putBe64(cgen_var_775);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012102 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012103 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012104 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012105 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012106 AEMU_SCOPED_TRACE("vkDestroySurfaceKHR readParams");
12107 AEMU_SCOPED_TRACE("vkDestroySurfaceKHR returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012108 resources->destroyMapping()->mapHandles_VkSurfaceKHR((VkSurfaceKHR*)&surface);
Lingfeng Yang256f9252020-07-14 14:27:33 -070012109 pool->freeAll();
12110 countingStream->clearPool();
12111 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012112 mImpl->log("finish vkDestroySurfaceKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012113}
12114
12115VkResult VkEncoder::vkGetPhysicalDeviceSurfaceSupportKHR(
12116 VkPhysicalDevice physicalDevice,
12117 uint32_t queueFamilyIndex,
12118 VkSurfaceKHR surface,
12119 VkBool32* pSupported)
12120{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012121 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012122 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceSupportKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012123 mImpl->log("start vkGetPhysicalDeviceSurfaceSupportKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012124 auto stream = mImpl->stream();
12125 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012126 auto resources = mImpl->resources();
12127 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012128 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012129 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012130 uint32_t local_queueFamilyIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012131 VkSurfaceKHR local_surface;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012132 local_physicalDevice = physicalDevice;
12133 local_queueFamilyIndex = queueFamilyIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012134 local_surface = surface;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012135 countingStream->rewind();
12136 {
David Reveman9875f2c2019-06-11 21:47:12 -040012137 uint64_t cgen_var_776;
12138 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_776, 1);
12139 countingStream->write((uint64_t*)&cgen_var_776, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012140 countingStream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012141 uint64_t cgen_var_777;
12142 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_777, 1);
12143 countingStream->write((uint64_t*)&cgen_var_777, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012144 countingStream->write((VkBool32*)pSupported, sizeof(VkBool32));
12145 }
12146 uint32_t packetSize_vkGetPhysicalDeviceSurfaceSupportKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12147 countingStream->rewind();
12148 uint32_t opcode_vkGetPhysicalDeviceSurfaceSupportKHR = OP_vkGetPhysicalDeviceSurfaceSupportKHR;
12149 stream->write(&opcode_vkGetPhysicalDeviceSurfaceSupportKHR, sizeof(uint32_t));
12150 stream->write(&packetSize_vkGetPhysicalDeviceSurfaceSupportKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012151 uint64_t cgen_var_778;
12152 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_778, 1);
12153 stream->write((uint64_t*)&cgen_var_778, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012154 stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012155 uint64_t cgen_var_779;
12156 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_779, 1);
12157 stream->write((uint64_t*)&cgen_var_779, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012158 stream->write((VkBool32*)pSupported, sizeof(VkBool32));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012159 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceSupportKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012160 stream->read((VkBool32*)pSupported, sizeof(VkBool32));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012161 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceSupportKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012162 VkResult vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return = (VkResult)0;
12163 stream->read(&vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070012164 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080012165 countingStream->clearPool();
12166 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012167 mImpl->log("finish vkGetPhysicalDeviceSurfaceSupportKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012168 return vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return;
12169}
12170
12171VkResult VkEncoder::vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
12172 VkPhysicalDevice physicalDevice,
12173 VkSurfaceKHR surface,
12174 VkSurfaceCapabilitiesKHR* pSurfaceCapabilities)
12175{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012176 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012177 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilitiesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012178 mImpl->log("start vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012179 auto stream = mImpl->stream();
12180 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012181 auto resources = mImpl->resources();
12182 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012183 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012184 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012185 VkSurfaceKHR local_surface;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012186 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012187 local_surface = surface;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012188 countingStream->rewind();
12189 {
David Reveman9875f2c2019-06-11 21:47:12 -040012190 uint64_t cgen_var_780;
12191 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_780, 1);
12192 countingStream->write((uint64_t*)&cgen_var_780, 1 * 8);
12193 uint64_t cgen_var_781;
12194 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_781, 1);
12195 countingStream->write((uint64_t*)&cgen_var_781, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012196 marshal_VkSurfaceCapabilitiesKHR(countingStream, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
12197 }
12198 uint32_t packetSize_vkGetPhysicalDeviceSurfaceCapabilitiesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12199 countingStream->rewind();
12200 uint32_t opcode_vkGetPhysicalDeviceSurfaceCapabilitiesKHR = OP_vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
12201 stream->write(&opcode_vkGetPhysicalDeviceSurfaceCapabilitiesKHR, sizeof(uint32_t));
12202 stream->write(&packetSize_vkGetPhysicalDeviceSurfaceCapabilitiesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012203 uint64_t cgen_var_782;
12204 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_782, 1);
12205 stream->write((uint64_t*)&cgen_var_782, 1 * 8);
12206 uint64_t cgen_var_783;
12207 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_783, 1);
12208 stream->write((uint64_t*)&cgen_var_783, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012209 marshal_VkSurfaceCapabilitiesKHR(stream, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012210 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilitiesKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012211 unmarshal_VkSurfaceCapabilitiesKHR(stream, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
Lingfeng Yang97a06702018-12-24 17:02:43 -080012212 if (pSurfaceCapabilities)
12213 {
12214 transform_fromhost_VkSurfaceCapabilitiesKHR(mImpl->resources(), (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
12215 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012216 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilitiesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012217 VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return = (VkResult)0;
12218 stream->read(&vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070012219 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080012220 countingStream->clearPool();
12221 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012222 mImpl->log("finish vkGetPhysicalDeviceSurfaceCapabilitiesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012223 return vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return;
12224}
12225
12226VkResult VkEncoder::vkGetPhysicalDeviceSurfaceFormatsKHR(
12227 VkPhysicalDevice physicalDevice,
12228 VkSurfaceKHR surface,
12229 uint32_t* pSurfaceFormatCount,
12230 VkSurfaceFormatKHR* pSurfaceFormats)
12231{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012232 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012233 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormatsKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012234 mImpl->log("start vkGetPhysicalDeviceSurfaceFormatsKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012235 auto stream = mImpl->stream();
12236 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012237 auto resources = mImpl->resources();
12238 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012239 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012240 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012241 VkSurfaceKHR local_surface;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012242 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012243 local_surface = surface;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012244 countingStream->rewind();
12245 {
David Reveman9875f2c2019-06-11 21:47:12 -040012246 uint64_t cgen_var_784;
12247 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_784, 1);
12248 countingStream->write((uint64_t*)&cgen_var_784, 1 * 8);
12249 uint64_t cgen_var_785;
12250 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_785, 1);
12251 countingStream->write((uint64_t*)&cgen_var_785, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012252 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012253 uint64_t cgen_var_786 = (uint64_t)(uintptr_t)pSurfaceFormatCount;
12254 countingStream->putBe64(cgen_var_786);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012255 if (pSurfaceFormatCount)
12256 {
12257 countingStream->write((uint32_t*)pSurfaceFormatCount, sizeof(uint32_t));
12258 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012259 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012260 uint64_t cgen_var_787 = (uint64_t)(uintptr_t)pSurfaceFormats;
12261 countingStream->putBe64(cgen_var_787);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012262 if (pSurfaceFormats)
12263 {
12264 for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
12265 {
12266 marshal_VkSurfaceFormatKHR(countingStream, (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
12267 }
12268 }
12269 }
12270 uint32_t packetSize_vkGetPhysicalDeviceSurfaceFormatsKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12271 countingStream->rewind();
12272 uint32_t opcode_vkGetPhysicalDeviceSurfaceFormatsKHR = OP_vkGetPhysicalDeviceSurfaceFormatsKHR;
12273 stream->write(&opcode_vkGetPhysicalDeviceSurfaceFormatsKHR, sizeof(uint32_t));
12274 stream->write(&packetSize_vkGetPhysicalDeviceSurfaceFormatsKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012275 uint64_t cgen_var_788;
12276 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_788, 1);
12277 stream->write((uint64_t*)&cgen_var_788, 1 * 8);
12278 uint64_t cgen_var_789;
12279 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_789, 1);
12280 stream->write((uint64_t*)&cgen_var_789, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012281 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012282 uint64_t cgen_var_790 = (uint64_t)(uintptr_t)pSurfaceFormatCount;
12283 stream->putBe64(cgen_var_790);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012284 if (pSurfaceFormatCount)
12285 {
12286 stream->write((uint32_t*)pSurfaceFormatCount, sizeof(uint32_t));
12287 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012288 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012289 uint64_t cgen_var_791 = (uint64_t)(uintptr_t)pSurfaceFormats;
12290 stream->putBe64(cgen_var_791);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012291 if (pSurfaceFormats)
12292 {
12293 for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
12294 {
12295 marshal_VkSurfaceFormatKHR(stream, (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
12296 }
12297 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012298 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormatsKHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012299 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012300 uint32_t* check_pSurfaceFormatCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012301 check_pSurfaceFormatCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012302 if (pSurfaceFormatCount)
12303 {
12304 if (!(check_pSurfaceFormatCount))
12305 {
12306 fprintf(stderr, "fatal: pSurfaceFormatCount inconsistent between guest and host\n");
12307 }
12308 stream->read((uint32_t*)pSurfaceFormatCount, sizeof(uint32_t));
12309 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012310 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012311 VkSurfaceFormatKHR* check_pSurfaceFormats;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012312 check_pSurfaceFormats = (VkSurfaceFormatKHR*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012313 if (pSurfaceFormats)
12314 {
12315 if (!(check_pSurfaceFormats))
12316 {
12317 fprintf(stderr, "fatal: pSurfaceFormats inconsistent between guest and host\n");
12318 }
12319 for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
12320 {
12321 unmarshal_VkSurfaceFormatKHR(stream, (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
12322 }
12323 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080012324 if (pSurfaceFormats)
12325 {
12326 for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
12327 {
12328 transform_fromhost_VkSurfaceFormatKHR(mImpl->resources(), (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
12329 }
12330 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012331 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormatsKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012332 VkResult vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return = (VkResult)0;
12333 stream->read(&vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070012334 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080012335 countingStream->clearPool();
12336 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012337 mImpl->log("finish vkGetPhysicalDeviceSurfaceFormatsKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012338 return vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return;
12339}
12340
12341VkResult VkEncoder::vkGetPhysicalDeviceSurfacePresentModesKHR(
12342 VkPhysicalDevice physicalDevice,
12343 VkSurfaceKHR surface,
12344 uint32_t* pPresentModeCount,
12345 VkPresentModeKHR* pPresentModes)
12346{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012347 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012348 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfacePresentModesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012349 mImpl->log("start vkGetPhysicalDeviceSurfacePresentModesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012350 auto stream = mImpl->stream();
12351 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012352 auto resources = mImpl->resources();
12353 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012354 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012355 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012356 VkSurfaceKHR local_surface;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012357 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012358 local_surface = surface;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012359 countingStream->rewind();
12360 {
David Reveman9875f2c2019-06-11 21:47:12 -040012361 uint64_t cgen_var_794;
12362 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_794, 1);
12363 countingStream->write((uint64_t*)&cgen_var_794, 1 * 8);
12364 uint64_t cgen_var_795;
12365 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_795, 1);
12366 countingStream->write((uint64_t*)&cgen_var_795, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012367 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012368 uint64_t cgen_var_796 = (uint64_t)(uintptr_t)pPresentModeCount;
12369 countingStream->putBe64(cgen_var_796);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012370 if (pPresentModeCount)
12371 {
12372 countingStream->write((uint32_t*)pPresentModeCount, sizeof(uint32_t));
12373 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012374 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012375 uint64_t cgen_var_797 = (uint64_t)(uintptr_t)pPresentModes;
12376 countingStream->putBe64(cgen_var_797);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012377 if (pPresentModes)
12378 {
12379 countingStream->write((VkPresentModeKHR*)pPresentModes, (*(pPresentModeCount)) * sizeof(VkPresentModeKHR));
12380 }
12381 }
12382 uint32_t packetSize_vkGetPhysicalDeviceSurfacePresentModesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12383 countingStream->rewind();
12384 uint32_t opcode_vkGetPhysicalDeviceSurfacePresentModesKHR = OP_vkGetPhysicalDeviceSurfacePresentModesKHR;
12385 stream->write(&opcode_vkGetPhysicalDeviceSurfacePresentModesKHR, sizeof(uint32_t));
12386 stream->write(&packetSize_vkGetPhysicalDeviceSurfacePresentModesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012387 uint64_t cgen_var_798;
12388 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_798, 1);
12389 stream->write((uint64_t*)&cgen_var_798, 1 * 8);
12390 uint64_t cgen_var_799;
12391 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_799, 1);
12392 stream->write((uint64_t*)&cgen_var_799, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012393 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012394 uint64_t cgen_var_800 = (uint64_t)(uintptr_t)pPresentModeCount;
12395 stream->putBe64(cgen_var_800);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012396 if (pPresentModeCount)
12397 {
12398 stream->write((uint32_t*)pPresentModeCount, sizeof(uint32_t));
12399 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012400 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012401 uint64_t cgen_var_801 = (uint64_t)(uintptr_t)pPresentModes;
12402 stream->putBe64(cgen_var_801);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012403 if (pPresentModes)
12404 {
12405 stream->write((VkPresentModeKHR*)pPresentModes, (*(pPresentModeCount)) * sizeof(VkPresentModeKHR));
12406 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012407 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfacePresentModesKHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012408 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012409 uint32_t* check_pPresentModeCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012410 check_pPresentModeCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012411 if (pPresentModeCount)
12412 {
12413 if (!(check_pPresentModeCount))
12414 {
12415 fprintf(stderr, "fatal: pPresentModeCount inconsistent between guest and host\n");
12416 }
12417 stream->read((uint32_t*)pPresentModeCount, sizeof(uint32_t));
12418 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012419 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012420 VkPresentModeKHR* check_pPresentModes;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012421 check_pPresentModes = (VkPresentModeKHR*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012422 if (pPresentModes)
12423 {
12424 if (!(check_pPresentModes))
12425 {
12426 fprintf(stderr, "fatal: pPresentModes inconsistent between guest and host\n");
12427 }
12428 stream->read((VkPresentModeKHR*)pPresentModes, (*(pPresentModeCount)) * sizeof(VkPresentModeKHR));
12429 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012430 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfacePresentModesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012431 VkResult vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return = (VkResult)0;
12432 stream->read(&vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070012433 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080012434 countingStream->clearPool();
12435 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012436 mImpl->log("finish vkGetPhysicalDeviceSurfacePresentModesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012437 return vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return;
12438}
12439
12440#endif
12441#ifdef VK_KHR_swapchain
12442VkResult VkEncoder::vkCreateSwapchainKHR(
12443 VkDevice device,
12444 const VkSwapchainCreateInfoKHR* pCreateInfo,
12445 const VkAllocationCallbacks* pAllocator,
12446 VkSwapchainKHR* pSwapchain)
12447{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012448 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012449 AEMU_SCOPED_TRACE("vkCreateSwapchainKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012450 mImpl->log("start vkCreateSwapchainKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012451 auto stream = mImpl->stream();
12452 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012453 auto resources = mImpl->resources();
12454 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012455 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012456 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012457 VkSwapchainCreateInfoKHR* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012458 VkAllocationCallbacks* local_pAllocator;
12459 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012460 local_pCreateInfo = nullptr;
12461 if (pCreateInfo)
12462 {
12463 local_pCreateInfo = (VkSwapchainCreateInfoKHR*)pool->alloc(sizeof(const VkSwapchainCreateInfoKHR));
12464 deepcopy_VkSwapchainCreateInfoKHR(pool, pCreateInfo, (VkSwapchainCreateInfoKHR*)(local_pCreateInfo));
12465 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012466 local_pAllocator = nullptr;
12467 if (pAllocator)
12468 {
12469 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
12470 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
12471 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080012472 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080012473 if (local_pCreateInfo)
12474 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080012475 transform_tohost_VkSwapchainCreateInfoKHR(mImpl->resources(), (VkSwapchainCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080012476 }
12477 if (local_pAllocator)
12478 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080012479 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080012480 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012481 countingStream->rewind();
12482 {
David Reveman9875f2c2019-06-11 21:47:12 -040012483 uint64_t cgen_var_804;
12484 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_804, 1);
12485 countingStream->write((uint64_t*)&cgen_var_804, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012486 marshal_VkSwapchainCreateInfoKHR(countingStream, (VkSwapchainCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012487 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012488 uint64_t cgen_var_805 = (uint64_t)(uintptr_t)local_pAllocator;
12489 countingStream->putBe64(cgen_var_805);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012490 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012491 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012492 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012493 }
David Reveman9875f2c2019-06-11 21:47:12 -040012494 uint64_t cgen_var_806;
12495 countingStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(pSwapchain, &cgen_var_806, 1);
12496 countingStream->write((uint64_t*)&cgen_var_806, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012497 }
12498 uint32_t packetSize_vkCreateSwapchainKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12499 countingStream->rewind();
12500 uint32_t opcode_vkCreateSwapchainKHR = OP_vkCreateSwapchainKHR;
12501 stream->write(&opcode_vkCreateSwapchainKHR, sizeof(uint32_t));
12502 stream->write(&packetSize_vkCreateSwapchainKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012503 uint64_t cgen_var_807;
12504 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_807, 1);
12505 stream->write((uint64_t*)&cgen_var_807, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012506 marshal_VkSwapchainCreateInfoKHR(stream, (VkSwapchainCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012507 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012508 uint64_t cgen_var_808 = (uint64_t)(uintptr_t)local_pAllocator;
12509 stream->putBe64(cgen_var_808);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012510 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012511 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012512 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012513 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080012514 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040012515 uint64_t cgen_var_809;
12516 stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(pSwapchain, &cgen_var_809, 1);
12517 stream->write((uint64_t*)&cgen_var_809, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080012518 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012519 AEMU_SCOPED_TRACE("vkCreateSwapchainKHR readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -080012520 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -040012521 uint64_t cgen_var_810;
12522 stream->read((uint64_t*)&cgen_var_810, 8);
12523 stream->handleMapping()->mapHandles_u64_VkSwapchainKHR(&cgen_var_810, (VkSwapchainKHR*)pSwapchain, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -080012524 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012525 AEMU_SCOPED_TRACE("vkCreateSwapchainKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012526 VkResult vkCreateSwapchainKHR_VkResult_return = (VkResult)0;
12527 stream->read(&vkCreateSwapchainKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070012528 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080012529 countingStream->clearPool();
12530 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012531 mImpl->log("finish vkCreateSwapchainKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012532 return vkCreateSwapchainKHR_VkResult_return;
12533}
12534
12535void VkEncoder::vkDestroySwapchainKHR(
12536 VkDevice device,
12537 VkSwapchainKHR swapchain,
12538 const VkAllocationCallbacks* pAllocator)
12539{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012540 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012541 AEMU_SCOPED_TRACE("vkDestroySwapchainKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012542 mImpl->log("start vkDestroySwapchainKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012543 auto stream = mImpl->stream();
12544 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012545 auto resources = mImpl->resources();
12546 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012547 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012548 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -080012549 VkSwapchainKHR local_swapchain;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012550 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012551 local_device = device;
12552 local_swapchain = swapchain;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012553 local_pAllocator = nullptr;
12554 if (pAllocator)
12555 {
12556 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
12557 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
12558 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080012559 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080012560 if (local_pAllocator)
12561 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080012562 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080012563 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012564 countingStream->rewind();
12565 {
David Reveman9875f2c2019-06-11 21:47:12 -040012566 uint64_t cgen_var_811;
12567 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_811, 1);
12568 countingStream->write((uint64_t*)&cgen_var_811, 1 * 8);
12569 uint64_t cgen_var_812;
12570 countingStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_812, 1);
12571 countingStream->write((uint64_t*)&cgen_var_812, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012572 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012573 uint64_t cgen_var_813 = (uint64_t)(uintptr_t)local_pAllocator;
12574 countingStream->putBe64(cgen_var_813);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012575 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012576 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012577 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012578 }
12579 }
12580 uint32_t packetSize_vkDestroySwapchainKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12581 countingStream->rewind();
12582 uint32_t opcode_vkDestroySwapchainKHR = OP_vkDestroySwapchainKHR;
12583 stream->write(&opcode_vkDestroySwapchainKHR, sizeof(uint32_t));
12584 stream->write(&packetSize_vkDestroySwapchainKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012585 uint64_t cgen_var_814;
12586 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_814, 1);
12587 stream->write((uint64_t*)&cgen_var_814, 1 * 8);
12588 uint64_t cgen_var_815;
12589 stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_815, 1);
12590 stream->write((uint64_t*)&cgen_var_815, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012591 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012592 uint64_t cgen_var_816 = (uint64_t)(uintptr_t)local_pAllocator;
12593 stream->putBe64(cgen_var_816);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012594 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012595 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012596 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012597 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012598 AEMU_SCOPED_TRACE("vkDestroySwapchainKHR readParams");
12599 AEMU_SCOPED_TRACE("vkDestroySwapchainKHR returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012600 resources->destroyMapping()->mapHandles_VkSwapchainKHR((VkSwapchainKHR*)&swapchain);
Lingfeng Yang256f9252020-07-14 14:27:33 -070012601 pool->freeAll();
12602 countingStream->clearPool();
12603 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012604 mImpl->log("finish vkDestroySwapchainKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012605}
12606
12607VkResult VkEncoder::vkGetSwapchainImagesKHR(
12608 VkDevice device,
12609 VkSwapchainKHR swapchain,
12610 uint32_t* pSwapchainImageCount,
12611 VkImage* pSwapchainImages)
12612{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012613 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012614 AEMU_SCOPED_TRACE("vkGetSwapchainImagesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012615 mImpl->log("start vkGetSwapchainImagesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012616 auto stream = mImpl->stream();
12617 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012618 auto resources = mImpl->resources();
12619 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012620 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012621 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012622 VkSwapchainKHR local_swapchain;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012623 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012624 local_swapchain = swapchain;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012625 countingStream->rewind();
12626 {
David Reveman9875f2c2019-06-11 21:47:12 -040012627 uint64_t cgen_var_817;
12628 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_817, 1);
12629 countingStream->write((uint64_t*)&cgen_var_817, 1 * 8);
12630 uint64_t cgen_var_818;
12631 countingStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_818, 1);
12632 countingStream->write((uint64_t*)&cgen_var_818, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012633 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012634 uint64_t cgen_var_819 = (uint64_t)(uintptr_t)pSwapchainImageCount;
12635 countingStream->putBe64(cgen_var_819);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012636 if (pSwapchainImageCount)
12637 {
12638 countingStream->write((uint32_t*)pSwapchainImageCount, sizeof(uint32_t));
12639 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012640 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012641 uint64_t cgen_var_820 = (uint64_t)(uintptr_t)pSwapchainImages;
12642 countingStream->putBe64(cgen_var_820);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012643 if (pSwapchainImages)
12644 {
Lingfeng Yang2285df12018-11-17 16:25:11 -080012645 if ((*(pSwapchainImageCount)))
12646 {
David Reveman9875f2c2019-06-11 21:47:12 -040012647 uint64_t* cgen_var_821;
12648 countingStream->alloc((void**)&cgen_var_821, (*(pSwapchainImageCount)) * 8);
12649 countingStream->handleMapping()->mapHandles_VkImage_u64(pSwapchainImages, cgen_var_821, (*(pSwapchainImageCount)));
12650 countingStream->write((uint64_t*)cgen_var_821, (*(pSwapchainImageCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080012651 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012652 }
12653 }
12654 uint32_t packetSize_vkGetSwapchainImagesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12655 countingStream->rewind();
12656 uint32_t opcode_vkGetSwapchainImagesKHR = OP_vkGetSwapchainImagesKHR;
12657 stream->write(&opcode_vkGetSwapchainImagesKHR, sizeof(uint32_t));
12658 stream->write(&packetSize_vkGetSwapchainImagesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012659 uint64_t cgen_var_822;
12660 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_822, 1);
12661 stream->write((uint64_t*)&cgen_var_822, 1 * 8);
12662 uint64_t cgen_var_823;
12663 stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_823, 1);
12664 stream->write((uint64_t*)&cgen_var_823, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012665 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012666 uint64_t cgen_var_824 = (uint64_t)(uintptr_t)pSwapchainImageCount;
12667 stream->putBe64(cgen_var_824);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012668 if (pSwapchainImageCount)
12669 {
12670 stream->write((uint32_t*)pSwapchainImageCount, sizeof(uint32_t));
12671 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080012672 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012673 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012674 uint64_t cgen_var_825 = (uint64_t)(uintptr_t)pSwapchainImages;
12675 stream->putBe64(cgen_var_825);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012676 if (pSwapchainImages)
12677 {
Lingfeng Yang2285df12018-11-17 16:25:11 -080012678 if ((*(pSwapchainImageCount)))
12679 {
David Reveman9875f2c2019-06-11 21:47:12 -040012680 uint64_t* cgen_var_826;
12681 stream->alloc((void**)&cgen_var_826, (*(pSwapchainImageCount)) * 8);
12682 stream->handleMapping()->mapHandles_VkImage_u64(pSwapchainImages, cgen_var_826, (*(pSwapchainImageCount)));
12683 stream->write((uint64_t*)cgen_var_826, (*(pSwapchainImageCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080012684 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012685 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080012686 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012687 AEMU_SCOPED_TRACE("vkGetSwapchainImagesKHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012688 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012689 uint32_t* check_pSwapchainImageCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012690 check_pSwapchainImageCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012691 if (pSwapchainImageCount)
12692 {
12693 if (!(check_pSwapchainImageCount))
12694 {
12695 fprintf(stderr, "fatal: pSwapchainImageCount inconsistent between guest and host\n");
12696 }
12697 stream->read((uint32_t*)pSwapchainImageCount, sizeof(uint32_t));
12698 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012699 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012700 VkImage* check_pSwapchainImages;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012701 check_pSwapchainImages = (VkImage*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012702 if (pSwapchainImages)
12703 {
12704 if (!(check_pSwapchainImages))
12705 {
12706 fprintf(stderr, "fatal: pSwapchainImages inconsistent between guest and host\n");
12707 }
Lingfeng Yang2285df12018-11-17 16:25:11 -080012708 if ((*(pSwapchainImageCount)))
12709 {
David Reveman9875f2c2019-06-11 21:47:12 -040012710 uint64_t* cgen_var_829;
12711 stream->alloc((void**)&cgen_var_829, (*(pSwapchainImageCount)) * 8);
12712 stream->read((uint64_t*)cgen_var_829, (*(pSwapchainImageCount)) * 8);
12713 stream->handleMapping()->mapHandles_u64_VkImage(cgen_var_829, (VkImage*)pSwapchainImages, (*(pSwapchainImageCount)));
Lingfeng Yang2285df12018-11-17 16:25:11 -080012714 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012715 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012716 AEMU_SCOPED_TRACE("vkGetSwapchainImagesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012717 VkResult vkGetSwapchainImagesKHR_VkResult_return = (VkResult)0;
12718 stream->read(&vkGetSwapchainImagesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070012719 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080012720 countingStream->clearPool();
12721 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012722 mImpl->log("finish vkGetSwapchainImagesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012723 return vkGetSwapchainImagesKHR_VkResult_return;
12724}
12725
12726VkResult VkEncoder::vkAcquireNextImageKHR(
12727 VkDevice device,
12728 VkSwapchainKHR swapchain,
12729 uint64_t timeout,
12730 VkSemaphore semaphore,
12731 VkFence fence,
12732 uint32_t* pImageIndex)
12733{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012734 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012735 AEMU_SCOPED_TRACE("vkAcquireNextImageKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012736 mImpl->log("start vkAcquireNextImageKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012737 auto stream = mImpl->stream();
12738 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012739 auto resources = mImpl->resources();
12740 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012741 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012742 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012743 VkSwapchainKHR local_swapchain;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012744 uint64_t local_timeout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012745 VkSemaphore local_semaphore;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012746 VkFence local_fence;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012747 local_device = device;
12748 local_swapchain = swapchain;
12749 local_timeout = timeout;
12750 local_semaphore = semaphore;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012751 local_fence = fence;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012752 countingStream->rewind();
12753 {
David Reveman9875f2c2019-06-11 21:47:12 -040012754 uint64_t cgen_var_830;
12755 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_830, 1);
12756 countingStream->write((uint64_t*)&cgen_var_830, 1 * 8);
12757 uint64_t cgen_var_831;
12758 countingStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_831, 1);
12759 countingStream->write((uint64_t*)&cgen_var_831, 1 * 8);
Lingfeng Yangfddc0de2018-11-27 22:26:51 -080012760 countingStream->write((uint64_t*)&local_timeout, sizeof(uint64_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012761 uint64_t cgen_var_832;
12762 countingStream->handleMapping()->mapHandles_VkSemaphore_u64(&local_semaphore, &cgen_var_832, 1);
12763 countingStream->write((uint64_t*)&cgen_var_832, 1 * 8);
12764 uint64_t cgen_var_833;
12765 countingStream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_833, 1);
12766 countingStream->write((uint64_t*)&cgen_var_833, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012767 countingStream->write((uint32_t*)pImageIndex, sizeof(uint32_t));
12768 }
12769 uint32_t packetSize_vkAcquireNextImageKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12770 countingStream->rewind();
12771 uint32_t opcode_vkAcquireNextImageKHR = OP_vkAcquireNextImageKHR;
12772 stream->write(&opcode_vkAcquireNextImageKHR, sizeof(uint32_t));
12773 stream->write(&packetSize_vkAcquireNextImageKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012774 uint64_t cgen_var_834;
12775 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_834, 1);
12776 stream->write((uint64_t*)&cgen_var_834, 1 * 8);
12777 uint64_t cgen_var_835;
12778 stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_835, 1);
12779 stream->write((uint64_t*)&cgen_var_835, 1 * 8);
Lingfeng Yangfddc0de2018-11-27 22:26:51 -080012780 stream->write((uint64_t*)&local_timeout, sizeof(uint64_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012781 uint64_t cgen_var_836;
12782 stream->handleMapping()->mapHandles_VkSemaphore_u64(&local_semaphore, &cgen_var_836, 1);
12783 stream->write((uint64_t*)&cgen_var_836, 1 * 8);
12784 uint64_t cgen_var_837;
12785 stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_837, 1);
12786 stream->write((uint64_t*)&cgen_var_837, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012787 stream->write((uint32_t*)pImageIndex, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012788 AEMU_SCOPED_TRACE("vkAcquireNextImageKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012789 stream->read((uint32_t*)pImageIndex, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012790 AEMU_SCOPED_TRACE("vkAcquireNextImageKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012791 VkResult vkAcquireNextImageKHR_VkResult_return = (VkResult)0;
12792 stream->read(&vkAcquireNextImageKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070012793 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080012794 countingStream->clearPool();
12795 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012796 mImpl->log("finish vkAcquireNextImageKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012797 return vkAcquireNextImageKHR_VkResult_return;
12798}
12799
12800VkResult VkEncoder::vkQueuePresentKHR(
12801 VkQueue queue,
12802 const VkPresentInfoKHR* pPresentInfo)
12803{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012804 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012805 AEMU_SCOPED_TRACE("vkQueuePresentKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012806 mImpl->log("start vkQueuePresentKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012807 auto stream = mImpl->stream();
12808 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012809 auto resources = mImpl->resources();
12810 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012811 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012812 VkQueue local_queue;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012813 VkPresentInfoKHR* local_pPresentInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012814 local_queue = queue;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012815 local_pPresentInfo = nullptr;
12816 if (pPresentInfo)
12817 {
12818 local_pPresentInfo = (VkPresentInfoKHR*)pool->alloc(sizeof(const VkPresentInfoKHR));
12819 deepcopy_VkPresentInfoKHR(pool, pPresentInfo, (VkPresentInfoKHR*)(local_pPresentInfo));
12820 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080012821 if (local_pPresentInfo)
12822 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080012823 transform_tohost_VkPresentInfoKHR(mImpl->resources(), (VkPresentInfoKHR*)(local_pPresentInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080012824 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012825 countingStream->rewind();
12826 {
David Reveman9875f2c2019-06-11 21:47:12 -040012827 uint64_t cgen_var_838;
12828 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_838, 1);
12829 countingStream->write((uint64_t*)&cgen_var_838, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012830 marshal_VkPresentInfoKHR(countingStream, (VkPresentInfoKHR*)(local_pPresentInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012831 }
12832 uint32_t packetSize_vkQueuePresentKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12833 countingStream->rewind();
12834 uint32_t opcode_vkQueuePresentKHR = OP_vkQueuePresentKHR;
12835 stream->write(&opcode_vkQueuePresentKHR, sizeof(uint32_t));
12836 stream->write(&packetSize_vkQueuePresentKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012837 uint64_t cgen_var_839;
12838 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_839, 1);
12839 stream->write((uint64_t*)&cgen_var_839, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012840 marshal_VkPresentInfoKHR(stream, (VkPresentInfoKHR*)(local_pPresentInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012841 AEMU_SCOPED_TRACE("vkQueuePresentKHR readParams");
12842 AEMU_SCOPED_TRACE("vkQueuePresentKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012843 VkResult vkQueuePresentKHR_VkResult_return = (VkResult)0;
12844 stream->read(&vkQueuePresentKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070012845 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080012846 countingStream->clearPool();
12847 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012848 mImpl->log("finish vkQueuePresentKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012849 return vkQueuePresentKHR_VkResult_return;
12850}
12851
12852VkResult VkEncoder::vkGetDeviceGroupPresentCapabilitiesKHR(
12853 VkDevice device,
12854 VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities)
12855{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012856 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012857 AEMU_SCOPED_TRACE("vkGetDeviceGroupPresentCapabilitiesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012858 mImpl->log("start vkGetDeviceGroupPresentCapabilitiesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012859 auto stream = mImpl->stream();
12860 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012861 auto resources = mImpl->resources();
12862 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012863 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012864 VkDevice local_device;
12865 local_device = device;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012866 countingStream->rewind();
12867 {
David Reveman9875f2c2019-06-11 21:47:12 -040012868 uint64_t cgen_var_840;
12869 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_840, 1);
12870 countingStream->write((uint64_t*)&cgen_var_840, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012871 marshal_VkDeviceGroupPresentCapabilitiesKHR(countingStream, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
12872 }
12873 uint32_t packetSize_vkGetDeviceGroupPresentCapabilitiesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12874 countingStream->rewind();
12875 uint32_t opcode_vkGetDeviceGroupPresentCapabilitiesKHR = OP_vkGetDeviceGroupPresentCapabilitiesKHR;
12876 stream->write(&opcode_vkGetDeviceGroupPresentCapabilitiesKHR, sizeof(uint32_t));
12877 stream->write(&packetSize_vkGetDeviceGroupPresentCapabilitiesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012878 uint64_t cgen_var_841;
12879 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_841, 1);
12880 stream->write((uint64_t*)&cgen_var_841, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012881 marshal_VkDeviceGroupPresentCapabilitiesKHR(stream, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012882 AEMU_SCOPED_TRACE("vkGetDeviceGroupPresentCapabilitiesKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012883 unmarshal_VkDeviceGroupPresentCapabilitiesKHR(stream, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
Lingfeng Yang97a06702018-12-24 17:02:43 -080012884 if (pDeviceGroupPresentCapabilities)
12885 {
12886 transform_fromhost_VkDeviceGroupPresentCapabilitiesKHR(mImpl->resources(), (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
12887 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012888 AEMU_SCOPED_TRACE("vkGetDeviceGroupPresentCapabilitiesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012889 VkResult vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return = (VkResult)0;
12890 stream->read(&vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070012891 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080012892 countingStream->clearPool();
12893 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012894 mImpl->log("finish vkGetDeviceGroupPresentCapabilitiesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012895 return vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return;
12896}
12897
12898VkResult VkEncoder::vkGetDeviceGroupSurfacePresentModesKHR(
12899 VkDevice device,
12900 VkSurfaceKHR surface,
12901 VkDeviceGroupPresentModeFlagsKHR* pModes)
12902{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012903 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012904 AEMU_SCOPED_TRACE("vkGetDeviceGroupSurfacePresentModesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012905 mImpl->log("start vkGetDeviceGroupSurfacePresentModesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012906 auto stream = mImpl->stream();
12907 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012908 auto resources = mImpl->resources();
12909 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012910 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012911 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012912 VkSurfaceKHR local_surface;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012913 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012914 local_surface = surface;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012915 countingStream->rewind();
12916 {
David Reveman9875f2c2019-06-11 21:47:12 -040012917 uint64_t cgen_var_842;
12918 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_842, 1);
12919 countingStream->write((uint64_t*)&cgen_var_842, 1 * 8);
12920 uint64_t cgen_var_843;
12921 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_843, 1);
12922 countingStream->write((uint64_t*)&cgen_var_843, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012923 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012924 uint64_t cgen_var_844 = (uint64_t)(uintptr_t)pModes;
12925 countingStream->putBe64(cgen_var_844);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012926 if (pModes)
12927 {
12928 countingStream->write((VkDeviceGroupPresentModeFlagsKHR*)pModes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
12929 }
12930 }
12931 uint32_t packetSize_vkGetDeviceGroupSurfacePresentModesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
12932 countingStream->rewind();
12933 uint32_t opcode_vkGetDeviceGroupSurfacePresentModesKHR = OP_vkGetDeviceGroupSurfacePresentModesKHR;
12934 stream->write(&opcode_vkGetDeviceGroupSurfacePresentModesKHR, sizeof(uint32_t));
12935 stream->write(&packetSize_vkGetDeviceGroupSurfacePresentModesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040012936 uint64_t cgen_var_845;
12937 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_845, 1);
12938 stream->write((uint64_t*)&cgen_var_845, 1 * 8);
12939 uint64_t cgen_var_846;
12940 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_846, 1);
12941 stream->write((uint64_t*)&cgen_var_846, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012942 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012943 uint64_t cgen_var_847 = (uint64_t)(uintptr_t)pModes;
12944 stream->putBe64(cgen_var_847);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012945 if (pModes)
12946 {
12947 stream->write((VkDeviceGroupPresentModeFlagsKHR*)pModes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
12948 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012949 AEMU_SCOPED_TRACE("vkGetDeviceGroupSurfacePresentModesKHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012950 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012951 VkDeviceGroupPresentModeFlagsKHR* check_pModes;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012952 check_pModes = (VkDeviceGroupPresentModeFlagsKHR*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012953 if (pModes)
12954 {
12955 if (!(check_pModes))
12956 {
12957 fprintf(stderr, "fatal: pModes inconsistent between guest and host\n");
12958 }
12959 stream->read((VkDeviceGroupPresentModeFlagsKHR*)pModes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
12960 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012961 AEMU_SCOPED_TRACE("vkGetDeviceGroupSurfacePresentModesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012962 VkResult vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return = (VkResult)0;
12963 stream->read(&vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070012964 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080012965 countingStream->clearPool();
12966 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012967 mImpl->log("finish vkGetDeviceGroupSurfacePresentModesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012968 return vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return;
12969}
12970
12971VkResult VkEncoder::vkGetPhysicalDevicePresentRectanglesKHR(
12972 VkPhysicalDevice physicalDevice,
12973 VkSurfaceKHR surface,
12974 uint32_t* pRectCount,
12975 VkRect2D* pRects)
12976{
Lingfeng Yang256f9252020-07-14 14:27:33 -070012977 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080012978 AEMU_SCOPED_TRACE("vkGetPhysicalDevicePresentRectanglesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080012979 mImpl->log("start vkGetPhysicalDevicePresentRectanglesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012980 auto stream = mImpl->stream();
12981 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012982 auto resources = mImpl->resources();
12983 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080012984 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012985 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012986 VkSurfaceKHR local_surface;
Lingfeng Yang9666b852018-11-13 23:09:59 -080012987 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080012988 local_surface = surface;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070012989 countingStream->rewind();
12990 {
David Reveman9875f2c2019-06-11 21:47:12 -040012991 uint64_t cgen_var_849;
12992 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_849, 1);
12993 countingStream->write((uint64_t*)&cgen_var_849, 1 * 8);
12994 uint64_t cgen_var_850;
12995 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_850, 1);
12996 countingStream->write((uint64_t*)&cgen_var_850, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080012997 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040012998 uint64_t cgen_var_851 = (uint64_t)(uintptr_t)pRectCount;
12999 countingStream->putBe64(cgen_var_851);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013000 if (pRectCount)
13001 {
13002 countingStream->write((uint32_t*)pRectCount, sizeof(uint32_t));
13003 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013004 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013005 uint64_t cgen_var_852 = (uint64_t)(uintptr_t)pRects;
13006 countingStream->putBe64(cgen_var_852);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013007 if (pRects)
13008 {
13009 for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i)
13010 {
13011 marshal_VkRect2D(countingStream, (VkRect2D*)(pRects + i));
13012 }
13013 }
13014 }
13015 uint32_t packetSize_vkGetPhysicalDevicePresentRectanglesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
13016 countingStream->rewind();
13017 uint32_t opcode_vkGetPhysicalDevicePresentRectanglesKHR = OP_vkGetPhysicalDevicePresentRectanglesKHR;
13018 stream->write(&opcode_vkGetPhysicalDevicePresentRectanglesKHR, sizeof(uint32_t));
13019 stream->write(&packetSize_vkGetPhysicalDevicePresentRectanglesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040013020 uint64_t cgen_var_853;
13021 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_853, 1);
13022 stream->write((uint64_t*)&cgen_var_853, 1 * 8);
13023 uint64_t cgen_var_854;
13024 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_854, 1);
13025 stream->write((uint64_t*)&cgen_var_854, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013026 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013027 uint64_t cgen_var_855 = (uint64_t)(uintptr_t)pRectCount;
13028 stream->putBe64(cgen_var_855);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013029 if (pRectCount)
13030 {
13031 stream->write((uint32_t*)pRectCount, sizeof(uint32_t));
13032 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013033 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013034 uint64_t cgen_var_856 = (uint64_t)(uintptr_t)pRects;
13035 stream->putBe64(cgen_var_856);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013036 if (pRects)
13037 {
13038 for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i)
13039 {
13040 marshal_VkRect2D(stream, (VkRect2D*)(pRects + i));
13041 }
13042 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013043 AEMU_SCOPED_TRACE("vkGetPhysicalDevicePresentRectanglesKHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013044 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013045 uint32_t* check_pRectCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013046 check_pRectCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013047 if (pRectCount)
13048 {
13049 if (!(check_pRectCount))
13050 {
13051 fprintf(stderr, "fatal: pRectCount inconsistent between guest and host\n");
13052 }
13053 stream->read((uint32_t*)pRectCount, sizeof(uint32_t));
13054 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013055 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013056 VkRect2D* check_pRects;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013057 check_pRects = (VkRect2D*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013058 if (pRects)
13059 {
13060 if (!(check_pRects))
13061 {
13062 fprintf(stderr, "fatal: pRects inconsistent between guest and host\n");
13063 }
13064 for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i)
13065 {
13066 unmarshal_VkRect2D(stream, (VkRect2D*)(pRects + i));
13067 }
13068 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080013069 if (pRects)
13070 {
13071 for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i)
13072 {
13073 transform_fromhost_VkRect2D(mImpl->resources(), (VkRect2D*)(pRects + i));
13074 }
13075 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013076 AEMU_SCOPED_TRACE("vkGetPhysicalDevicePresentRectanglesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013077 VkResult vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return = (VkResult)0;
13078 stream->read(&vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070013079 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080013080 countingStream->clearPool();
13081 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013082 mImpl->log("finish vkGetPhysicalDevicePresentRectanglesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013083 return vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return;
13084}
13085
13086VkResult VkEncoder::vkAcquireNextImage2KHR(
13087 VkDevice device,
13088 const VkAcquireNextImageInfoKHR* pAcquireInfo,
13089 uint32_t* pImageIndex)
13090{
Lingfeng Yang256f9252020-07-14 14:27:33 -070013091 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013092 AEMU_SCOPED_TRACE("vkAcquireNextImage2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013093 mImpl->log("start vkAcquireNextImage2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013094 auto stream = mImpl->stream();
13095 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013096 auto resources = mImpl->resources();
13097 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080013098 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013099 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013100 VkAcquireNextImageInfoKHR* local_pAcquireInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080013101 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013102 local_pAcquireInfo = nullptr;
13103 if (pAcquireInfo)
13104 {
13105 local_pAcquireInfo = (VkAcquireNextImageInfoKHR*)pool->alloc(sizeof(const VkAcquireNextImageInfoKHR));
13106 deepcopy_VkAcquireNextImageInfoKHR(pool, pAcquireInfo, (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo));
13107 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080013108 if (local_pAcquireInfo)
13109 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080013110 transform_tohost_VkAcquireNextImageInfoKHR(mImpl->resources(), (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080013111 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013112 countingStream->rewind();
13113 {
David Reveman9875f2c2019-06-11 21:47:12 -040013114 uint64_t cgen_var_859;
13115 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_859, 1);
13116 countingStream->write((uint64_t*)&cgen_var_859, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013117 marshal_VkAcquireNextImageInfoKHR(countingStream, (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013118 countingStream->write((uint32_t*)pImageIndex, sizeof(uint32_t));
13119 }
13120 uint32_t packetSize_vkAcquireNextImage2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
13121 countingStream->rewind();
13122 uint32_t opcode_vkAcquireNextImage2KHR = OP_vkAcquireNextImage2KHR;
13123 stream->write(&opcode_vkAcquireNextImage2KHR, sizeof(uint32_t));
13124 stream->write(&packetSize_vkAcquireNextImage2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040013125 uint64_t cgen_var_860;
13126 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_860, 1);
13127 stream->write((uint64_t*)&cgen_var_860, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013128 marshal_VkAcquireNextImageInfoKHR(stream, (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013129 stream->write((uint32_t*)pImageIndex, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013130 AEMU_SCOPED_TRACE("vkAcquireNextImage2KHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013131 stream->read((uint32_t*)pImageIndex, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013132 AEMU_SCOPED_TRACE("vkAcquireNextImage2KHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013133 VkResult vkAcquireNextImage2KHR_VkResult_return = (VkResult)0;
13134 stream->read(&vkAcquireNextImage2KHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070013135 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080013136 countingStream->clearPool();
13137 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013138 mImpl->log("finish vkAcquireNextImage2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013139 return vkAcquireNextImage2KHR_VkResult_return;
13140}
13141
13142#endif
13143#ifdef VK_KHR_display
13144VkResult VkEncoder::vkGetPhysicalDeviceDisplayPropertiesKHR(
13145 VkPhysicalDevice physicalDevice,
13146 uint32_t* pPropertyCount,
13147 VkDisplayPropertiesKHR* pProperties)
13148{
Lingfeng Yang256f9252020-07-14 14:27:33 -070013149 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013150 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPropertiesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013151 mImpl->log("start vkGetPhysicalDeviceDisplayPropertiesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013152 auto stream = mImpl->stream();
13153 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013154 auto resources = mImpl->resources();
13155 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080013156 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013157 VkPhysicalDevice local_physicalDevice;
13158 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013159 countingStream->rewind();
13160 {
David Reveman9875f2c2019-06-11 21:47:12 -040013161 uint64_t cgen_var_861;
13162 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_861, 1);
13163 countingStream->write((uint64_t*)&cgen_var_861, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013164 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013165 uint64_t cgen_var_862 = (uint64_t)(uintptr_t)pPropertyCount;
13166 countingStream->putBe64(cgen_var_862);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013167 if (pPropertyCount)
13168 {
13169 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
13170 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013171 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013172 uint64_t cgen_var_863 = (uint64_t)(uintptr_t)pProperties;
13173 countingStream->putBe64(cgen_var_863);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013174 if (pProperties)
13175 {
13176 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13177 {
13178 marshal_VkDisplayPropertiesKHR(countingStream, (VkDisplayPropertiesKHR*)(pProperties + i));
13179 }
13180 }
13181 }
13182 uint32_t packetSize_vkGetPhysicalDeviceDisplayPropertiesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
13183 countingStream->rewind();
13184 uint32_t opcode_vkGetPhysicalDeviceDisplayPropertiesKHR = OP_vkGetPhysicalDeviceDisplayPropertiesKHR;
13185 stream->write(&opcode_vkGetPhysicalDeviceDisplayPropertiesKHR, sizeof(uint32_t));
13186 stream->write(&packetSize_vkGetPhysicalDeviceDisplayPropertiesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040013187 uint64_t cgen_var_864;
13188 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_864, 1);
13189 stream->write((uint64_t*)&cgen_var_864, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013190 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013191 uint64_t cgen_var_865 = (uint64_t)(uintptr_t)pPropertyCount;
13192 stream->putBe64(cgen_var_865);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013193 if (pPropertyCount)
13194 {
13195 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
13196 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013197 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013198 uint64_t cgen_var_866 = (uint64_t)(uintptr_t)pProperties;
13199 stream->putBe64(cgen_var_866);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013200 if (pProperties)
13201 {
13202 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13203 {
13204 marshal_VkDisplayPropertiesKHR(stream, (VkDisplayPropertiesKHR*)(pProperties + i));
13205 }
13206 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013207 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPropertiesKHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013208 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013209 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013210 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013211 if (pPropertyCount)
13212 {
13213 if (!(check_pPropertyCount))
13214 {
13215 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
13216 }
13217 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
13218 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013219 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013220 VkDisplayPropertiesKHR* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013221 check_pProperties = (VkDisplayPropertiesKHR*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013222 if (pProperties)
13223 {
13224 if (!(check_pProperties))
13225 {
13226 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
13227 }
13228 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13229 {
13230 unmarshal_VkDisplayPropertiesKHR(stream, (VkDisplayPropertiesKHR*)(pProperties + i));
13231 }
13232 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080013233 if (pProperties)
13234 {
13235 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13236 {
13237 transform_fromhost_VkDisplayPropertiesKHR(mImpl->resources(), (VkDisplayPropertiesKHR*)(pProperties + i));
13238 }
13239 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013240 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPropertiesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013241 VkResult vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return = (VkResult)0;
13242 stream->read(&vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070013243 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080013244 countingStream->clearPool();
13245 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013246 mImpl->log("finish vkGetPhysicalDeviceDisplayPropertiesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013247 return vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return;
13248}
13249
13250VkResult VkEncoder::vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
13251 VkPhysicalDevice physicalDevice,
13252 uint32_t* pPropertyCount,
13253 VkDisplayPlanePropertiesKHR* pProperties)
13254{
Lingfeng Yang256f9252020-07-14 14:27:33 -070013255 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013256 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlanePropertiesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013257 mImpl->log("start vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013258 auto stream = mImpl->stream();
13259 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013260 auto resources = mImpl->resources();
13261 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080013262 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013263 VkPhysicalDevice local_physicalDevice;
13264 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013265 countingStream->rewind();
13266 {
David Reveman9875f2c2019-06-11 21:47:12 -040013267 uint64_t cgen_var_869;
13268 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_869, 1);
13269 countingStream->write((uint64_t*)&cgen_var_869, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013270 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013271 uint64_t cgen_var_870 = (uint64_t)(uintptr_t)pPropertyCount;
13272 countingStream->putBe64(cgen_var_870);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013273 if (pPropertyCount)
13274 {
13275 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
13276 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013277 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013278 uint64_t cgen_var_871 = (uint64_t)(uintptr_t)pProperties;
13279 countingStream->putBe64(cgen_var_871);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013280 if (pProperties)
13281 {
13282 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13283 {
13284 marshal_VkDisplayPlanePropertiesKHR(countingStream, (VkDisplayPlanePropertiesKHR*)(pProperties + i));
13285 }
13286 }
13287 }
13288 uint32_t packetSize_vkGetPhysicalDeviceDisplayPlanePropertiesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
13289 countingStream->rewind();
13290 uint32_t opcode_vkGetPhysicalDeviceDisplayPlanePropertiesKHR = OP_vkGetPhysicalDeviceDisplayPlanePropertiesKHR;
13291 stream->write(&opcode_vkGetPhysicalDeviceDisplayPlanePropertiesKHR, sizeof(uint32_t));
13292 stream->write(&packetSize_vkGetPhysicalDeviceDisplayPlanePropertiesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040013293 uint64_t cgen_var_872;
13294 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_872, 1);
13295 stream->write((uint64_t*)&cgen_var_872, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013296 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013297 uint64_t cgen_var_873 = (uint64_t)(uintptr_t)pPropertyCount;
13298 stream->putBe64(cgen_var_873);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013299 if (pPropertyCount)
13300 {
13301 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
13302 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013303 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013304 uint64_t cgen_var_874 = (uint64_t)(uintptr_t)pProperties;
13305 stream->putBe64(cgen_var_874);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013306 if (pProperties)
13307 {
13308 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13309 {
13310 marshal_VkDisplayPlanePropertiesKHR(stream, (VkDisplayPlanePropertiesKHR*)(pProperties + i));
13311 }
13312 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013313 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlanePropertiesKHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013314 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013315 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013316 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013317 if (pPropertyCount)
13318 {
13319 if (!(check_pPropertyCount))
13320 {
13321 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
13322 }
13323 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
13324 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013325 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013326 VkDisplayPlanePropertiesKHR* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013327 check_pProperties = (VkDisplayPlanePropertiesKHR*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013328 if (pProperties)
13329 {
13330 if (!(check_pProperties))
13331 {
13332 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
13333 }
13334 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13335 {
13336 unmarshal_VkDisplayPlanePropertiesKHR(stream, (VkDisplayPlanePropertiesKHR*)(pProperties + i));
13337 }
13338 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080013339 if (pProperties)
13340 {
13341 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13342 {
13343 transform_fromhost_VkDisplayPlanePropertiesKHR(mImpl->resources(), (VkDisplayPlanePropertiesKHR*)(pProperties + i));
13344 }
13345 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013346 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlanePropertiesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013347 VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return = (VkResult)0;
13348 stream->read(&vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070013349 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080013350 countingStream->clearPool();
13351 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013352 mImpl->log("finish vkGetPhysicalDeviceDisplayPlanePropertiesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013353 return vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return;
13354}
13355
13356VkResult VkEncoder::vkGetDisplayPlaneSupportedDisplaysKHR(
13357 VkPhysicalDevice physicalDevice,
13358 uint32_t planeIndex,
13359 uint32_t* pDisplayCount,
13360 VkDisplayKHR* pDisplays)
13361{
Lingfeng Yang256f9252020-07-14 14:27:33 -070013362 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013363 AEMU_SCOPED_TRACE("vkGetDisplayPlaneSupportedDisplaysKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013364 mImpl->log("start vkGetDisplayPlaneSupportedDisplaysKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013365 auto stream = mImpl->stream();
13366 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013367 auto resources = mImpl->resources();
13368 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080013369 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013370 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013371 uint32_t local_planeIndex;
Lingfeng Yang9666b852018-11-13 23:09:59 -080013372 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013373 local_planeIndex = planeIndex;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013374 countingStream->rewind();
13375 {
David Reveman9875f2c2019-06-11 21:47:12 -040013376 uint64_t cgen_var_877;
13377 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_877, 1);
13378 countingStream->write((uint64_t*)&cgen_var_877, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013379 countingStream->write((uint32_t*)&local_planeIndex, sizeof(uint32_t));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013380 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013381 uint64_t cgen_var_878 = (uint64_t)(uintptr_t)pDisplayCount;
13382 countingStream->putBe64(cgen_var_878);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013383 if (pDisplayCount)
13384 {
13385 countingStream->write((uint32_t*)pDisplayCount, sizeof(uint32_t));
13386 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013387 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013388 uint64_t cgen_var_879 = (uint64_t)(uintptr_t)pDisplays;
13389 countingStream->putBe64(cgen_var_879);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013390 if (pDisplays)
13391 {
Lingfeng Yang2285df12018-11-17 16:25:11 -080013392 if ((*(pDisplayCount)))
13393 {
David Reveman9875f2c2019-06-11 21:47:12 -040013394 uint64_t* cgen_var_880;
13395 countingStream->alloc((void**)&cgen_var_880, (*(pDisplayCount)) * 8);
13396 countingStream->handleMapping()->mapHandles_VkDisplayKHR_u64(pDisplays, cgen_var_880, (*(pDisplayCount)));
13397 countingStream->write((uint64_t*)cgen_var_880, (*(pDisplayCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080013398 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013399 }
13400 }
13401 uint32_t packetSize_vkGetDisplayPlaneSupportedDisplaysKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
13402 countingStream->rewind();
13403 uint32_t opcode_vkGetDisplayPlaneSupportedDisplaysKHR = OP_vkGetDisplayPlaneSupportedDisplaysKHR;
13404 stream->write(&opcode_vkGetDisplayPlaneSupportedDisplaysKHR, sizeof(uint32_t));
13405 stream->write(&packetSize_vkGetDisplayPlaneSupportedDisplaysKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040013406 uint64_t cgen_var_881;
13407 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_881, 1);
13408 stream->write((uint64_t*)&cgen_var_881, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013409 stream->write((uint32_t*)&local_planeIndex, sizeof(uint32_t));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013410 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013411 uint64_t cgen_var_882 = (uint64_t)(uintptr_t)pDisplayCount;
13412 stream->putBe64(cgen_var_882);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013413 if (pDisplayCount)
13414 {
13415 stream->write((uint32_t*)pDisplayCount, sizeof(uint32_t));
13416 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080013417 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013418 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013419 uint64_t cgen_var_883 = (uint64_t)(uintptr_t)pDisplays;
13420 stream->putBe64(cgen_var_883);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013421 if (pDisplays)
13422 {
Lingfeng Yang2285df12018-11-17 16:25:11 -080013423 if ((*(pDisplayCount)))
13424 {
David Reveman9875f2c2019-06-11 21:47:12 -040013425 uint64_t* cgen_var_884;
13426 stream->alloc((void**)&cgen_var_884, (*(pDisplayCount)) * 8);
13427 stream->handleMapping()->mapHandles_VkDisplayKHR_u64(pDisplays, cgen_var_884, (*(pDisplayCount)));
13428 stream->write((uint64_t*)cgen_var_884, (*(pDisplayCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080013429 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013430 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080013431 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013432 AEMU_SCOPED_TRACE("vkGetDisplayPlaneSupportedDisplaysKHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013433 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013434 uint32_t* check_pDisplayCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013435 check_pDisplayCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013436 if (pDisplayCount)
13437 {
13438 if (!(check_pDisplayCount))
13439 {
13440 fprintf(stderr, "fatal: pDisplayCount inconsistent between guest and host\n");
13441 }
13442 stream->read((uint32_t*)pDisplayCount, sizeof(uint32_t));
13443 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013444 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013445 VkDisplayKHR* check_pDisplays;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013446 check_pDisplays = (VkDisplayKHR*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013447 if (pDisplays)
13448 {
13449 if (!(check_pDisplays))
13450 {
13451 fprintf(stderr, "fatal: pDisplays inconsistent between guest and host\n");
13452 }
Lingfeng Yang2285df12018-11-17 16:25:11 -080013453 if ((*(pDisplayCount)))
13454 {
David Reveman9875f2c2019-06-11 21:47:12 -040013455 uint64_t* cgen_var_887;
13456 stream->alloc((void**)&cgen_var_887, (*(pDisplayCount)) * 8);
13457 stream->read((uint64_t*)cgen_var_887, (*(pDisplayCount)) * 8);
13458 stream->handleMapping()->mapHandles_u64_VkDisplayKHR(cgen_var_887, (VkDisplayKHR*)pDisplays, (*(pDisplayCount)));
Lingfeng Yang2285df12018-11-17 16:25:11 -080013459 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013460 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013461 AEMU_SCOPED_TRACE("vkGetDisplayPlaneSupportedDisplaysKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013462 VkResult vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return = (VkResult)0;
13463 stream->read(&vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070013464 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080013465 countingStream->clearPool();
13466 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013467 mImpl->log("finish vkGetDisplayPlaneSupportedDisplaysKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013468 return vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return;
13469}
13470
13471VkResult VkEncoder::vkGetDisplayModePropertiesKHR(
13472 VkPhysicalDevice physicalDevice,
13473 VkDisplayKHR display,
13474 uint32_t* pPropertyCount,
13475 VkDisplayModePropertiesKHR* pProperties)
13476{
Lingfeng Yang256f9252020-07-14 14:27:33 -070013477 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013478 AEMU_SCOPED_TRACE("vkGetDisplayModePropertiesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013479 mImpl->log("start vkGetDisplayModePropertiesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013480 auto stream = mImpl->stream();
13481 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013482 auto resources = mImpl->resources();
13483 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080013484 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013485 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013486 VkDisplayKHR local_display;
Lingfeng Yang9666b852018-11-13 23:09:59 -080013487 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013488 local_display = display;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013489 countingStream->rewind();
13490 {
David Reveman9875f2c2019-06-11 21:47:12 -040013491 uint64_t cgen_var_888;
13492 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_888, 1);
13493 countingStream->write((uint64_t*)&cgen_var_888, 1 * 8);
13494 uint64_t cgen_var_889;
13495 countingStream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_889, 1);
13496 countingStream->write((uint64_t*)&cgen_var_889, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013497 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013498 uint64_t cgen_var_890 = (uint64_t)(uintptr_t)pPropertyCount;
13499 countingStream->putBe64(cgen_var_890);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013500 if (pPropertyCount)
13501 {
13502 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
13503 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013504 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013505 uint64_t cgen_var_891 = (uint64_t)(uintptr_t)pProperties;
13506 countingStream->putBe64(cgen_var_891);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013507 if (pProperties)
13508 {
13509 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13510 {
13511 marshal_VkDisplayModePropertiesKHR(countingStream, (VkDisplayModePropertiesKHR*)(pProperties + i));
13512 }
13513 }
13514 }
13515 uint32_t packetSize_vkGetDisplayModePropertiesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
13516 countingStream->rewind();
13517 uint32_t opcode_vkGetDisplayModePropertiesKHR = OP_vkGetDisplayModePropertiesKHR;
13518 stream->write(&opcode_vkGetDisplayModePropertiesKHR, sizeof(uint32_t));
13519 stream->write(&packetSize_vkGetDisplayModePropertiesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040013520 uint64_t cgen_var_892;
13521 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_892, 1);
13522 stream->write((uint64_t*)&cgen_var_892, 1 * 8);
13523 uint64_t cgen_var_893;
13524 stream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_893, 1);
13525 stream->write((uint64_t*)&cgen_var_893, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013526 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013527 uint64_t cgen_var_894 = (uint64_t)(uintptr_t)pPropertyCount;
13528 stream->putBe64(cgen_var_894);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013529 if (pPropertyCount)
13530 {
13531 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
13532 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013533 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013534 uint64_t cgen_var_895 = (uint64_t)(uintptr_t)pProperties;
13535 stream->putBe64(cgen_var_895);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013536 if (pProperties)
13537 {
13538 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13539 {
13540 marshal_VkDisplayModePropertiesKHR(stream, (VkDisplayModePropertiesKHR*)(pProperties + i));
13541 }
13542 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013543 AEMU_SCOPED_TRACE("vkGetDisplayModePropertiesKHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013544 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013545 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013546 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013547 if (pPropertyCount)
13548 {
13549 if (!(check_pPropertyCount))
13550 {
13551 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
13552 }
13553 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
13554 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013555 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013556 VkDisplayModePropertiesKHR* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013557 check_pProperties = (VkDisplayModePropertiesKHR*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013558 if (pProperties)
13559 {
13560 if (!(check_pProperties))
13561 {
13562 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
13563 }
13564 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13565 {
13566 unmarshal_VkDisplayModePropertiesKHR(stream, (VkDisplayModePropertiesKHR*)(pProperties + i));
13567 }
13568 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080013569 if (pProperties)
13570 {
13571 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
13572 {
13573 transform_fromhost_VkDisplayModePropertiesKHR(mImpl->resources(), (VkDisplayModePropertiesKHR*)(pProperties + i));
13574 }
13575 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013576 AEMU_SCOPED_TRACE("vkGetDisplayModePropertiesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013577 VkResult vkGetDisplayModePropertiesKHR_VkResult_return = (VkResult)0;
13578 stream->read(&vkGetDisplayModePropertiesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070013579 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080013580 countingStream->clearPool();
13581 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013582 mImpl->log("finish vkGetDisplayModePropertiesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013583 return vkGetDisplayModePropertiesKHR_VkResult_return;
13584}
13585
13586VkResult VkEncoder::vkCreateDisplayModeKHR(
13587 VkPhysicalDevice physicalDevice,
13588 VkDisplayKHR display,
13589 const VkDisplayModeCreateInfoKHR* pCreateInfo,
13590 const VkAllocationCallbacks* pAllocator,
13591 VkDisplayModeKHR* pMode)
13592{
Lingfeng Yang256f9252020-07-14 14:27:33 -070013593 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013594 AEMU_SCOPED_TRACE("vkCreateDisplayModeKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013595 mImpl->log("start vkCreateDisplayModeKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013596 auto stream = mImpl->stream();
13597 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013598 auto resources = mImpl->resources();
13599 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080013600 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013601 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013602 VkDisplayKHR local_display;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013603 VkDisplayModeCreateInfoKHR* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080013604 VkAllocationCallbacks* local_pAllocator;
13605 local_physicalDevice = physicalDevice;
13606 local_display = display;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013607 local_pCreateInfo = nullptr;
13608 if (pCreateInfo)
13609 {
13610 local_pCreateInfo = (VkDisplayModeCreateInfoKHR*)pool->alloc(sizeof(const VkDisplayModeCreateInfoKHR));
13611 deepcopy_VkDisplayModeCreateInfoKHR(pool, pCreateInfo, (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo));
13612 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013613 local_pAllocator = nullptr;
13614 if (pAllocator)
13615 {
13616 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
13617 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
13618 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080013619 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080013620 if (local_pCreateInfo)
13621 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080013622 transform_tohost_VkDisplayModeCreateInfoKHR(mImpl->resources(), (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080013623 }
13624 if (local_pAllocator)
13625 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080013626 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080013627 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013628 countingStream->rewind();
13629 {
David Reveman9875f2c2019-06-11 21:47:12 -040013630 uint64_t cgen_var_898;
13631 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_898, 1);
13632 countingStream->write((uint64_t*)&cgen_var_898, 1 * 8);
13633 uint64_t cgen_var_899;
13634 countingStream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_899, 1);
13635 countingStream->write((uint64_t*)&cgen_var_899, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013636 marshal_VkDisplayModeCreateInfoKHR(countingStream, (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013637 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013638 uint64_t cgen_var_900 = (uint64_t)(uintptr_t)local_pAllocator;
13639 countingStream->putBe64(cgen_var_900);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013640 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013641 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013642 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013643 }
David Reveman9875f2c2019-06-11 21:47:12 -040013644 uint64_t cgen_var_901;
13645 countingStream->handleMapping()->mapHandles_VkDisplayModeKHR_u64(pMode, &cgen_var_901, 1);
13646 countingStream->write((uint64_t*)&cgen_var_901, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013647 }
13648 uint32_t packetSize_vkCreateDisplayModeKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
13649 countingStream->rewind();
13650 uint32_t opcode_vkCreateDisplayModeKHR = OP_vkCreateDisplayModeKHR;
13651 stream->write(&opcode_vkCreateDisplayModeKHR, sizeof(uint32_t));
13652 stream->write(&packetSize_vkCreateDisplayModeKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040013653 uint64_t cgen_var_902;
13654 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_902, 1);
13655 stream->write((uint64_t*)&cgen_var_902, 1 * 8);
13656 uint64_t cgen_var_903;
13657 stream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_903, 1);
13658 stream->write((uint64_t*)&cgen_var_903, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013659 marshal_VkDisplayModeCreateInfoKHR(stream, (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013660 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013661 uint64_t cgen_var_904 = (uint64_t)(uintptr_t)local_pAllocator;
13662 stream->putBe64(cgen_var_904);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013663 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013664 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013665 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013666 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080013667 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040013668 uint64_t cgen_var_905;
13669 stream->handleMapping()->mapHandles_VkDisplayModeKHR_u64(pMode, &cgen_var_905, 1);
13670 stream->write((uint64_t*)&cgen_var_905, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080013671 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013672 AEMU_SCOPED_TRACE("vkCreateDisplayModeKHR readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -080013673 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -040013674 uint64_t cgen_var_906;
13675 stream->read((uint64_t*)&cgen_var_906, 8);
13676 stream->handleMapping()->mapHandles_u64_VkDisplayModeKHR(&cgen_var_906, (VkDisplayModeKHR*)pMode, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -080013677 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013678 AEMU_SCOPED_TRACE("vkCreateDisplayModeKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013679 VkResult vkCreateDisplayModeKHR_VkResult_return = (VkResult)0;
13680 stream->read(&vkCreateDisplayModeKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070013681 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080013682 countingStream->clearPool();
13683 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013684 mImpl->log("finish vkCreateDisplayModeKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013685 return vkCreateDisplayModeKHR_VkResult_return;
13686}
13687
13688VkResult VkEncoder::vkGetDisplayPlaneCapabilitiesKHR(
13689 VkPhysicalDevice physicalDevice,
13690 VkDisplayModeKHR mode,
13691 uint32_t planeIndex,
13692 VkDisplayPlaneCapabilitiesKHR* pCapabilities)
13693{
Lingfeng Yang256f9252020-07-14 14:27:33 -070013694 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013695 AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilitiesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013696 mImpl->log("start vkGetDisplayPlaneCapabilitiesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013697 auto stream = mImpl->stream();
13698 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013699 auto resources = mImpl->resources();
13700 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080013701 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013702 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013703 VkDisplayModeKHR local_mode;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013704 uint32_t local_planeIndex;
Lingfeng Yang9666b852018-11-13 23:09:59 -080013705 local_physicalDevice = physicalDevice;
13706 local_mode = mode;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013707 local_planeIndex = planeIndex;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013708 countingStream->rewind();
13709 {
David Reveman9875f2c2019-06-11 21:47:12 -040013710 uint64_t cgen_var_907;
13711 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_907, 1);
13712 countingStream->write((uint64_t*)&cgen_var_907, 1 * 8);
13713 uint64_t cgen_var_908;
13714 countingStream->handleMapping()->mapHandles_VkDisplayModeKHR_u64(&local_mode, &cgen_var_908, 1);
13715 countingStream->write((uint64_t*)&cgen_var_908, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013716 countingStream->write((uint32_t*)&local_planeIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013717 marshal_VkDisplayPlaneCapabilitiesKHR(countingStream, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
13718 }
13719 uint32_t packetSize_vkGetDisplayPlaneCapabilitiesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
13720 countingStream->rewind();
13721 uint32_t opcode_vkGetDisplayPlaneCapabilitiesKHR = OP_vkGetDisplayPlaneCapabilitiesKHR;
13722 stream->write(&opcode_vkGetDisplayPlaneCapabilitiesKHR, sizeof(uint32_t));
13723 stream->write(&packetSize_vkGetDisplayPlaneCapabilitiesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040013724 uint64_t cgen_var_909;
13725 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_909, 1);
13726 stream->write((uint64_t*)&cgen_var_909, 1 * 8);
13727 uint64_t cgen_var_910;
13728 stream->handleMapping()->mapHandles_VkDisplayModeKHR_u64(&local_mode, &cgen_var_910, 1);
13729 stream->write((uint64_t*)&cgen_var_910, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013730 stream->write((uint32_t*)&local_planeIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013731 marshal_VkDisplayPlaneCapabilitiesKHR(stream, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013732 AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilitiesKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013733 unmarshal_VkDisplayPlaneCapabilitiesKHR(stream, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
Lingfeng Yang97a06702018-12-24 17:02:43 -080013734 if (pCapabilities)
13735 {
13736 transform_fromhost_VkDisplayPlaneCapabilitiesKHR(mImpl->resources(), (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
13737 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013738 AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilitiesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013739 VkResult vkGetDisplayPlaneCapabilitiesKHR_VkResult_return = (VkResult)0;
13740 stream->read(&vkGetDisplayPlaneCapabilitiesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070013741 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080013742 countingStream->clearPool();
13743 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013744 mImpl->log("finish vkGetDisplayPlaneCapabilitiesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013745 return vkGetDisplayPlaneCapabilitiesKHR_VkResult_return;
13746}
13747
13748VkResult VkEncoder::vkCreateDisplayPlaneSurfaceKHR(
13749 VkInstance instance,
13750 const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
13751 const VkAllocationCallbacks* pAllocator,
13752 VkSurfaceKHR* pSurface)
13753{
Lingfeng Yang256f9252020-07-14 14:27:33 -070013754 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013755 AEMU_SCOPED_TRACE("vkCreateDisplayPlaneSurfaceKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013756 mImpl->log("start vkCreateDisplayPlaneSurfaceKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013757 auto stream = mImpl->stream();
13758 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013759 auto resources = mImpl->resources();
13760 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080013761 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013762 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013763 VkDisplaySurfaceCreateInfoKHR* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080013764 VkAllocationCallbacks* local_pAllocator;
13765 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013766 local_pCreateInfo = nullptr;
13767 if (pCreateInfo)
13768 {
13769 local_pCreateInfo = (VkDisplaySurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkDisplaySurfaceCreateInfoKHR));
13770 deepcopy_VkDisplaySurfaceCreateInfoKHR(pool, pCreateInfo, (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo));
13771 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013772 local_pAllocator = nullptr;
13773 if (pAllocator)
13774 {
13775 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
13776 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
13777 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080013778 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080013779 if (local_pCreateInfo)
13780 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080013781 transform_tohost_VkDisplaySurfaceCreateInfoKHR(mImpl->resources(), (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080013782 }
13783 if (local_pAllocator)
13784 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080013785 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080013786 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013787 countingStream->rewind();
13788 {
David Reveman9875f2c2019-06-11 21:47:12 -040013789 uint64_t cgen_var_911;
13790 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_911, 1);
13791 countingStream->write((uint64_t*)&cgen_var_911, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013792 marshal_VkDisplaySurfaceCreateInfoKHR(countingStream, (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013793 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013794 uint64_t cgen_var_912 = (uint64_t)(uintptr_t)local_pAllocator;
13795 countingStream->putBe64(cgen_var_912);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013796 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013797 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013798 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013799 }
David Reveman9875f2c2019-06-11 21:47:12 -040013800 uint64_t cgen_var_913;
13801 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_913, 1);
13802 countingStream->write((uint64_t*)&cgen_var_913, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013803 }
13804 uint32_t packetSize_vkCreateDisplayPlaneSurfaceKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
13805 countingStream->rewind();
13806 uint32_t opcode_vkCreateDisplayPlaneSurfaceKHR = OP_vkCreateDisplayPlaneSurfaceKHR;
13807 stream->write(&opcode_vkCreateDisplayPlaneSurfaceKHR, sizeof(uint32_t));
13808 stream->write(&packetSize_vkCreateDisplayPlaneSurfaceKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040013809 uint64_t cgen_var_914;
13810 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_914, 1);
13811 stream->write((uint64_t*)&cgen_var_914, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013812 marshal_VkDisplaySurfaceCreateInfoKHR(stream, (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013813 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013814 uint64_t cgen_var_915 = (uint64_t)(uintptr_t)local_pAllocator;
13815 stream->putBe64(cgen_var_915);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013816 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013817 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013818 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013819 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080013820 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040013821 uint64_t cgen_var_916;
13822 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_916, 1);
13823 stream->write((uint64_t*)&cgen_var_916, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080013824 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013825 AEMU_SCOPED_TRACE("vkCreateDisplayPlaneSurfaceKHR readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040013826 uint64_t cgen_var_917;
13827 stream->read((uint64_t*)&cgen_var_917, 8);
13828 stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_917, (VkSurfaceKHR*)pSurface, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013829 AEMU_SCOPED_TRACE("vkCreateDisplayPlaneSurfaceKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013830 VkResult vkCreateDisplayPlaneSurfaceKHR_VkResult_return = (VkResult)0;
13831 stream->read(&vkCreateDisplayPlaneSurfaceKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070013832 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080013833 countingStream->clearPool();
13834 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013835 mImpl->log("finish vkCreateDisplayPlaneSurfaceKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013836 return vkCreateDisplayPlaneSurfaceKHR_VkResult_return;
13837}
13838
13839#endif
13840#ifdef VK_KHR_display_swapchain
13841VkResult VkEncoder::vkCreateSharedSwapchainsKHR(
13842 VkDevice device,
13843 uint32_t swapchainCount,
13844 const VkSwapchainCreateInfoKHR* pCreateInfos,
13845 const VkAllocationCallbacks* pAllocator,
13846 VkSwapchainKHR* pSwapchains)
13847{
Lingfeng Yang256f9252020-07-14 14:27:33 -070013848 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013849 AEMU_SCOPED_TRACE("vkCreateSharedSwapchainsKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013850 mImpl->log("start vkCreateSharedSwapchainsKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013851 auto stream = mImpl->stream();
13852 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013853 auto resources = mImpl->resources();
13854 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080013855 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013856 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013857 uint32_t local_swapchainCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013858 VkSwapchainCreateInfoKHR* local_pCreateInfos;
Lingfeng Yang9666b852018-11-13 23:09:59 -080013859 VkAllocationCallbacks* local_pAllocator;
13860 local_device = device;
13861 local_swapchainCount = swapchainCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013862 local_pCreateInfos = nullptr;
13863 if (pCreateInfos)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013864 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013865 local_pCreateInfos = (VkSwapchainCreateInfoKHR*)pool->alloc(((swapchainCount)) * sizeof(const VkSwapchainCreateInfoKHR));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013866 for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
13867 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013868 deepcopy_VkSwapchainCreateInfoKHR(pool, pCreateInfos + i, (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013869 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013870 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013871 local_pAllocator = nullptr;
13872 if (pAllocator)
13873 {
13874 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
13875 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
13876 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080013877 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080013878 if (local_pCreateInfos)
13879 {
13880 for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
13881 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080013882 transform_tohost_VkSwapchainCreateInfoKHR(mImpl->resources(), (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -080013883 }
13884 }
13885 if (local_pAllocator)
13886 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080013887 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080013888 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013889 countingStream->rewind();
13890 {
David Reveman9875f2c2019-06-11 21:47:12 -040013891 uint64_t cgen_var_918;
13892 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_918, 1);
13893 countingStream->write((uint64_t*)&cgen_var_918, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013894 countingStream->write((uint32_t*)&local_swapchainCount, sizeof(uint32_t));
13895 for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
13896 {
13897 marshal_VkSwapchainCreateInfoKHR(countingStream, (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i));
13898 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013899 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013900 uint64_t cgen_var_919 = (uint64_t)(uintptr_t)local_pAllocator;
13901 countingStream->putBe64(cgen_var_919);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013902 if (local_pAllocator)
13903 {
13904 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013905 }
Lingfeng Yang2285df12018-11-17 16:25:11 -080013906 if (((swapchainCount)))
13907 {
David Reveman9875f2c2019-06-11 21:47:12 -040013908 uint64_t* cgen_var_920;
13909 countingStream->alloc((void**)&cgen_var_920, ((swapchainCount)) * 8);
13910 countingStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(pSwapchains, cgen_var_920, ((swapchainCount)));
13911 countingStream->write((uint64_t*)cgen_var_920, ((swapchainCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080013912 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013913 }
13914 uint32_t packetSize_vkCreateSharedSwapchainsKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
13915 countingStream->rewind();
13916 uint32_t opcode_vkCreateSharedSwapchainsKHR = OP_vkCreateSharedSwapchainsKHR;
13917 stream->write(&opcode_vkCreateSharedSwapchainsKHR, sizeof(uint32_t));
13918 stream->write(&packetSize_vkCreateSharedSwapchainsKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040013919 uint64_t cgen_var_921;
13920 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_921, 1);
13921 stream->write((uint64_t*)&cgen_var_921, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013922 stream->write((uint32_t*)&local_swapchainCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013923 for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
13924 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013925 marshal_VkSwapchainCreateInfoKHR(stream, (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013926 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080013927 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040013928 uint64_t cgen_var_922 = (uint64_t)(uintptr_t)local_pAllocator;
13929 stream->putBe64(cgen_var_922);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013930 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013931 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013932 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013933 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080013934 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
Lingfeng Yang2285df12018-11-17 16:25:11 -080013935 if (((swapchainCount)))
13936 {
David Reveman9875f2c2019-06-11 21:47:12 -040013937 uint64_t* cgen_var_923;
13938 stream->alloc((void**)&cgen_var_923, ((swapchainCount)) * 8);
13939 stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(pSwapchains, cgen_var_923, ((swapchainCount)));
13940 stream->write((uint64_t*)cgen_var_923, ((swapchainCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080013941 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080013942 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013943 AEMU_SCOPED_TRACE("vkCreateSharedSwapchainsKHR readParams");
Lingfeng Yang2285df12018-11-17 16:25:11 -080013944 if (((swapchainCount)))
13945 {
David Reveman9875f2c2019-06-11 21:47:12 -040013946 uint64_t* cgen_var_924;
13947 stream->alloc((void**)&cgen_var_924, ((swapchainCount)) * 8);
13948 stream->read((uint64_t*)cgen_var_924, ((swapchainCount)) * 8);
13949 stream->handleMapping()->mapHandles_u64_VkSwapchainKHR(cgen_var_924, (VkSwapchainKHR*)pSwapchains, ((swapchainCount)));
Lingfeng Yang2285df12018-11-17 16:25:11 -080013950 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013951 AEMU_SCOPED_TRACE("vkCreateSharedSwapchainsKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013952 VkResult vkCreateSharedSwapchainsKHR_VkResult_return = (VkResult)0;
13953 stream->read(&vkCreateSharedSwapchainsKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070013954 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080013955 countingStream->clearPool();
13956 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013957 mImpl->log("finish vkCreateSharedSwapchainsKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013958 return vkCreateSharedSwapchainsKHR_VkResult_return;
13959}
13960
13961#endif
13962#ifdef VK_KHR_xlib_surface
13963VkResult VkEncoder::vkCreateXlibSurfaceKHR(
13964 VkInstance instance,
13965 const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
13966 const VkAllocationCallbacks* pAllocator,
13967 VkSurfaceKHR* pSurface)
13968{
Lingfeng Yang256f9252020-07-14 14:27:33 -070013969 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080013970 AEMU_SCOPED_TRACE("vkCreateXlibSurfaceKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080013971 mImpl->log("start vkCreateXlibSurfaceKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070013972 auto stream = mImpl->stream();
13973 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013974 auto resources = mImpl->resources();
13975 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080013976 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013977 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013978 VkXlibSurfaceCreateInfoKHR* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080013979 VkAllocationCallbacks* local_pAllocator;
13980 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013981 local_pCreateInfo = nullptr;
13982 if (pCreateInfo)
13983 {
13984 local_pCreateInfo = (VkXlibSurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkXlibSurfaceCreateInfoKHR));
13985 deepcopy_VkXlibSurfaceCreateInfoKHR(pool, pCreateInfo, (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo));
13986 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080013987 local_pAllocator = nullptr;
13988 if (pAllocator)
13989 {
13990 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
13991 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
13992 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080013993 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080013994 if (local_pCreateInfo)
13995 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080013996 transform_tohost_VkXlibSurfaceCreateInfoKHR(mImpl->resources(), (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080013997 }
13998 if (local_pAllocator)
13999 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014000 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014001 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014002 countingStream->rewind();
14003 {
David Reveman9875f2c2019-06-11 21:47:12 -040014004 uint64_t cgen_var_925;
14005 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_925, 1);
14006 countingStream->write((uint64_t*)&cgen_var_925, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014007 marshal_VkXlibSurfaceCreateInfoKHR(countingStream, (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014008 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014009 uint64_t cgen_var_926 = (uint64_t)(uintptr_t)local_pAllocator;
14010 countingStream->putBe64(cgen_var_926);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014011 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014012 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014013 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014014 }
David Reveman9875f2c2019-06-11 21:47:12 -040014015 uint64_t cgen_var_927;
14016 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_927, 1);
14017 countingStream->write((uint64_t*)&cgen_var_927, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014018 }
14019 uint32_t packetSize_vkCreateXlibSurfaceKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14020 countingStream->rewind();
14021 uint32_t opcode_vkCreateXlibSurfaceKHR = OP_vkCreateXlibSurfaceKHR;
14022 stream->write(&opcode_vkCreateXlibSurfaceKHR, sizeof(uint32_t));
14023 stream->write(&packetSize_vkCreateXlibSurfaceKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014024 uint64_t cgen_var_928;
14025 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_928, 1);
14026 stream->write((uint64_t*)&cgen_var_928, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014027 marshal_VkXlibSurfaceCreateInfoKHR(stream, (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014028 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014029 uint64_t cgen_var_929 = (uint64_t)(uintptr_t)local_pAllocator;
14030 stream->putBe64(cgen_var_929);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014031 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014032 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014033 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014034 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080014035 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040014036 uint64_t cgen_var_930;
14037 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_930, 1);
14038 stream->write((uint64_t*)&cgen_var_930, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080014039 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014040 AEMU_SCOPED_TRACE("vkCreateXlibSurfaceKHR readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040014041 uint64_t cgen_var_931;
14042 stream->read((uint64_t*)&cgen_var_931, 8);
14043 stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_931, (VkSurfaceKHR*)pSurface, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014044 AEMU_SCOPED_TRACE("vkCreateXlibSurfaceKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014045 VkResult vkCreateXlibSurfaceKHR_VkResult_return = (VkResult)0;
14046 stream->read(&vkCreateXlibSurfaceKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014047 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014048 countingStream->clearPool();
14049 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014050 mImpl->log("finish vkCreateXlibSurfaceKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014051 return vkCreateXlibSurfaceKHR_VkResult_return;
14052}
14053
14054VkBool32 VkEncoder::vkGetPhysicalDeviceXlibPresentationSupportKHR(
14055 VkPhysicalDevice physicalDevice,
14056 uint32_t queueFamilyIndex,
14057 Display* dpy,
14058 VisualID visualID)
14059{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014060 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014061 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXlibPresentationSupportKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014062 mImpl->log("start vkGetPhysicalDeviceXlibPresentationSupportKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014063 auto stream = mImpl->stream();
14064 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014065 auto resources = mImpl->resources();
14066 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014067 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014068 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014069 uint32_t local_queueFamilyIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014070 VisualID local_visualID;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014071 local_physicalDevice = physicalDevice;
14072 local_queueFamilyIndex = queueFamilyIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014073 local_visualID = visualID;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014074 countingStream->rewind();
14075 {
David Reveman9875f2c2019-06-11 21:47:12 -040014076 uint64_t cgen_var_932;
14077 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_932, 1);
14078 countingStream->write((uint64_t*)&cgen_var_932, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014079 countingStream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014080 countingStream->write((Display*)dpy, sizeof(Display));
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014081 countingStream->write((VisualID*)&local_visualID, sizeof(VisualID));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014082 }
14083 uint32_t packetSize_vkGetPhysicalDeviceXlibPresentationSupportKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14084 countingStream->rewind();
14085 uint32_t opcode_vkGetPhysicalDeviceXlibPresentationSupportKHR = OP_vkGetPhysicalDeviceXlibPresentationSupportKHR;
14086 stream->write(&opcode_vkGetPhysicalDeviceXlibPresentationSupportKHR, sizeof(uint32_t));
14087 stream->write(&packetSize_vkGetPhysicalDeviceXlibPresentationSupportKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014088 uint64_t cgen_var_933;
14089 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_933, 1);
14090 stream->write((uint64_t*)&cgen_var_933, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014091 stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014092 stream->write((Display*)dpy, sizeof(Display));
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014093 stream->write((VisualID*)&local_visualID, sizeof(VisualID));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014094 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXlibPresentationSupportKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014095 stream->read((Display*)dpy, sizeof(Display));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014096 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXlibPresentationSupportKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014097 VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return = (VkBool32)0;
14098 stream->read(&vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return, sizeof(VkBool32));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014099 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014100 countingStream->clearPool();
14101 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014102 mImpl->log("finish vkGetPhysicalDeviceXlibPresentationSupportKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014103 return vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return;
14104}
14105
14106#endif
14107#ifdef VK_KHR_xcb_surface
14108VkResult VkEncoder::vkCreateXcbSurfaceKHR(
14109 VkInstance instance,
14110 const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
14111 const VkAllocationCallbacks* pAllocator,
14112 VkSurfaceKHR* pSurface)
14113{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014114 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014115 AEMU_SCOPED_TRACE("vkCreateXcbSurfaceKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014116 mImpl->log("start vkCreateXcbSurfaceKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014117 auto stream = mImpl->stream();
14118 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014119 auto resources = mImpl->resources();
14120 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014121 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014122 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014123 VkXcbSurfaceCreateInfoKHR* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014124 VkAllocationCallbacks* local_pAllocator;
14125 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014126 local_pCreateInfo = nullptr;
14127 if (pCreateInfo)
14128 {
14129 local_pCreateInfo = (VkXcbSurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkXcbSurfaceCreateInfoKHR));
14130 deepcopy_VkXcbSurfaceCreateInfoKHR(pool, pCreateInfo, (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo));
14131 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014132 local_pAllocator = nullptr;
14133 if (pAllocator)
14134 {
14135 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
14136 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
14137 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080014138 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080014139 if (local_pCreateInfo)
14140 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014141 transform_tohost_VkXcbSurfaceCreateInfoKHR(mImpl->resources(), (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014142 }
14143 if (local_pAllocator)
14144 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014145 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014146 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014147 countingStream->rewind();
14148 {
David Reveman9875f2c2019-06-11 21:47:12 -040014149 uint64_t cgen_var_934;
14150 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_934, 1);
14151 countingStream->write((uint64_t*)&cgen_var_934, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014152 marshal_VkXcbSurfaceCreateInfoKHR(countingStream, (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014153 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014154 uint64_t cgen_var_935 = (uint64_t)(uintptr_t)local_pAllocator;
14155 countingStream->putBe64(cgen_var_935);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014156 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014157 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014158 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014159 }
David Reveman9875f2c2019-06-11 21:47:12 -040014160 uint64_t cgen_var_936;
14161 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_936, 1);
14162 countingStream->write((uint64_t*)&cgen_var_936, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014163 }
14164 uint32_t packetSize_vkCreateXcbSurfaceKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14165 countingStream->rewind();
14166 uint32_t opcode_vkCreateXcbSurfaceKHR = OP_vkCreateXcbSurfaceKHR;
14167 stream->write(&opcode_vkCreateXcbSurfaceKHR, sizeof(uint32_t));
14168 stream->write(&packetSize_vkCreateXcbSurfaceKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014169 uint64_t cgen_var_937;
14170 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_937, 1);
14171 stream->write((uint64_t*)&cgen_var_937, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014172 marshal_VkXcbSurfaceCreateInfoKHR(stream, (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014173 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014174 uint64_t cgen_var_938 = (uint64_t)(uintptr_t)local_pAllocator;
14175 stream->putBe64(cgen_var_938);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014176 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014177 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014178 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014179 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080014180 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040014181 uint64_t cgen_var_939;
14182 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_939, 1);
14183 stream->write((uint64_t*)&cgen_var_939, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080014184 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014185 AEMU_SCOPED_TRACE("vkCreateXcbSurfaceKHR readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040014186 uint64_t cgen_var_940;
14187 stream->read((uint64_t*)&cgen_var_940, 8);
14188 stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_940, (VkSurfaceKHR*)pSurface, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014189 AEMU_SCOPED_TRACE("vkCreateXcbSurfaceKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014190 VkResult vkCreateXcbSurfaceKHR_VkResult_return = (VkResult)0;
14191 stream->read(&vkCreateXcbSurfaceKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014192 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014193 countingStream->clearPool();
14194 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014195 mImpl->log("finish vkCreateXcbSurfaceKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014196 return vkCreateXcbSurfaceKHR_VkResult_return;
14197}
14198
14199VkBool32 VkEncoder::vkGetPhysicalDeviceXcbPresentationSupportKHR(
14200 VkPhysicalDevice physicalDevice,
14201 uint32_t queueFamilyIndex,
14202 xcb_connection_t* connection,
14203 xcb_visualid_t visual_id)
14204{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014205 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014206 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXcbPresentationSupportKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014207 mImpl->log("start vkGetPhysicalDeviceXcbPresentationSupportKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014208 auto stream = mImpl->stream();
14209 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014210 auto resources = mImpl->resources();
14211 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014212 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014213 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014214 uint32_t local_queueFamilyIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014215 xcb_visualid_t local_visual_id;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014216 local_physicalDevice = physicalDevice;
14217 local_queueFamilyIndex = queueFamilyIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014218 local_visual_id = visual_id;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014219 countingStream->rewind();
14220 {
David Reveman9875f2c2019-06-11 21:47:12 -040014221 uint64_t cgen_var_941;
14222 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_941, 1);
14223 countingStream->write((uint64_t*)&cgen_var_941, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014224 countingStream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014225 countingStream->write((xcb_connection_t*)connection, sizeof(xcb_connection_t));
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014226 countingStream->write((xcb_visualid_t*)&local_visual_id, sizeof(xcb_visualid_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014227 }
14228 uint32_t packetSize_vkGetPhysicalDeviceXcbPresentationSupportKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14229 countingStream->rewind();
14230 uint32_t opcode_vkGetPhysicalDeviceXcbPresentationSupportKHR = OP_vkGetPhysicalDeviceXcbPresentationSupportKHR;
14231 stream->write(&opcode_vkGetPhysicalDeviceXcbPresentationSupportKHR, sizeof(uint32_t));
14232 stream->write(&packetSize_vkGetPhysicalDeviceXcbPresentationSupportKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014233 uint64_t cgen_var_942;
14234 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_942, 1);
14235 stream->write((uint64_t*)&cgen_var_942, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014236 stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014237 stream->write((xcb_connection_t*)connection, sizeof(xcb_connection_t));
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014238 stream->write((xcb_visualid_t*)&local_visual_id, sizeof(xcb_visualid_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014239 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXcbPresentationSupportKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014240 stream->read((xcb_connection_t*)connection, sizeof(xcb_connection_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014241 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXcbPresentationSupportKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014242 VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return = (VkBool32)0;
14243 stream->read(&vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return, sizeof(VkBool32));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014244 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014245 countingStream->clearPool();
14246 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014247 mImpl->log("finish vkGetPhysicalDeviceXcbPresentationSupportKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014248 return vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return;
14249}
14250
14251#endif
14252#ifdef VK_KHR_wayland_surface
14253VkResult VkEncoder::vkCreateWaylandSurfaceKHR(
14254 VkInstance instance,
14255 const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
14256 const VkAllocationCallbacks* pAllocator,
14257 VkSurfaceKHR* pSurface)
14258{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014259 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014260 AEMU_SCOPED_TRACE("vkCreateWaylandSurfaceKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014261 mImpl->log("start vkCreateWaylandSurfaceKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014262 auto stream = mImpl->stream();
14263 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014264 auto resources = mImpl->resources();
14265 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014266 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014267 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014268 VkWaylandSurfaceCreateInfoKHR* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014269 VkAllocationCallbacks* local_pAllocator;
14270 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014271 local_pCreateInfo = nullptr;
14272 if (pCreateInfo)
14273 {
14274 local_pCreateInfo = (VkWaylandSurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkWaylandSurfaceCreateInfoKHR));
14275 deepcopy_VkWaylandSurfaceCreateInfoKHR(pool, pCreateInfo, (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo));
14276 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014277 local_pAllocator = nullptr;
14278 if (pAllocator)
14279 {
14280 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
14281 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
14282 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080014283 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080014284 if (local_pCreateInfo)
14285 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014286 transform_tohost_VkWaylandSurfaceCreateInfoKHR(mImpl->resources(), (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014287 }
14288 if (local_pAllocator)
14289 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014290 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014291 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014292 countingStream->rewind();
14293 {
David Reveman9875f2c2019-06-11 21:47:12 -040014294 uint64_t cgen_var_943;
14295 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_943, 1);
14296 countingStream->write((uint64_t*)&cgen_var_943, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014297 marshal_VkWaylandSurfaceCreateInfoKHR(countingStream, (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014298 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014299 uint64_t cgen_var_944 = (uint64_t)(uintptr_t)local_pAllocator;
14300 countingStream->putBe64(cgen_var_944);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014301 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014302 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014303 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014304 }
David Reveman9875f2c2019-06-11 21:47:12 -040014305 uint64_t cgen_var_945;
14306 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_945, 1);
14307 countingStream->write((uint64_t*)&cgen_var_945, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014308 }
14309 uint32_t packetSize_vkCreateWaylandSurfaceKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14310 countingStream->rewind();
14311 uint32_t opcode_vkCreateWaylandSurfaceKHR = OP_vkCreateWaylandSurfaceKHR;
14312 stream->write(&opcode_vkCreateWaylandSurfaceKHR, sizeof(uint32_t));
14313 stream->write(&packetSize_vkCreateWaylandSurfaceKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014314 uint64_t cgen_var_946;
14315 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_946, 1);
14316 stream->write((uint64_t*)&cgen_var_946, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014317 marshal_VkWaylandSurfaceCreateInfoKHR(stream, (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014318 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014319 uint64_t cgen_var_947 = (uint64_t)(uintptr_t)local_pAllocator;
14320 stream->putBe64(cgen_var_947);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014321 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014322 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014323 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014324 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080014325 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040014326 uint64_t cgen_var_948;
14327 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_948, 1);
14328 stream->write((uint64_t*)&cgen_var_948, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080014329 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014330 AEMU_SCOPED_TRACE("vkCreateWaylandSurfaceKHR readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040014331 uint64_t cgen_var_949;
14332 stream->read((uint64_t*)&cgen_var_949, 8);
14333 stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_949, (VkSurfaceKHR*)pSurface, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014334 AEMU_SCOPED_TRACE("vkCreateWaylandSurfaceKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014335 VkResult vkCreateWaylandSurfaceKHR_VkResult_return = (VkResult)0;
14336 stream->read(&vkCreateWaylandSurfaceKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014337 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014338 countingStream->clearPool();
14339 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014340 mImpl->log("finish vkCreateWaylandSurfaceKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014341 return vkCreateWaylandSurfaceKHR_VkResult_return;
14342}
14343
14344VkBool32 VkEncoder::vkGetPhysicalDeviceWaylandPresentationSupportKHR(
14345 VkPhysicalDevice physicalDevice,
14346 uint32_t queueFamilyIndex,
14347 wl_display* display)
14348{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014349 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014350 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWaylandPresentationSupportKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014351 mImpl->log("start vkGetPhysicalDeviceWaylandPresentationSupportKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014352 auto stream = mImpl->stream();
14353 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014354 auto resources = mImpl->resources();
14355 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014356 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014357 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014358 uint32_t local_queueFamilyIndex;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014359 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014360 local_queueFamilyIndex = queueFamilyIndex;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014361 countingStream->rewind();
14362 {
David Reveman9875f2c2019-06-11 21:47:12 -040014363 uint64_t cgen_var_950;
14364 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_950, 1);
14365 countingStream->write((uint64_t*)&cgen_var_950, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014366 countingStream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014367 countingStream->write((wl_display*)display, sizeof(wl_display));
14368 }
14369 uint32_t packetSize_vkGetPhysicalDeviceWaylandPresentationSupportKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14370 countingStream->rewind();
14371 uint32_t opcode_vkGetPhysicalDeviceWaylandPresentationSupportKHR = OP_vkGetPhysicalDeviceWaylandPresentationSupportKHR;
14372 stream->write(&opcode_vkGetPhysicalDeviceWaylandPresentationSupportKHR, sizeof(uint32_t));
14373 stream->write(&packetSize_vkGetPhysicalDeviceWaylandPresentationSupportKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014374 uint64_t cgen_var_951;
14375 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_951, 1);
14376 stream->write((uint64_t*)&cgen_var_951, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014377 stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014378 stream->write((wl_display*)display, sizeof(wl_display));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014379 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWaylandPresentationSupportKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014380 stream->read((wl_display*)display, sizeof(wl_display));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014381 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWaylandPresentationSupportKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014382 VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return = (VkBool32)0;
14383 stream->read(&vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return, sizeof(VkBool32));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014384 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014385 countingStream->clearPool();
14386 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014387 mImpl->log("finish vkGetPhysicalDeviceWaylandPresentationSupportKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014388 return vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return;
14389}
14390
14391#endif
14392#ifdef VK_KHR_mir_surface
14393VkResult VkEncoder::vkCreateMirSurfaceKHR(
14394 VkInstance instance,
14395 const VkMirSurfaceCreateInfoKHR* pCreateInfo,
14396 const VkAllocationCallbacks* pAllocator,
14397 VkSurfaceKHR* pSurface)
14398{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014399 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014400 AEMU_SCOPED_TRACE("vkCreateMirSurfaceKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014401 mImpl->log("start vkCreateMirSurfaceKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014402 auto stream = mImpl->stream();
14403 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014404 auto resources = mImpl->resources();
14405 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014406 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014407 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014408 VkMirSurfaceCreateInfoKHR* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014409 VkAllocationCallbacks* local_pAllocator;
14410 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014411 local_pCreateInfo = nullptr;
14412 if (pCreateInfo)
14413 {
14414 local_pCreateInfo = (VkMirSurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkMirSurfaceCreateInfoKHR));
14415 deepcopy_VkMirSurfaceCreateInfoKHR(pool, pCreateInfo, (VkMirSurfaceCreateInfoKHR*)(local_pCreateInfo));
14416 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014417 local_pAllocator = nullptr;
14418 if (pAllocator)
14419 {
14420 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
14421 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
14422 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080014423 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080014424 if (local_pCreateInfo)
14425 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014426 transform_tohost_VkMirSurfaceCreateInfoKHR(mImpl->resources(), (VkMirSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014427 }
14428 if (local_pAllocator)
14429 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014430 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014431 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014432 countingStream->rewind();
14433 {
David Reveman9875f2c2019-06-11 21:47:12 -040014434 uint64_t cgen_var_952;
14435 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_952, 1);
14436 countingStream->write((uint64_t*)&cgen_var_952, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014437 marshal_VkMirSurfaceCreateInfoKHR(countingStream, (VkMirSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014438 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014439 uint64_t cgen_var_953 = (uint64_t)(uintptr_t)local_pAllocator;
14440 countingStream->putBe64(cgen_var_953);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014441 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014442 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014443 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014444 }
David Reveman9875f2c2019-06-11 21:47:12 -040014445 uint64_t cgen_var_954;
14446 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_954, 1);
14447 countingStream->write((uint64_t*)&cgen_var_954, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014448 }
14449 uint32_t packetSize_vkCreateMirSurfaceKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14450 countingStream->rewind();
14451 uint32_t opcode_vkCreateMirSurfaceKHR = OP_vkCreateMirSurfaceKHR;
14452 stream->write(&opcode_vkCreateMirSurfaceKHR, sizeof(uint32_t));
14453 stream->write(&packetSize_vkCreateMirSurfaceKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014454 uint64_t cgen_var_955;
14455 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_955, 1);
14456 stream->write((uint64_t*)&cgen_var_955, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014457 marshal_VkMirSurfaceCreateInfoKHR(stream, (VkMirSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014458 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014459 uint64_t cgen_var_956 = (uint64_t)(uintptr_t)local_pAllocator;
14460 stream->putBe64(cgen_var_956);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014461 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014462 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014463 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014464 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080014465 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040014466 uint64_t cgen_var_957;
14467 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_957, 1);
14468 stream->write((uint64_t*)&cgen_var_957, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080014469 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014470 AEMU_SCOPED_TRACE("vkCreateMirSurfaceKHR readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040014471 uint64_t cgen_var_958;
14472 stream->read((uint64_t*)&cgen_var_958, 8);
14473 stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_958, (VkSurfaceKHR*)pSurface, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014474 AEMU_SCOPED_TRACE("vkCreateMirSurfaceKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014475 VkResult vkCreateMirSurfaceKHR_VkResult_return = (VkResult)0;
14476 stream->read(&vkCreateMirSurfaceKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014477 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014478 countingStream->clearPool();
14479 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014480 mImpl->log("finish vkCreateMirSurfaceKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014481 return vkCreateMirSurfaceKHR_VkResult_return;
14482}
14483
14484VkBool32 VkEncoder::vkGetPhysicalDeviceMirPresentationSupportKHR(
14485 VkPhysicalDevice physicalDevice,
14486 uint32_t queueFamilyIndex,
14487 MirConnection* connection)
14488{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014489 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014490 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMirPresentationSupportKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014491 mImpl->log("start vkGetPhysicalDeviceMirPresentationSupportKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014492 auto stream = mImpl->stream();
14493 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014494 auto resources = mImpl->resources();
14495 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014496 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014497 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014498 uint32_t local_queueFamilyIndex;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014499 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014500 local_queueFamilyIndex = queueFamilyIndex;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014501 countingStream->rewind();
14502 {
David Reveman9875f2c2019-06-11 21:47:12 -040014503 uint64_t cgen_var_959;
14504 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_959, 1);
14505 countingStream->write((uint64_t*)&cgen_var_959, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014506 countingStream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014507 countingStream->write((MirConnection*)connection, sizeof(MirConnection));
14508 }
14509 uint32_t packetSize_vkGetPhysicalDeviceMirPresentationSupportKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14510 countingStream->rewind();
14511 uint32_t opcode_vkGetPhysicalDeviceMirPresentationSupportKHR = OP_vkGetPhysicalDeviceMirPresentationSupportKHR;
14512 stream->write(&opcode_vkGetPhysicalDeviceMirPresentationSupportKHR, sizeof(uint32_t));
14513 stream->write(&packetSize_vkGetPhysicalDeviceMirPresentationSupportKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014514 uint64_t cgen_var_960;
14515 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_960, 1);
14516 stream->write((uint64_t*)&cgen_var_960, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014517 stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014518 stream->write((MirConnection*)connection, sizeof(MirConnection));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014519 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMirPresentationSupportKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014520 stream->read((MirConnection*)connection, sizeof(MirConnection));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014521 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMirPresentationSupportKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014522 VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return = (VkBool32)0;
14523 stream->read(&vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return, sizeof(VkBool32));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014524 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014525 countingStream->clearPool();
14526 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014527 mImpl->log("finish vkGetPhysicalDeviceMirPresentationSupportKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014528 return vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return;
14529}
14530
14531#endif
14532#ifdef VK_KHR_android_surface
14533VkResult VkEncoder::vkCreateAndroidSurfaceKHR(
14534 VkInstance instance,
14535 const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
14536 const VkAllocationCallbacks* pAllocator,
14537 VkSurfaceKHR* pSurface)
14538{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014539 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014540 AEMU_SCOPED_TRACE("vkCreateAndroidSurfaceKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014541 mImpl->log("start vkCreateAndroidSurfaceKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014542 auto stream = mImpl->stream();
14543 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014544 auto resources = mImpl->resources();
14545 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014546 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014547 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014548 VkAndroidSurfaceCreateInfoKHR* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014549 VkAllocationCallbacks* local_pAllocator;
14550 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014551 local_pCreateInfo = nullptr;
14552 if (pCreateInfo)
14553 {
14554 local_pCreateInfo = (VkAndroidSurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkAndroidSurfaceCreateInfoKHR));
14555 deepcopy_VkAndroidSurfaceCreateInfoKHR(pool, pCreateInfo, (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo));
14556 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014557 local_pAllocator = nullptr;
14558 if (pAllocator)
14559 {
14560 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
14561 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
14562 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080014563 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080014564 if (local_pCreateInfo)
14565 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014566 transform_tohost_VkAndroidSurfaceCreateInfoKHR(mImpl->resources(), (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014567 }
14568 if (local_pAllocator)
14569 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014570 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014571 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014572 countingStream->rewind();
14573 {
David Reveman9875f2c2019-06-11 21:47:12 -040014574 uint64_t cgen_var_961;
14575 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_961, 1);
14576 countingStream->write((uint64_t*)&cgen_var_961, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014577 marshal_VkAndroidSurfaceCreateInfoKHR(countingStream, (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014578 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014579 uint64_t cgen_var_962 = (uint64_t)(uintptr_t)local_pAllocator;
14580 countingStream->putBe64(cgen_var_962);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014581 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014582 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014583 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014584 }
David Reveman9875f2c2019-06-11 21:47:12 -040014585 uint64_t cgen_var_963;
14586 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_963, 1);
14587 countingStream->write((uint64_t*)&cgen_var_963, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014588 }
14589 uint32_t packetSize_vkCreateAndroidSurfaceKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14590 countingStream->rewind();
14591 uint32_t opcode_vkCreateAndroidSurfaceKHR = OP_vkCreateAndroidSurfaceKHR;
14592 stream->write(&opcode_vkCreateAndroidSurfaceKHR, sizeof(uint32_t));
14593 stream->write(&packetSize_vkCreateAndroidSurfaceKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014594 uint64_t cgen_var_964;
14595 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_964, 1);
14596 stream->write((uint64_t*)&cgen_var_964, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014597 marshal_VkAndroidSurfaceCreateInfoKHR(stream, (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014598 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014599 uint64_t cgen_var_965 = (uint64_t)(uintptr_t)local_pAllocator;
14600 stream->putBe64(cgen_var_965);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014601 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014602 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014603 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014604 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080014605 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040014606 uint64_t cgen_var_966;
14607 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_966, 1);
14608 stream->write((uint64_t*)&cgen_var_966, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080014609 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014610 AEMU_SCOPED_TRACE("vkCreateAndroidSurfaceKHR readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040014611 uint64_t cgen_var_967;
14612 stream->read((uint64_t*)&cgen_var_967, 8);
14613 stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_967, (VkSurfaceKHR*)pSurface, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014614 AEMU_SCOPED_TRACE("vkCreateAndroidSurfaceKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014615 VkResult vkCreateAndroidSurfaceKHR_VkResult_return = (VkResult)0;
14616 stream->read(&vkCreateAndroidSurfaceKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014617 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014618 countingStream->clearPool();
14619 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014620 mImpl->log("finish vkCreateAndroidSurfaceKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014621 return vkCreateAndroidSurfaceKHR_VkResult_return;
14622}
14623
14624#endif
14625#ifdef VK_KHR_win32_surface
14626VkResult VkEncoder::vkCreateWin32SurfaceKHR(
14627 VkInstance instance,
14628 const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
14629 const VkAllocationCallbacks* pAllocator,
14630 VkSurfaceKHR* pSurface)
14631{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014632 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014633 AEMU_SCOPED_TRACE("vkCreateWin32SurfaceKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014634 mImpl->log("start vkCreateWin32SurfaceKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014635 auto stream = mImpl->stream();
14636 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014637 auto resources = mImpl->resources();
14638 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014639 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014640 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014641 VkWin32SurfaceCreateInfoKHR* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014642 VkAllocationCallbacks* local_pAllocator;
14643 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014644 local_pCreateInfo = nullptr;
14645 if (pCreateInfo)
14646 {
14647 local_pCreateInfo = (VkWin32SurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkWin32SurfaceCreateInfoKHR));
14648 deepcopy_VkWin32SurfaceCreateInfoKHR(pool, pCreateInfo, (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo));
14649 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014650 local_pAllocator = nullptr;
14651 if (pAllocator)
14652 {
14653 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
14654 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
14655 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080014656 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080014657 if (local_pCreateInfo)
14658 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014659 transform_tohost_VkWin32SurfaceCreateInfoKHR(mImpl->resources(), (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014660 }
14661 if (local_pAllocator)
14662 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014663 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014664 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014665 countingStream->rewind();
14666 {
David Reveman9875f2c2019-06-11 21:47:12 -040014667 uint64_t cgen_var_968;
14668 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_968, 1);
14669 countingStream->write((uint64_t*)&cgen_var_968, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014670 marshal_VkWin32SurfaceCreateInfoKHR(countingStream, (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014671 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014672 uint64_t cgen_var_969 = (uint64_t)(uintptr_t)local_pAllocator;
14673 countingStream->putBe64(cgen_var_969);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014674 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014675 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014676 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014677 }
David Reveman9875f2c2019-06-11 21:47:12 -040014678 uint64_t cgen_var_970;
14679 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_970, 1);
14680 countingStream->write((uint64_t*)&cgen_var_970, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014681 }
14682 uint32_t packetSize_vkCreateWin32SurfaceKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14683 countingStream->rewind();
14684 uint32_t opcode_vkCreateWin32SurfaceKHR = OP_vkCreateWin32SurfaceKHR;
14685 stream->write(&opcode_vkCreateWin32SurfaceKHR, sizeof(uint32_t));
14686 stream->write(&packetSize_vkCreateWin32SurfaceKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014687 uint64_t cgen_var_971;
14688 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_971, 1);
14689 stream->write((uint64_t*)&cgen_var_971, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014690 marshal_VkWin32SurfaceCreateInfoKHR(stream, (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014691 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014692 uint64_t cgen_var_972 = (uint64_t)(uintptr_t)local_pAllocator;
14693 stream->putBe64(cgen_var_972);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014694 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014695 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014696 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014697 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080014698 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040014699 uint64_t cgen_var_973;
14700 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_973, 1);
14701 stream->write((uint64_t*)&cgen_var_973, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080014702 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014703 AEMU_SCOPED_TRACE("vkCreateWin32SurfaceKHR readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040014704 uint64_t cgen_var_974;
14705 stream->read((uint64_t*)&cgen_var_974, 8);
14706 stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_974, (VkSurfaceKHR*)pSurface, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014707 AEMU_SCOPED_TRACE("vkCreateWin32SurfaceKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014708 VkResult vkCreateWin32SurfaceKHR_VkResult_return = (VkResult)0;
14709 stream->read(&vkCreateWin32SurfaceKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014710 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014711 countingStream->clearPool();
14712 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014713 mImpl->log("finish vkCreateWin32SurfaceKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014714 return vkCreateWin32SurfaceKHR_VkResult_return;
14715}
14716
14717VkBool32 VkEncoder::vkGetPhysicalDeviceWin32PresentationSupportKHR(
14718 VkPhysicalDevice physicalDevice,
14719 uint32_t queueFamilyIndex)
14720{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014721 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014722 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWin32PresentationSupportKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014723 mImpl->log("start vkGetPhysicalDeviceWin32PresentationSupportKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014724 auto stream = mImpl->stream();
14725 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014726 auto resources = mImpl->resources();
14727 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014728 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014729 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014730 uint32_t local_queueFamilyIndex;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014731 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014732 local_queueFamilyIndex = queueFamilyIndex;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014733 countingStream->rewind();
14734 {
David Reveman9875f2c2019-06-11 21:47:12 -040014735 uint64_t cgen_var_975;
14736 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_975, 1);
14737 countingStream->write((uint64_t*)&cgen_var_975, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014738 countingStream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014739 }
14740 uint32_t packetSize_vkGetPhysicalDeviceWin32PresentationSupportKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14741 countingStream->rewind();
14742 uint32_t opcode_vkGetPhysicalDeviceWin32PresentationSupportKHR = OP_vkGetPhysicalDeviceWin32PresentationSupportKHR;
14743 stream->write(&opcode_vkGetPhysicalDeviceWin32PresentationSupportKHR, sizeof(uint32_t));
14744 stream->write(&packetSize_vkGetPhysicalDeviceWin32PresentationSupportKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014745 uint64_t cgen_var_976;
14746 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_976, 1);
14747 stream->write((uint64_t*)&cgen_var_976, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014748 stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014749 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWin32PresentationSupportKHR readParams");
14750 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWin32PresentationSupportKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014751 VkBool32 vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return = (VkBool32)0;
14752 stream->read(&vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return, sizeof(VkBool32));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014753 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014754 countingStream->clearPool();
14755 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014756 mImpl->log("finish vkGetPhysicalDeviceWin32PresentationSupportKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014757 return vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return;
14758}
14759
14760#endif
14761#ifdef VK_KHR_sampler_mirror_clamp_to_edge
14762#endif
14763#ifdef VK_KHR_multiview
14764#endif
14765#ifdef VK_KHR_get_physical_device_properties2
14766void VkEncoder::vkGetPhysicalDeviceFeatures2KHR(
14767 VkPhysicalDevice physicalDevice,
14768 VkPhysicalDeviceFeatures2* pFeatures)
14769{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014770 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014771 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014772 mImpl->log("start vkGetPhysicalDeviceFeatures2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014773 auto stream = mImpl->stream();
14774 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014775 auto resources = mImpl->resources();
14776 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014777 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014778 VkPhysicalDevice local_physicalDevice;
14779 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014780 countingStream->rewind();
14781 {
David Reveman9875f2c2019-06-11 21:47:12 -040014782 uint64_t cgen_var_977;
14783 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_977, 1);
14784 countingStream->write((uint64_t*)&cgen_var_977, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014785 marshal_VkPhysicalDeviceFeatures2(countingStream, (VkPhysicalDeviceFeatures2*)(pFeatures));
14786 }
14787 uint32_t packetSize_vkGetPhysicalDeviceFeatures2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14788 countingStream->rewind();
14789 uint32_t opcode_vkGetPhysicalDeviceFeatures2KHR = OP_vkGetPhysicalDeviceFeatures2KHR;
14790 stream->write(&opcode_vkGetPhysicalDeviceFeatures2KHR, sizeof(uint32_t));
14791 stream->write(&packetSize_vkGetPhysicalDeviceFeatures2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014792 uint64_t cgen_var_978;
14793 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_978, 1);
14794 stream->write((uint64_t*)&cgen_var_978, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014795 marshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014796 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2KHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014797 unmarshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
Lingfeng Yang97a06702018-12-24 17:02:43 -080014798 if (pFeatures)
14799 {
14800 transform_fromhost_VkPhysicalDeviceFeatures2(mImpl->resources(), (VkPhysicalDeviceFeatures2*)(pFeatures));
14801 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014802 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2KHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070014803 pool->freeAll();
14804 countingStream->clearPool();
14805 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014806 mImpl->log("finish vkGetPhysicalDeviceFeatures2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014807}
14808
14809void VkEncoder::vkGetPhysicalDeviceProperties2KHR(
14810 VkPhysicalDevice physicalDevice,
14811 VkPhysicalDeviceProperties2* pProperties)
14812{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014813 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014814 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014815 mImpl->log("start vkGetPhysicalDeviceProperties2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014816 auto stream = mImpl->stream();
14817 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014818 auto resources = mImpl->resources();
14819 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014820 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014821 VkPhysicalDevice local_physicalDevice;
14822 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014823 countingStream->rewind();
14824 {
David Reveman9875f2c2019-06-11 21:47:12 -040014825 uint64_t cgen_var_979;
14826 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_979, 1);
14827 countingStream->write((uint64_t*)&cgen_var_979, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014828 marshal_VkPhysicalDeviceProperties2(countingStream, (VkPhysicalDeviceProperties2*)(pProperties));
14829 }
14830 uint32_t packetSize_vkGetPhysicalDeviceProperties2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14831 countingStream->rewind();
14832 uint32_t opcode_vkGetPhysicalDeviceProperties2KHR = OP_vkGetPhysicalDeviceProperties2KHR;
14833 stream->write(&opcode_vkGetPhysicalDeviceProperties2KHR, sizeof(uint32_t));
14834 stream->write(&packetSize_vkGetPhysicalDeviceProperties2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014835 uint64_t cgen_var_980;
14836 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_980, 1);
14837 stream->write((uint64_t*)&cgen_var_980, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014838 marshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014839 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2KHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014840 unmarshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080014841 if (pProperties)
14842 {
14843 transform_fromhost_VkPhysicalDeviceProperties2(mImpl->resources(), (VkPhysicalDeviceProperties2*)(pProperties));
14844 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014845 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2KHR returnUnmarshal");
Yilong Lif3369082020-06-25 03:39:24 -070014846 mImpl->resources()->on_vkGetPhysicalDeviceProperties2KHR(this, physicalDevice, pProperties);
Lingfeng Yang256f9252020-07-14 14:27:33 -070014847 pool->freeAll();
14848 countingStream->clearPool();
14849 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014850 mImpl->log("finish vkGetPhysicalDeviceProperties2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014851}
14852
14853void VkEncoder::vkGetPhysicalDeviceFormatProperties2KHR(
14854 VkPhysicalDevice physicalDevice,
14855 VkFormat format,
14856 VkFormatProperties2* pFormatProperties)
14857{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014858 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014859 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014860 mImpl->log("start vkGetPhysicalDeviceFormatProperties2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014861 auto stream = mImpl->stream();
14862 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014863 auto resources = mImpl->resources();
14864 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014865 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014866 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014867 VkFormat local_format;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014868 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014869 local_format = format;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014870 countingStream->rewind();
14871 {
David Reveman9875f2c2019-06-11 21:47:12 -040014872 uint64_t cgen_var_981;
14873 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_981, 1);
14874 countingStream->write((uint64_t*)&cgen_var_981, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014875 countingStream->write((VkFormat*)&local_format, sizeof(VkFormat));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014876 marshal_VkFormatProperties2(countingStream, (VkFormatProperties2*)(pFormatProperties));
14877 }
14878 uint32_t packetSize_vkGetPhysicalDeviceFormatProperties2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14879 countingStream->rewind();
14880 uint32_t opcode_vkGetPhysicalDeviceFormatProperties2KHR = OP_vkGetPhysicalDeviceFormatProperties2KHR;
14881 stream->write(&opcode_vkGetPhysicalDeviceFormatProperties2KHR, sizeof(uint32_t));
14882 stream->write(&packetSize_vkGetPhysicalDeviceFormatProperties2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014883 uint64_t cgen_var_982;
14884 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_982, 1);
14885 stream->write((uint64_t*)&cgen_var_982, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014886 stream->write((VkFormat*)&local_format, sizeof(VkFormat));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014887 marshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014888 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2KHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014889 unmarshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080014890 if (pFormatProperties)
14891 {
14892 transform_fromhost_VkFormatProperties2(mImpl->resources(), (VkFormatProperties2*)(pFormatProperties));
14893 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014894 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2KHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070014895 pool->freeAll();
14896 countingStream->clearPool();
14897 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014898 mImpl->log("finish vkGetPhysicalDeviceFormatProperties2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014899}
14900
14901VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2KHR(
14902 VkPhysicalDevice physicalDevice,
14903 const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
14904 VkImageFormatProperties2* pImageFormatProperties)
14905{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014906 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014907 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014908 mImpl->log("start vkGetPhysicalDeviceImageFormatProperties2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014909 auto stream = mImpl->stream();
14910 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014911 auto resources = mImpl->resources();
14912 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014913 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014914 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014915 VkPhysicalDeviceImageFormatInfo2* local_pImageFormatInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080014916 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014917 local_pImageFormatInfo = nullptr;
14918 if (pImageFormatInfo)
14919 {
14920 local_pImageFormatInfo = (VkPhysicalDeviceImageFormatInfo2*)pool->alloc(sizeof(const VkPhysicalDeviceImageFormatInfo2));
14921 deepcopy_VkPhysicalDeviceImageFormatInfo2(pool, pImageFormatInfo, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
14922 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080014923 if (local_pImageFormatInfo)
14924 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080014925 transform_tohost_VkPhysicalDeviceImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080014926 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014927 countingStream->rewind();
14928 {
David Reveman9875f2c2019-06-11 21:47:12 -040014929 uint64_t cgen_var_983;
14930 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_983, 1);
14931 countingStream->write((uint64_t*)&cgen_var_983, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014932 marshal_VkPhysicalDeviceImageFormatInfo2(countingStream, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014933 marshal_VkImageFormatProperties2(countingStream, (VkImageFormatProperties2*)(pImageFormatProperties));
14934 }
14935 uint32_t packetSize_vkGetPhysicalDeviceImageFormatProperties2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
14936 countingStream->rewind();
14937 uint32_t opcode_vkGetPhysicalDeviceImageFormatProperties2KHR = OP_vkGetPhysicalDeviceImageFormatProperties2KHR;
14938 stream->write(&opcode_vkGetPhysicalDeviceImageFormatProperties2KHR, sizeof(uint32_t));
14939 stream->write(&packetSize_vkGetPhysicalDeviceImageFormatProperties2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040014940 uint64_t cgen_var_984;
14941 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_984, 1);
14942 stream->write((uint64_t*)&cgen_var_984, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014943 marshal_VkPhysicalDeviceImageFormatInfo2(stream, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014944 marshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014945 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2KHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014946 unmarshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080014947 if (pImageFormatProperties)
14948 {
14949 transform_fromhost_VkImageFormatProperties2(mImpl->resources(), (VkImageFormatProperties2*)(pImageFormatProperties));
14950 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014951 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2KHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014952 VkResult vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return = (VkResult)0;
14953 stream->read(&vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070014954 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080014955 countingStream->clearPool();
14956 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014957 mImpl->log("finish vkGetPhysicalDeviceImageFormatProperties2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014958 return vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return;
14959}
14960
14961void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties2KHR(
14962 VkPhysicalDevice physicalDevice,
14963 uint32_t* pQueueFamilyPropertyCount,
14964 VkQueueFamilyProperties2* pQueueFamilyProperties)
14965{
Lingfeng Yang256f9252020-07-14 14:27:33 -070014966 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080014967 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080014968 mImpl->log("start vkGetPhysicalDeviceQueueFamilyProperties2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014969 auto stream = mImpl->stream();
14970 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014971 auto resources = mImpl->resources();
14972 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080014973 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080014974 VkPhysicalDevice local_physicalDevice;
14975 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014976 countingStream->rewind();
14977 {
David Reveman9875f2c2019-06-11 21:47:12 -040014978 uint64_t cgen_var_985;
14979 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_985, 1);
14980 countingStream->write((uint64_t*)&cgen_var_985, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014981 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014982 uint64_t cgen_var_986 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
14983 countingStream->putBe64(cgen_var_986);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014984 if (pQueueFamilyPropertyCount)
14985 {
14986 countingStream->write((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
14987 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080014988 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040014989 uint64_t cgen_var_987 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
14990 countingStream->putBe64(cgen_var_987);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070014991 if (pQueueFamilyProperties)
14992 {
14993 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
14994 {
14995 marshal_VkQueueFamilyProperties2(countingStream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
14996 }
14997 }
14998 }
14999 uint32_t packetSize_vkGetPhysicalDeviceQueueFamilyProperties2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15000 countingStream->rewind();
15001 uint32_t opcode_vkGetPhysicalDeviceQueueFamilyProperties2KHR = OP_vkGetPhysicalDeviceQueueFamilyProperties2KHR;
15002 stream->write(&opcode_vkGetPhysicalDeviceQueueFamilyProperties2KHR, sizeof(uint32_t));
15003 stream->write(&packetSize_vkGetPhysicalDeviceQueueFamilyProperties2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015004 uint64_t cgen_var_988;
15005 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_988, 1);
15006 stream->write((uint64_t*)&cgen_var_988, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015007 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040015008 uint64_t cgen_var_989 = (uint64_t)(uintptr_t)pQueueFamilyPropertyCount;
15009 stream->putBe64(cgen_var_989);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015010 if (pQueueFamilyPropertyCount)
15011 {
15012 stream->write((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
15013 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015014 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040015015 uint64_t cgen_var_990 = (uint64_t)(uintptr_t)pQueueFamilyProperties;
15016 stream->putBe64(cgen_var_990);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015017 if (pQueueFamilyProperties)
15018 {
15019 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
15020 {
15021 marshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
15022 }
15023 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015024 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2KHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015025 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015026 uint32_t* check_pQueueFamilyPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015027 check_pQueueFamilyPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015028 if (pQueueFamilyPropertyCount)
15029 {
15030 if (!(check_pQueueFamilyPropertyCount))
15031 {
15032 fprintf(stderr, "fatal: pQueueFamilyPropertyCount inconsistent between guest and host\n");
15033 }
15034 stream->read((uint32_t*)pQueueFamilyPropertyCount, sizeof(uint32_t));
15035 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015036 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015037 VkQueueFamilyProperties2* check_pQueueFamilyProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015038 check_pQueueFamilyProperties = (VkQueueFamilyProperties2*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015039 if (pQueueFamilyProperties)
15040 {
15041 if (!(check_pQueueFamilyProperties))
15042 {
15043 fprintf(stderr, "fatal: pQueueFamilyProperties inconsistent between guest and host\n");
15044 }
15045 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
15046 {
15047 unmarshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
15048 }
15049 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080015050 if (pQueueFamilyProperties)
15051 {
15052 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
15053 {
15054 transform_fromhost_VkQueueFamilyProperties2(mImpl->resources(), (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
15055 }
15056 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015057 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2KHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070015058 pool->freeAll();
15059 countingStream->clearPool();
15060 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015061 mImpl->log("finish vkGetPhysicalDeviceQueueFamilyProperties2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015062}
15063
15064void VkEncoder::vkGetPhysicalDeviceMemoryProperties2KHR(
15065 VkPhysicalDevice physicalDevice,
15066 VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
15067{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015068 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015069 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015070 mImpl->log("start vkGetPhysicalDeviceMemoryProperties2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015071 auto stream = mImpl->stream();
15072 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015073 auto resources = mImpl->resources();
15074 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015075 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015076 VkPhysicalDevice local_physicalDevice;
15077 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015078 countingStream->rewind();
15079 {
David Reveman9875f2c2019-06-11 21:47:12 -040015080 uint64_t cgen_var_993;
15081 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_993, 1);
15082 countingStream->write((uint64_t*)&cgen_var_993, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015083 marshal_VkPhysicalDeviceMemoryProperties2(countingStream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
15084 }
15085 uint32_t packetSize_vkGetPhysicalDeviceMemoryProperties2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15086 countingStream->rewind();
15087 uint32_t opcode_vkGetPhysicalDeviceMemoryProperties2KHR = OP_vkGetPhysicalDeviceMemoryProperties2KHR;
15088 stream->write(&opcode_vkGetPhysicalDeviceMemoryProperties2KHR, sizeof(uint32_t));
15089 stream->write(&packetSize_vkGetPhysicalDeviceMemoryProperties2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015090 uint64_t cgen_var_994;
15091 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_994, 1);
15092 stream->write((uint64_t*)&cgen_var_994, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015093 marshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015094 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2KHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015095 unmarshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080015096 if (pMemoryProperties)
15097 {
15098 transform_fromhost_VkPhysicalDeviceMemoryProperties2(mImpl->resources(), (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
15099 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015100 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2KHR returnUnmarshal");
Lingfeng Yang154a33c2019-01-29 19:06:23 -080015101 mImpl->resources()->on_vkGetPhysicalDeviceMemoryProperties2KHR(this, physicalDevice, pMemoryProperties);
Lingfeng Yang256f9252020-07-14 14:27:33 -070015102 pool->freeAll();
15103 countingStream->clearPool();
15104 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015105 mImpl->log("finish vkGetPhysicalDeviceMemoryProperties2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015106}
15107
15108void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
15109 VkPhysicalDevice physicalDevice,
15110 const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
15111 uint32_t* pPropertyCount,
15112 VkSparseImageFormatProperties2* pProperties)
15113{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015114 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015115 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015116 mImpl->log("start vkGetPhysicalDeviceSparseImageFormatProperties2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015117 auto stream = mImpl->stream();
15118 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015119 auto resources = mImpl->resources();
15120 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015121 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015122 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015123 VkPhysicalDeviceSparseImageFormatInfo2* local_pFormatInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015124 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015125 local_pFormatInfo = nullptr;
15126 if (pFormatInfo)
15127 {
15128 local_pFormatInfo = (VkPhysicalDeviceSparseImageFormatInfo2*)pool->alloc(sizeof(const VkPhysicalDeviceSparseImageFormatInfo2));
15129 deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(pool, pFormatInfo, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
15130 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080015131 if (local_pFormatInfo)
15132 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080015133 transform_tohost_VkPhysicalDeviceSparseImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080015134 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015135 countingStream->rewind();
15136 {
David Reveman9875f2c2019-06-11 21:47:12 -040015137 uint64_t cgen_var_995;
15138 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_995, 1);
15139 countingStream->write((uint64_t*)&cgen_var_995, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015140 marshal_VkPhysicalDeviceSparseImageFormatInfo2(countingStream, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015141 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040015142 uint64_t cgen_var_996 = (uint64_t)(uintptr_t)pPropertyCount;
15143 countingStream->putBe64(cgen_var_996);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015144 if (pPropertyCount)
15145 {
15146 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
15147 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015148 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040015149 uint64_t cgen_var_997 = (uint64_t)(uintptr_t)pProperties;
15150 countingStream->putBe64(cgen_var_997);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015151 if (pProperties)
15152 {
15153 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
15154 {
15155 marshal_VkSparseImageFormatProperties2(countingStream, (VkSparseImageFormatProperties2*)(pProperties + i));
15156 }
15157 }
15158 }
15159 uint32_t packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15160 countingStream->rewind();
15161 uint32_t opcode_vkGetPhysicalDeviceSparseImageFormatProperties2KHR = OP_vkGetPhysicalDeviceSparseImageFormatProperties2KHR;
15162 stream->write(&opcode_vkGetPhysicalDeviceSparseImageFormatProperties2KHR, sizeof(uint32_t));
15163 stream->write(&packetSize_vkGetPhysicalDeviceSparseImageFormatProperties2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015164 uint64_t cgen_var_998;
15165 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_998, 1);
15166 stream->write((uint64_t*)&cgen_var_998, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015167 marshal_VkPhysicalDeviceSparseImageFormatInfo2(stream, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015168 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040015169 uint64_t cgen_var_999 = (uint64_t)(uintptr_t)pPropertyCount;
15170 stream->putBe64(cgen_var_999);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015171 if (pPropertyCount)
15172 {
15173 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
15174 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015175 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040015176 uint64_t cgen_var_1000 = (uint64_t)(uintptr_t)pProperties;
15177 stream->putBe64(cgen_var_1000);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015178 if (pProperties)
15179 {
15180 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
15181 {
15182 marshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i));
15183 }
15184 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015185 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2KHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015186 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015187 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015188 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015189 if (pPropertyCount)
15190 {
15191 if (!(check_pPropertyCount))
15192 {
15193 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
15194 }
15195 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
15196 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015197 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015198 VkSparseImageFormatProperties2* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015199 check_pProperties = (VkSparseImageFormatProperties2*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015200 if (pProperties)
15201 {
15202 if (!(check_pProperties))
15203 {
15204 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
15205 }
15206 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
15207 {
15208 unmarshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i));
15209 }
15210 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080015211 if (pProperties)
15212 {
15213 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
15214 {
15215 transform_fromhost_VkSparseImageFormatProperties2(mImpl->resources(), (VkSparseImageFormatProperties2*)(pProperties + i));
15216 }
15217 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015218 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2KHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070015219 pool->freeAll();
15220 countingStream->clearPool();
15221 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015222 mImpl->log("finish vkGetPhysicalDeviceSparseImageFormatProperties2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015223}
15224
15225#endif
15226#ifdef VK_KHR_device_group
15227void VkEncoder::vkGetDeviceGroupPeerMemoryFeaturesKHR(
15228 VkDevice device,
15229 uint32_t heapIndex,
15230 uint32_t localDeviceIndex,
15231 uint32_t remoteDeviceIndex,
15232 VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
15233{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015234 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015235 AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeaturesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015236 mImpl->log("start vkGetDeviceGroupPeerMemoryFeaturesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015237 auto stream = mImpl->stream();
15238 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015239 auto resources = mImpl->resources();
15240 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015241 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015242 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015243 uint32_t local_heapIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015244 uint32_t local_localDeviceIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015245 uint32_t local_remoteDeviceIndex;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015246 local_device = device;
15247 local_heapIndex = heapIndex;
15248 local_localDeviceIndex = localDeviceIndex;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015249 local_remoteDeviceIndex = remoteDeviceIndex;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015250 countingStream->rewind();
15251 {
David Reveman9875f2c2019-06-11 21:47:12 -040015252 uint64_t cgen_var_1003;
15253 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1003, 1);
15254 countingStream->write((uint64_t*)&cgen_var_1003, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015255 countingStream->write((uint32_t*)&local_heapIndex, sizeof(uint32_t));
15256 countingStream->write((uint32_t*)&local_localDeviceIndex, sizeof(uint32_t));
15257 countingStream->write((uint32_t*)&local_remoteDeviceIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015258 countingStream->write((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
15259 }
15260 uint32_t packetSize_vkGetDeviceGroupPeerMemoryFeaturesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15261 countingStream->rewind();
15262 uint32_t opcode_vkGetDeviceGroupPeerMemoryFeaturesKHR = OP_vkGetDeviceGroupPeerMemoryFeaturesKHR;
15263 stream->write(&opcode_vkGetDeviceGroupPeerMemoryFeaturesKHR, sizeof(uint32_t));
15264 stream->write(&packetSize_vkGetDeviceGroupPeerMemoryFeaturesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015265 uint64_t cgen_var_1004;
15266 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1004, 1);
15267 stream->write((uint64_t*)&cgen_var_1004, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015268 stream->write((uint32_t*)&local_heapIndex, sizeof(uint32_t));
15269 stream->write((uint32_t*)&local_localDeviceIndex, sizeof(uint32_t));
15270 stream->write((uint32_t*)&local_remoteDeviceIndex, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015271 stream->write((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015272 AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeaturesKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015273 stream->read((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015274 AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeaturesKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070015275 pool->freeAll();
15276 countingStream->clearPool();
15277 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015278 mImpl->log("finish vkGetDeviceGroupPeerMemoryFeaturesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015279}
15280
15281void VkEncoder::vkCmdSetDeviceMaskKHR(
15282 VkCommandBuffer commandBuffer,
15283 uint32_t deviceMask)
15284{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015285 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015286 AEMU_SCOPED_TRACE("vkCmdSetDeviceMaskKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015287 mImpl->log("start vkCmdSetDeviceMaskKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015288 auto stream = mImpl->stream();
15289 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015290 auto resources = mImpl->resources();
15291 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015292 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015293 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015294 uint32_t local_deviceMask;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015295 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015296 local_deviceMask = deviceMask;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015297 countingStream->rewind();
15298 {
David Reveman9875f2c2019-06-11 21:47:12 -040015299 uint64_t cgen_var_1005;
15300 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1005, 1);
15301 countingStream->write((uint64_t*)&cgen_var_1005, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015302 countingStream->write((uint32_t*)&local_deviceMask, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015303 }
15304 uint32_t packetSize_vkCmdSetDeviceMaskKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15305 countingStream->rewind();
15306 uint32_t opcode_vkCmdSetDeviceMaskKHR = OP_vkCmdSetDeviceMaskKHR;
15307 stream->write(&opcode_vkCmdSetDeviceMaskKHR, sizeof(uint32_t));
15308 stream->write(&packetSize_vkCmdSetDeviceMaskKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015309 uint64_t cgen_var_1006;
15310 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1006, 1);
15311 stream->write((uint64_t*)&cgen_var_1006, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015312 stream->write((uint32_t*)&local_deviceMask, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015313 AEMU_SCOPED_TRACE("vkCmdSetDeviceMaskKHR readParams");
15314 AEMU_SCOPED_TRACE("vkCmdSetDeviceMaskKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070015315 pool->freeAll();
15316 countingStream->clearPool();
15317 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015318 mImpl->log("finish vkCmdSetDeviceMaskKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015319}
15320
15321void VkEncoder::vkCmdDispatchBaseKHR(
15322 VkCommandBuffer commandBuffer,
15323 uint32_t baseGroupX,
15324 uint32_t baseGroupY,
15325 uint32_t baseGroupZ,
15326 uint32_t groupCountX,
15327 uint32_t groupCountY,
15328 uint32_t groupCountZ)
15329{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015330 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015331 AEMU_SCOPED_TRACE("vkCmdDispatchBaseKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015332 mImpl->log("start vkCmdDispatchBaseKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015333 auto stream = mImpl->stream();
15334 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015335 auto resources = mImpl->resources();
15336 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015337 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015338 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015339 uint32_t local_baseGroupX;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015340 uint32_t local_baseGroupY;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015341 uint32_t local_baseGroupZ;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015342 uint32_t local_groupCountX;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015343 uint32_t local_groupCountY;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015344 uint32_t local_groupCountZ;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015345 local_commandBuffer = commandBuffer;
15346 local_baseGroupX = baseGroupX;
15347 local_baseGroupY = baseGroupY;
15348 local_baseGroupZ = baseGroupZ;
15349 local_groupCountX = groupCountX;
15350 local_groupCountY = groupCountY;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015351 local_groupCountZ = groupCountZ;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015352 countingStream->rewind();
15353 {
David Reveman9875f2c2019-06-11 21:47:12 -040015354 uint64_t cgen_var_1007;
15355 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1007, 1);
15356 countingStream->write((uint64_t*)&cgen_var_1007, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015357 countingStream->write((uint32_t*)&local_baseGroupX, sizeof(uint32_t));
15358 countingStream->write((uint32_t*)&local_baseGroupY, sizeof(uint32_t));
15359 countingStream->write((uint32_t*)&local_baseGroupZ, sizeof(uint32_t));
15360 countingStream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
15361 countingStream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
15362 countingStream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015363 }
15364 uint32_t packetSize_vkCmdDispatchBaseKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15365 countingStream->rewind();
15366 uint32_t opcode_vkCmdDispatchBaseKHR = OP_vkCmdDispatchBaseKHR;
15367 stream->write(&opcode_vkCmdDispatchBaseKHR, sizeof(uint32_t));
15368 stream->write(&packetSize_vkCmdDispatchBaseKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015369 uint64_t cgen_var_1008;
15370 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1008, 1);
15371 stream->write((uint64_t*)&cgen_var_1008, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015372 stream->write((uint32_t*)&local_baseGroupX, sizeof(uint32_t));
15373 stream->write((uint32_t*)&local_baseGroupY, sizeof(uint32_t));
15374 stream->write((uint32_t*)&local_baseGroupZ, sizeof(uint32_t));
15375 stream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
15376 stream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
15377 stream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015378 AEMU_SCOPED_TRACE("vkCmdDispatchBaseKHR readParams");
15379 AEMU_SCOPED_TRACE("vkCmdDispatchBaseKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070015380 pool->freeAll();
15381 countingStream->clearPool();
15382 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015383 mImpl->log("finish vkCmdDispatchBaseKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015384}
15385
15386#endif
15387#ifdef VK_KHR_shader_draw_parameters
15388#endif
15389#ifdef VK_KHR_maintenance1
15390void VkEncoder::vkTrimCommandPoolKHR(
15391 VkDevice device,
15392 VkCommandPool commandPool,
15393 VkCommandPoolTrimFlags flags)
15394{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015395 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015396 AEMU_SCOPED_TRACE("vkTrimCommandPoolKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015397 mImpl->log("start vkTrimCommandPoolKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015398 auto stream = mImpl->stream();
15399 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015400 auto resources = mImpl->resources();
15401 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015402 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015403 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015404 VkCommandPool local_commandPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015405 VkCommandPoolTrimFlags local_flags;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015406 local_device = device;
15407 local_commandPool = commandPool;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015408 local_flags = flags;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015409 countingStream->rewind();
15410 {
David Reveman9875f2c2019-06-11 21:47:12 -040015411 uint64_t cgen_var_1009;
15412 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1009, 1);
15413 countingStream->write((uint64_t*)&cgen_var_1009, 1 * 8);
15414 uint64_t cgen_var_1010;
15415 countingStream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_1010, 1);
15416 countingStream->write((uint64_t*)&cgen_var_1010, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015417 countingStream->write((VkCommandPoolTrimFlags*)&local_flags, sizeof(VkCommandPoolTrimFlags));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015418 }
15419 uint32_t packetSize_vkTrimCommandPoolKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15420 countingStream->rewind();
15421 uint32_t opcode_vkTrimCommandPoolKHR = OP_vkTrimCommandPoolKHR;
15422 stream->write(&opcode_vkTrimCommandPoolKHR, sizeof(uint32_t));
15423 stream->write(&packetSize_vkTrimCommandPoolKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015424 uint64_t cgen_var_1011;
15425 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1011, 1);
15426 stream->write((uint64_t*)&cgen_var_1011, 1 * 8);
15427 uint64_t cgen_var_1012;
15428 stream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_1012, 1);
15429 stream->write((uint64_t*)&cgen_var_1012, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015430 stream->write((VkCommandPoolTrimFlags*)&local_flags, sizeof(VkCommandPoolTrimFlags));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015431 AEMU_SCOPED_TRACE("vkTrimCommandPoolKHR readParams");
15432 AEMU_SCOPED_TRACE("vkTrimCommandPoolKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070015433 pool->freeAll();
15434 countingStream->clearPool();
15435 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015436 mImpl->log("finish vkTrimCommandPoolKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015437}
15438
15439#endif
15440#ifdef VK_KHR_device_group_creation
15441VkResult VkEncoder::vkEnumeratePhysicalDeviceGroupsKHR(
15442 VkInstance instance,
15443 uint32_t* pPhysicalDeviceGroupCount,
15444 VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
15445{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015446 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015447 AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroupsKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015448 mImpl->log("start vkEnumeratePhysicalDeviceGroupsKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015449 auto stream = mImpl->stream();
15450 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015451 auto resources = mImpl->resources();
15452 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015453 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015454 VkInstance local_instance;
15455 local_instance = instance;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015456 countingStream->rewind();
15457 {
David Reveman9875f2c2019-06-11 21:47:12 -040015458 uint64_t cgen_var_1013;
15459 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1013, 1);
15460 countingStream->write((uint64_t*)&cgen_var_1013, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015461 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040015462 uint64_t cgen_var_1014 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupCount;
15463 countingStream->putBe64(cgen_var_1014);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015464 if (pPhysicalDeviceGroupCount)
15465 {
15466 countingStream->write((uint32_t*)pPhysicalDeviceGroupCount, sizeof(uint32_t));
15467 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015468 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040015469 uint64_t cgen_var_1015 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupProperties;
15470 countingStream->putBe64(cgen_var_1015);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015471 if (pPhysicalDeviceGroupProperties)
15472 {
15473 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
15474 {
15475 marshal_VkPhysicalDeviceGroupProperties(countingStream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
15476 }
15477 }
15478 }
15479 uint32_t packetSize_vkEnumeratePhysicalDeviceGroupsKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15480 countingStream->rewind();
15481 uint32_t opcode_vkEnumeratePhysicalDeviceGroupsKHR = OP_vkEnumeratePhysicalDeviceGroupsKHR;
15482 stream->write(&opcode_vkEnumeratePhysicalDeviceGroupsKHR, sizeof(uint32_t));
15483 stream->write(&packetSize_vkEnumeratePhysicalDeviceGroupsKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015484 uint64_t cgen_var_1016;
15485 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1016, 1);
15486 stream->write((uint64_t*)&cgen_var_1016, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015487 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040015488 uint64_t cgen_var_1017 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupCount;
15489 stream->putBe64(cgen_var_1017);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015490 if (pPhysicalDeviceGroupCount)
15491 {
15492 stream->write((uint32_t*)pPhysicalDeviceGroupCount, sizeof(uint32_t));
15493 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015494 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040015495 uint64_t cgen_var_1018 = (uint64_t)(uintptr_t)pPhysicalDeviceGroupProperties;
15496 stream->putBe64(cgen_var_1018);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015497 if (pPhysicalDeviceGroupProperties)
15498 {
15499 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
15500 {
15501 marshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
15502 }
15503 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015504 AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroupsKHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015505 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015506 uint32_t* check_pPhysicalDeviceGroupCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015507 check_pPhysicalDeviceGroupCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015508 if (pPhysicalDeviceGroupCount)
15509 {
15510 if (!(check_pPhysicalDeviceGroupCount))
15511 {
15512 fprintf(stderr, "fatal: pPhysicalDeviceGroupCount inconsistent between guest and host\n");
15513 }
15514 stream->read((uint32_t*)pPhysicalDeviceGroupCount, sizeof(uint32_t));
15515 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015516 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015517 VkPhysicalDeviceGroupProperties* check_pPhysicalDeviceGroupProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080015518 check_pPhysicalDeviceGroupProperties = (VkPhysicalDeviceGroupProperties*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015519 if (pPhysicalDeviceGroupProperties)
15520 {
15521 if (!(check_pPhysicalDeviceGroupProperties))
15522 {
15523 fprintf(stderr, "fatal: pPhysicalDeviceGroupProperties inconsistent between guest and host\n");
15524 }
15525 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
15526 {
15527 unmarshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
15528 }
15529 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080015530 if (pPhysicalDeviceGroupProperties)
15531 {
15532 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
15533 {
15534 transform_fromhost_VkPhysicalDeviceGroupProperties(mImpl->resources(), (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
15535 }
15536 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015537 AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroupsKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015538 VkResult vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return = (VkResult)0;
15539 stream->read(&vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070015540 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080015541 countingStream->clearPool();
15542 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015543 mImpl->log("finish vkEnumeratePhysicalDeviceGroupsKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015544 return vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return;
15545}
15546
15547#endif
15548#ifdef VK_KHR_external_memory_capabilities
15549void VkEncoder::vkGetPhysicalDeviceExternalBufferPropertiesKHR(
15550 VkPhysicalDevice physicalDevice,
15551 const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
15552 VkExternalBufferProperties* pExternalBufferProperties)
15553{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015554 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015555 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferPropertiesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015556 mImpl->log("start vkGetPhysicalDeviceExternalBufferPropertiesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015557 auto stream = mImpl->stream();
15558 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015559 auto resources = mImpl->resources();
15560 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015561 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015562 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015563 VkPhysicalDeviceExternalBufferInfo* local_pExternalBufferInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015564 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015565 local_pExternalBufferInfo = nullptr;
15566 if (pExternalBufferInfo)
15567 {
15568 local_pExternalBufferInfo = (VkPhysicalDeviceExternalBufferInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalBufferInfo));
15569 deepcopy_VkPhysicalDeviceExternalBufferInfo(pool, pExternalBufferInfo, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
15570 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080015571 if (local_pExternalBufferInfo)
15572 {
Lingfeng Yang2b1b8cf2019-02-08 09:53:36 -080015573 mImpl->resources()->transformImpl_VkPhysicalDeviceExternalBufferInfo_tohost(local_pExternalBufferInfo, 1);
Lingfeng Yang97a06702018-12-24 17:02:43 -080015574 transform_tohost_VkPhysicalDeviceExternalBufferInfo(mImpl->resources(), (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080015575 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015576 countingStream->rewind();
15577 {
David Reveman9875f2c2019-06-11 21:47:12 -040015578 uint64_t cgen_var_1021;
15579 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1021, 1);
15580 countingStream->write((uint64_t*)&cgen_var_1021, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015581 marshal_VkPhysicalDeviceExternalBufferInfo(countingStream, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015582 marshal_VkExternalBufferProperties(countingStream, (VkExternalBufferProperties*)(pExternalBufferProperties));
15583 }
15584 uint32_t packetSize_vkGetPhysicalDeviceExternalBufferPropertiesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15585 countingStream->rewind();
15586 uint32_t opcode_vkGetPhysicalDeviceExternalBufferPropertiesKHR = OP_vkGetPhysicalDeviceExternalBufferPropertiesKHR;
15587 stream->write(&opcode_vkGetPhysicalDeviceExternalBufferPropertiesKHR, sizeof(uint32_t));
15588 stream->write(&packetSize_vkGetPhysicalDeviceExternalBufferPropertiesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015589 uint64_t cgen_var_1022;
15590 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1022, 1);
15591 stream->write((uint64_t*)&cgen_var_1022, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015592 marshal_VkPhysicalDeviceExternalBufferInfo(stream, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015593 marshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015594 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferPropertiesKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015595 unmarshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080015596 if (pExternalBufferProperties)
15597 {
Lingfeng Yang2b1b8cf2019-02-08 09:53:36 -080015598 mImpl->resources()->transformImpl_VkExternalBufferProperties_fromhost(pExternalBufferProperties, 1);
Lingfeng Yang97a06702018-12-24 17:02:43 -080015599 transform_fromhost_VkExternalBufferProperties(mImpl->resources(), (VkExternalBufferProperties*)(pExternalBufferProperties));
15600 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015601 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferPropertiesKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070015602 pool->freeAll();
15603 countingStream->clearPool();
15604 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015605 mImpl->log("finish vkGetPhysicalDeviceExternalBufferPropertiesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015606}
15607
15608#endif
15609#ifdef VK_KHR_external_memory
15610#endif
15611#ifdef VK_KHR_external_memory_win32
15612VkResult VkEncoder::vkGetMemoryWin32HandleKHR(
15613 VkDevice device,
15614 const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
15615 HANDLE* pHandle)
15616{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015617 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015618 AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015619 mImpl->log("start vkGetMemoryWin32HandleKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015620 auto stream = mImpl->stream();
15621 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015622 auto resources = mImpl->resources();
15623 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015624 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015625 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015626 VkMemoryGetWin32HandleInfoKHR* local_pGetWin32HandleInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015627 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015628 local_pGetWin32HandleInfo = nullptr;
15629 if (pGetWin32HandleInfo)
15630 {
15631 local_pGetWin32HandleInfo = (VkMemoryGetWin32HandleInfoKHR*)pool->alloc(sizeof(const VkMemoryGetWin32HandleInfoKHR));
15632 deepcopy_VkMemoryGetWin32HandleInfoKHR(pool, pGetWin32HandleInfo, (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
15633 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080015634 if (local_pGetWin32HandleInfo)
15635 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080015636 transform_tohost_VkMemoryGetWin32HandleInfoKHR(mImpl->resources(), (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080015637 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015638 countingStream->rewind();
15639 {
David Reveman9875f2c2019-06-11 21:47:12 -040015640 uint64_t cgen_var_1023;
15641 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1023, 1);
15642 countingStream->write((uint64_t*)&cgen_var_1023, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015643 marshal_VkMemoryGetWin32HandleInfoKHR(countingStream, (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015644 countingStream->write((HANDLE*)pHandle, sizeof(HANDLE));
15645 }
15646 uint32_t packetSize_vkGetMemoryWin32HandleKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15647 countingStream->rewind();
15648 uint32_t opcode_vkGetMemoryWin32HandleKHR = OP_vkGetMemoryWin32HandleKHR;
15649 stream->write(&opcode_vkGetMemoryWin32HandleKHR, sizeof(uint32_t));
15650 stream->write(&packetSize_vkGetMemoryWin32HandleKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015651 uint64_t cgen_var_1024;
15652 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1024, 1);
15653 stream->write((uint64_t*)&cgen_var_1024, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015654 marshal_VkMemoryGetWin32HandleInfoKHR(stream, (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015655 stream->write((HANDLE*)pHandle, sizeof(HANDLE));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015656 AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015657 stream->read((HANDLE*)pHandle, sizeof(HANDLE));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015658 AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015659 VkResult vkGetMemoryWin32HandleKHR_VkResult_return = (VkResult)0;
15660 stream->read(&vkGetMemoryWin32HandleKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070015661 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080015662 countingStream->clearPool();
15663 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015664 mImpl->log("finish vkGetMemoryWin32HandleKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015665 return vkGetMemoryWin32HandleKHR_VkResult_return;
15666}
15667
15668VkResult VkEncoder::vkGetMemoryWin32HandlePropertiesKHR(
15669 VkDevice device,
15670 VkExternalMemoryHandleTypeFlagBits handleType,
15671 HANDLE handle,
15672 VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties)
15673{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015674 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015675 AEMU_SCOPED_TRACE("vkGetMemoryWin32HandlePropertiesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015676 mImpl->log("start vkGetMemoryWin32HandlePropertiesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015677 auto stream = mImpl->stream();
15678 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015679 auto resources = mImpl->resources();
15680 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015681 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015682 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015683 VkExternalMemoryHandleTypeFlagBits local_handleType;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015684 HANDLE local_handle;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015685 local_device = device;
15686 local_handleType = handleType;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015687 local_handle = handle;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015688 countingStream->rewind();
15689 {
David Reveman9875f2c2019-06-11 21:47:12 -040015690 uint64_t cgen_var_1025;
15691 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1025, 1);
15692 countingStream->write((uint64_t*)&cgen_var_1025, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015693 countingStream->write((VkExternalMemoryHandleTypeFlagBits*)&local_handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
15694 countingStream->write((HANDLE*)&local_handle, sizeof(HANDLE));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015695 marshal_VkMemoryWin32HandlePropertiesKHR(countingStream, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
15696 }
15697 uint32_t packetSize_vkGetMemoryWin32HandlePropertiesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15698 countingStream->rewind();
15699 uint32_t opcode_vkGetMemoryWin32HandlePropertiesKHR = OP_vkGetMemoryWin32HandlePropertiesKHR;
15700 stream->write(&opcode_vkGetMemoryWin32HandlePropertiesKHR, sizeof(uint32_t));
15701 stream->write(&packetSize_vkGetMemoryWin32HandlePropertiesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015702 uint64_t cgen_var_1026;
15703 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1026, 1);
15704 stream->write((uint64_t*)&cgen_var_1026, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015705 stream->write((VkExternalMemoryHandleTypeFlagBits*)&local_handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
15706 stream->write((HANDLE*)&local_handle, sizeof(HANDLE));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015707 marshal_VkMemoryWin32HandlePropertiesKHR(stream, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015708 AEMU_SCOPED_TRACE("vkGetMemoryWin32HandlePropertiesKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015709 unmarshal_VkMemoryWin32HandlePropertiesKHR(stream, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080015710 if (pMemoryWin32HandleProperties)
15711 {
15712 transform_fromhost_VkMemoryWin32HandlePropertiesKHR(mImpl->resources(), (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
15713 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015714 AEMU_SCOPED_TRACE("vkGetMemoryWin32HandlePropertiesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015715 VkResult vkGetMemoryWin32HandlePropertiesKHR_VkResult_return = (VkResult)0;
15716 stream->read(&vkGetMemoryWin32HandlePropertiesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070015717 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080015718 countingStream->clearPool();
15719 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015720 mImpl->log("finish vkGetMemoryWin32HandlePropertiesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015721 return vkGetMemoryWin32HandlePropertiesKHR_VkResult_return;
15722}
15723
15724#endif
15725#ifdef VK_KHR_external_memory_fd
15726VkResult VkEncoder::vkGetMemoryFdKHR(
15727 VkDevice device,
15728 const VkMemoryGetFdInfoKHR* pGetFdInfo,
15729 int* pFd)
15730{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015731 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015732 AEMU_SCOPED_TRACE("vkGetMemoryFdKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015733 mImpl->log("start vkGetMemoryFdKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015734 auto stream = mImpl->stream();
15735 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015736 auto resources = mImpl->resources();
15737 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015738 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015739 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015740 VkMemoryGetFdInfoKHR* local_pGetFdInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015741 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015742 local_pGetFdInfo = nullptr;
15743 if (pGetFdInfo)
15744 {
15745 local_pGetFdInfo = (VkMemoryGetFdInfoKHR*)pool->alloc(sizeof(const VkMemoryGetFdInfoKHR));
15746 deepcopy_VkMemoryGetFdInfoKHR(pool, pGetFdInfo, (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo));
15747 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080015748 if (local_pGetFdInfo)
15749 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080015750 transform_tohost_VkMemoryGetFdInfoKHR(mImpl->resources(), (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080015751 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015752 countingStream->rewind();
15753 {
David Reveman9875f2c2019-06-11 21:47:12 -040015754 uint64_t cgen_var_1027;
15755 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1027, 1);
15756 countingStream->write((uint64_t*)&cgen_var_1027, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015757 marshal_VkMemoryGetFdInfoKHR(countingStream, (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015758 countingStream->write((int*)pFd, sizeof(int));
15759 }
15760 uint32_t packetSize_vkGetMemoryFdKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15761 countingStream->rewind();
15762 uint32_t opcode_vkGetMemoryFdKHR = OP_vkGetMemoryFdKHR;
15763 stream->write(&opcode_vkGetMemoryFdKHR, sizeof(uint32_t));
15764 stream->write(&packetSize_vkGetMemoryFdKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015765 uint64_t cgen_var_1028;
15766 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1028, 1);
15767 stream->write((uint64_t*)&cgen_var_1028, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015768 marshal_VkMemoryGetFdInfoKHR(stream, (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015769 stream->write((int*)pFd, sizeof(int));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015770 AEMU_SCOPED_TRACE("vkGetMemoryFdKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015771 stream->read((int*)pFd, sizeof(int));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015772 AEMU_SCOPED_TRACE("vkGetMemoryFdKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015773 VkResult vkGetMemoryFdKHR_VkResult_return = (VkResult)0;
15774 stream->read(&vkGetMemoryFdKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070015775 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080015776 countingStream->clearPool();
15777 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015778 mImpl->log("finish vkGetMemoryFdKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015779 return vkGetMemoryFdKHR_VkResult_return;
15780}
15781
15782VkResult VkEncoder::vkGetMemoryFdPropertiesKHR(
15783 VkDevice device,
15784 VkExternalMemoryHandleTypeFlagBits handleType,
15785 int fd,
15786 VkMemoryFdPropertiesKHR* pMemoryFdProperties)
15787{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015788 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015789 AEMU_SCOPED_TRACE("vkGetMemoryFdPropertiesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015790 mImpl->log("start vkGetMemoryFdPropertiesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015791 auto stream = mImpl->stream();
15792 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015793 auto resources = mImpl->resources();
15794 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015795 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015796 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015797 VkExternalMemoryHandleTypeFlagBits local_handleType;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015798 int local_fd;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015799 local_device = device;
15800 local_handleType = handleType;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015801 local_fd = fd;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015802 countingStream->rewind();
15803 {
David Reveman9875f2c2019-06-11 21:47:12 -040015804 uint64_t cgen_var_1029;
15805 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1029, 1);
15806 countingStream->write((uint64_t*)&cgen_var_1029, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015807 countingStream->write((VkExternalMemoryHandleTypeFlagBits*)&local_handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
15808 countingStream->write((int*)&local_fd, sizeof(int));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015809 marshal_VkMemoryFdPropertiesKHR(countingStream, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
15810 }
15811 uint32_t packetSize_vkGetMemoryFdPropertiesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15812 countingStream->rewind();
15813 uint32_t opcode_vkGetMemoryFdPropertiesKHR = OP_vkGetMemoryFdPropertiesKHR;
15814 stream->write(&opcode_vkGetMemoryFdPropertiesKHR, sizeof(uint32_t));
15815 stream->write(&packetSize_vkGetMemoryFdPropertiesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015816 uint64_t cgen_var_1030;
15817 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1030, 1);
15818 stream->write((uint64_t*)&cgen_var_1030, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015819 stream->write((VkExternalMemoryHandleTypeFlagBits*)&local_handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
15820 stream->write((int*)&local_fd, sizeof(int));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015821 marshal_VkMemoryFdPropertiesKHR(stream, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015822 AEMU_SCOPED_TRACE("vkGetMemoryFdPropertiesKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015823 unmarshal_VkMemoryFdPropertiesKHR(stream, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080015824 if (pMemoryFdProperties)
15825 {
15826 transform_fromhost_VkMemoryFdPropertiesKHR(mImpl->resources(), (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
15827 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015828 AEMU_SCOPED_TRACE("vkGetMemoryFdPropertiesKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015829 VkResult vkGetMemoryFdPropertiesKHR_VkResult_return = (VkResult)0;
15830 stream->read(&vkGetMemoryFdPropertiesKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070015831 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080015832 countingStream->clearPool();
15833 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015834 mImpl->log("finish vkGetMemoryFdPropertiesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015835 return vkGetMemoryFdPropertiesKHR_VkResult_return;
15836}
15837
15838#endif
15839#ifdef VK_KHR_win32_keyed_mutex
15840#endif
15841#ifdef VK_KHR_external_semaphore_capabilities
15842void VkEncoder::vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
15843 VkPhysicalDevice physicalDevice,
15844 const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
15845 VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
15846{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015847 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015848 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015849 mImpl->log("start vkGetPhysicalDeviceExternalSemaphorePropertiesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015850 auto stream = mImpl->stream();
15851 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015852 auto resources = mImpl->resources();
15853 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015854 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015855 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015856 VkPhysicalDeviceExternalSemaphoreInfo* local_pExternalSemaphoreInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015857 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015858 local_pExternalSemaphoreInfo = nullptr;
15859 if (pExternalSemaphoreInfo)
15860 {
15861 local_pExternalSemaphoreInfo = (VkPhysicalDeviceExternalSemaphoreInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalSemaphoreInfo));
15862 deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(pool, pExternalSemaphoreInfo, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
15863 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080015864 if (local_pExternalSemaphoreInfo)
15865 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080015866 transform_tohost_VkPhysicalDeviceExternalSemaphoreInfo(mImpl->resources(), (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080015867 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015868 countingStream->rewind();
15869 {
David Reveman9875f2c2019-06-11 21:47:12 -040015870 uint64_t cgen_var_1031;
15871 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1031, 1);
15872 countingStream->write((uint64_t*)&cgen_var_1031, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015873 marshal_VkPhysicalDeviceExternalSemaphoreInfo(countingStream, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015874 marshal_VkExternalSemaphoreProperties(countingStream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
15875 }
15876 uint32_t packetSize_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15877 countingStream->rewind();
15878 uint32_t opcode_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = OP_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR;
15879 stream->write(&opcode_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR, sizeof(uint32_t));
15880 stream->write(&packetSize_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015881 uint64_t cgen_var_1032;
15882 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1032, 1);
15883 stream->write((uint64_t*)&cgen_var_1032, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015884 marshal_VkPhysicalDeviceExternalSemaphoreInfo(stream, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015885 marshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015886 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015887 unmarshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080015888 if (pExternalSemaphoreProperties)
15889 {
15890 transform_fromhost_VkExternalSemaphoreProperties(mImpl->resources(), (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
15891 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015892 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070015893 pool->freeAll();
15894 countingStream->clearPool();
15895 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015896 mImpl->log("finish vkGetPhysicalDeviceExternalSemaphorePropertiesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015897}
15898
15899#endif
15900#ifdef VK_KHR_external_semaphore
15901#endif
15902#ifdef VK_KHR_external_semaphore_win32
15903VkResult VkEncoder::vkImportSemaphoreWin32HandleKHR(
15904 VkDevice device,
15905 const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo)
15906{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015907 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015908 AEMU_SCOPED_TRACE("vkImportSemaphoreWin32HandleKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015909 mImpl->log("start vkImportSemaphoreWin32HandleKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015910 auto stream = mImpl->stream();
15911 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015912 auto resources = mImpl->resources();
15913 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015914 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015915 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015916 VkImportSemaphoreWin32HandleInfoKHR* local_pImportSemaphoreWin32HandleInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015917 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015918 local_pImportSemaphoreWin32HandleInfo = nullptr;
15919 if (pImportSemaphoreWin32HandleInfo)
15920 {
15921 local_pImportSemaphoreWin32HandleInfo = (VkImportSemaphoreWin32HandleInfoKHR*)pool->alloc(sizeof(const VkImportSemaphoreWin32HandleInfoKHR));
15922 deepcopy_VkImportSemaphoreWin32HandleInfoKHR(pool, pImportSemaphoreWin32HandleInfo, (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo));
15923 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080015924 if (local_pImportSemaphoreWin32HandleInfo)
15925 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080015926 transform_tohost_VkImportSemaphoreWin32HandleInfoKHR(mImpl->resources(), (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080015927 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015928 countingStream->rewind();
15929 {
David Reveman9875f2c2019-06-11 21:47:12 -040015930 uint64_t cgen_var_1033;
15931 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1033, 1);
15932 countingStream->write((uint64_t*)&cgen_var_1033, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015933 marshal_VkImportSemaphoreWin32HandleInfoKHR(countingStream, (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015934 }
15935 uint32_t packetSize_vkImportSemaphoreWin32HandleKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15936 countingStream->rewind();
15937 uint32_t opcode_vkImportSemaphoreWin32HandleKHR = OP_vkImportSemaphoreWin32HandleKHR;
15938 stream->write(&opcode_vkImportSemaphoreWin32HandleKHR, sizeof(uint32_t));
15939 stream->write(&packetSize_vkImportSemaphoreWin32HandleKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015940 uint64_t cgen_var_1034;
15941 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1034, 1);
15942 stream->write((uint64_t*)&cgen_var_1034, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015943 marshal_VkImportSemaphoreWin32HandleInfoKHR(stream, (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015944 AEMU_SCOPED_TRACE("vkImportSemaphoreWin32HandleKHR readParams");
15945 AEMU_SCOPED_TRACE("vkImportSemaphoreWin32HandleKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015946 VkResult vkImportSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
15947 stream->read(&vkImportSemaphoreWin32HandleKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070015948 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080015949 countingStream->clearPool();
15950 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015951 mImpl->log("finish vkImportSemaphoreWin32HandleKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015952 return vkImportSemaphoreWin32HandleKHR_VkResult_return;
15953}
15954
15955VkResult VkEncoder::vkGetSemaphoreWin32HandleKHR(
15956 VkDevice device,
15957 const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
15958 HANDLE* pHandle)
15959{
Lingfeng Yang256f9252020-07-14 14:27:33 -070015960 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015961 AEMU_SCOPED_TRACE("vkGetSemaphoreWin32HandleKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080015962 mImpl->log("start vkGetSemaphoreWin32HandleKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015963 auto stream = mImpl->stream();
15964 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015965 auto resources = mImpl->resources();
15966 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080015967 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015968 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015969 VkSemaphoreGetWin32HandleInfoKHR* local_pGetWin32HandleInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080015970 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015971 local_pGetWin32HandleInfo = nullptr;
15972 if (pGetWin32HandleInfo)
15973 {
15974 local_pGetWin32HandleInfo = (VkSemaphoreGetWin32HandleInfoKHR*)pool->alloc(sizeof(const VkSemaphoreGetWin32HandleInfoKHR));
15975 deepcopy_VkSemaphoreGetWin32HandleInfoKHR(pool, pGetWin32HandleInfo, (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
15976 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080015977 if (local_pGetWin32HandleInfo)
15978 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080015979 transform_tohost_VkSemaphoreGetWin32HandleInfoKHR(mImpl->resources(), (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080015980 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015981 countingStream->rewind();
15982 {
David Reveman9875f2c2019-06-11 21:47:12 -040015983 uint64_t cgen_var_1035;
15984 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1035, 1);
15985 countingStream->write((uint64_t*)&cgen_var_1035, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015986 marshal_VkSemaphoreGetWin32HandleInfoKHR(countingStream, (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015987 countingStream->write((HANDLE*)pHandle, sizeof(HANDLE));
15988 }
15989 uint32_t packetSize_vkGetSemaphoreWin32HandleKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
15990 countingStream->rewind();
15991 uint32_t opcode_vkGetSemaphoreWin32HandleKHR = OP_vkGetSemaphoreWin32HandleKHR;
15992 stream->write(&opcode_vkGetSemaphoreWin32HandleKHR, sizeof(uint32_t));
15993 stream->write(&packetSize_vkGetSemaphoreWin32HandleKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040015994 uint64_t cgen_var_1036;
15995 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1036, 1);
15996 stream->write((uint64_t*)&cgen_var_1036, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080015997 marshal_VkSemaphoreGetWin32HandleInfoKHR(stream, (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070015998 stream->write((HANDLE*)pHandle, sizeof(HANDLE));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080015999 AEMU_SCOPED_TRACE("vkGetSemaphoreWin32HandleKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016000 stream->read((HANDLE*)pHandle, sizeof(HANDLE));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016001 AEMU_SCOPED_TRACE("vkGetSemaphoreWin32HandleKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016002 VkResult vkGetSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
16003 stream->read(&vkGetSemaphoreWin32HandleKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070016004 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080016005 countingStream->clearPool();
16006 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016007 mImpl->log("finish vkGetSemaphoreWin32HandleKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016008 return vkGetSemaphoreWin32HandleKHR_VkResult_return;
16009}
16010
16011#endif
16012#ifdef VK_KHR_external_semaphore_fd
16013VkResult VkEncoder::vkImportSemaphoreFdKHR(
16014 VkDevice device,
16015 const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo)
16016{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016017 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016018 AEMU_SCOPED_TRACE("vkImportSemaphoreFdKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016019 mImpl->log("start vkImportSemaphoreFdKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016020 auto stream = mImpl->stream();
16021 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016022 auto resources = mImpl->resources();
16023 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016024 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016025 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016026 VkImportSemaphoreFdInfoKHR* local_pImportSemaphoreFdInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016027 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016028 local_pImportSemaphoreFdInfo = nullptr;
16029 if (pImportSemaphoreFdInfo)
16030 {
16031 local_pImportSemaphoreFdInfo = (VkImportSemaphoreFdInfoKHR*)pool->alloc(sizeof(const VkImportSemaphoreFdInfoKHR));
16032 deepcopy_VkImportSemaphoreFdInfoKHR(pool, pImportSemaphoreFdInfo, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
16033 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080016034 if (local_pImportSemaphoreFdInfo)
16035 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016036 transform_tohost_VkImportSemaphoreFdInfoKHR(mImpl->resources(), (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016037 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016038 countingStream->rewind();
16039 {
David Reveman9875f2c2019-06-11 21:47:12 -040016040 uint64_t cgen_var_1037;
16041 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1037, 1);
16042 countingStream->write((uint64_t*)&cgen_var_1037, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016043 marshal_VkImportSemaphoreFdInfoKHR(countingStream, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016044 }
16045 uint32_t packetSize_vkImportSemaphoreFdKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16046 countingStream->rewind();
16047 uint32_t opcode_vkImportSemaphoreFdKHR = OP_vkImportSemaphoreFdKHR;
16048 stream->write(&opcode_vkImportSemaphoreFdKHR, sizeof(uint32_t));
16049 stream->write(&packetSize_vkImportSemaphoreFdKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016050 uint64_t cgen_var_1038;
16051 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1038, 1);
16052 stream->write((uint64_t*)&cgen_var_1038, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016053 marshal_VkImportSemaphoreFdInfoKHR(stream, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016054 AEMU_SCOPED_TRACE("vkImportSemaphoreFdKHR readParams");
16055 AEMU_SCOPED_TRACE("vkImportSemaphoreFdKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016056 VkResult vkImportSemaphoreFdKHR_VkResult_return = (VkResult)0;
16057 stream->read(&vkImportSemaphoreFdKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070016058 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080016059 countingStream->clearPool();
16060 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016061 mImpl->log("finish vkImportSemaphoreFdKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016062 return vkImportSemaphoreFdKHR_VkResult_return;
16063}
16064
16065VkResult VkEncoder::vkGetSemaphoreFdKHR(
16066 VkDevice device,
16067 const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
16068 int* pFd)
16069{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016070 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016071 AEMU_SCOPED_TRACE("vkGetSemaphoreFdKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016072 mImpl->log("start vkGetSemaphoreFdKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016073 auto stream = mImpl->stream();
16074 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016075 auto resources = mImpl->resources();
16076 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016077 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016078 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016079 VkSemaphoreGetFdInfoKHR* local_pGetFdInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016080 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016081 local_pGetFdInfo = nullptr;
16082 if (pGetFdInfo)
16083 {
16084 local_pGetFdInfo = (VkSemaphoreGetFdInfoKHR*)pool->alloc(sizeof(const VkSemaphoreGetFdInfoKHR));
16085 deepcopy_VkSemaphoreGetFdInfoKHR(pool, pGetFdInfo, (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
16086 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080016087 if (local_pGetFdInfo)
16088 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016089 transform_tohost_VkSemaphoreGetFdInfoKHR(mImpl->resources(), (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016090 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016091 countingStream->rewind();
16092 {
David Reveman9875f2c2019-06-11 21:47:12 -040016093 uint64_t cgen_var_1039;
16094 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1039, 1);
16095 countingStream->write((uint64_t*)&cgen_var_1039, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016096 marshal_VkSemaphoreGetFdInfoKHR(countingStream, (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016097 countingStream->write((int*)pFd, sizeof(int));
16098 }
16099 uint32_t packetSize_vkGetSemaphoreFdKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16100 countingStream->rewind();
16101 uint32_t opcode_vkGetSemaphoreFdKHR = OP_vkGetSemaphoreFdKHR;
16102 stream->write(&opcode_vkGetSemaphoreFdKHR, sizeof(uint32_t));
16103 stream->write(&packetSize_vkGetSemaphoreFdKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016104 uint64_t cgen_var_1040;
16105 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1040, 1);
16106 stream->write((uint64_t*)&cgen_var_1040, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016107 marshal_VkSemaphoreGetFdInfoKHR(stream, (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016108 stream->write((int*)pFd, sizeof(int));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016109 AEMU_SCOPED_TRACE("vkGetSemaphoreFdKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016110 stream->read((int*)pFd, sizeof(int));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016111 AEMU_SCOPED_TRACE("vkGetSemaphoreFdKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016112 VkResult vkGetSemaphoreFdKHR_VkResult_return = (VkResult)0;
16113 stream->read(&vkGetSemaphoreFdKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070016114 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080016115 countingStream->clearPool();
16116 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016117 mImpl->log("finish vkGetSemaphoreFdKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016118 return vkGetSemaphoreFdKHR_VkResult_return;
16119}
16120
16121#endif
16122#ifdef VK_KHR_push_descriptor
16123void VkEncoder::vkCmdPushDescriptorSetKHR(
16124 VkCommandBuffer commandBuffer,
16125 VkPipelineBindPoint pipelineBindPoint,
16126 VkPipelineLayout layout,
16127 uint32_t set,
16128 uint32_t descriptorWriteCount,
16129 const VkWriteDescriptorSet* pDescriptorWrites)
16130{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016131 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016132 AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016133 mImpl->log("start vkCmdPushDescriptorSetKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016134 auto stream = mImpl->stream();
16135 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016136 auto resources = mImpl->resources();
16137 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016138 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016139 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016140 VkPipelineBindPoint local_pipelineBindPoint;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016141 VkPipelineLayout local_layout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016142 uint32_t local_set;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016143 uint32_t local_descriptorWriteCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016144 VkWriteDescriptorSet* local_pDescriptorWrites;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016145 local_commandBuffer = commandBuffer;
16146 local_pipelineBindPoint = pipelineBindPoint;
16147 local_layout = layout;
16148 local_set = set;
16149 local_descriptorWriteCount = descriptorWriteCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016150 local_pDescriptorWrites = nullptr;
16151 if (pDescriptorWrites)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016152 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016153 local_pDescriptorWrites = (VkWriteDescriptorSet*)pool->alloc(((descriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016154 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
16155 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016156 deepcopy_VkWriteDescriptorSet(pool, pDescriptorWrites + i, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
16157 }
16158 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080016159 if (local_pDescriptorWrites)
16160 {
16161 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
16162 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016163 transform_tohost_VkWriteDescriptorSet(mImpl->resources(), (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016164 }
16165 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016166 countingStream->rewind();
16167 {
David Reveman9875f2c2019-06-11 21:47:12 -040016168 uint64_t cgen_var_1041;
16169 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1041, 1);
16170 countingStream->write((uint64_t*)&cgen_var_1041, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016171 countingStream->write((VkPipelineBindPoint*)&local_pipelineBindPoint, sizeof(VkPipelineBindPoint));
David Reveman9875f2c2019-06-11 21:47:12 -040016172 uint64_t cgen_var_1042;
16173 countingStream->handleMapping()->mapHandles_VkPipelineLayout_u64(&local_layout, &cgen_var_1042, 1);
16174 countingStream->write((uint64_t*)&cgen_var_1042, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016175 countingStream->write((uint32_t*)&local_set, sizeof(uint32_t));
16176 countingStream->write((uint32_t*)&local_descriptorWriteCount, sizeof(uint32_t));
16177 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
16178 {
16179 marshal_VkWriteDescriptorSet(countingStream, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016180 }
16181 }
16182 uint32_t packetSize_vkCmdPushDescriptorSetKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16183 countingStream->rewind();
16184 uint32_t opcode_vkCmdPushDescriptorSetKHR = OP_vkCmdPushDescriptorSetKHR;
16185 stream->write(&opcode_vkCmdPushDescriptorSetKHR, sizeof(uint32_t));
16186 stream->write(&packetSize_vkCmdPushDescriptorSetKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016187 uint64_t cgen_var_1043;
16188 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1043, 1);
16189 stream->write((uint64_t*)&cgen_var_1043, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016190 stream->write((VkPipelineBindPoint*)&local_pipelineBindPoint, sizeof(VkPipelineBindPoint));
David Reveman9875f2c2019-06-11 21:47:12 -040016191 uint64_t cgen_var_1044;
16192 stream->handleMapping()->mapHandles_VkPipelineLayout_u64(&local_layout, &cgen_var_1044, 1);
16193 stream->write((uint64_t*)&cgen_var_1044, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016194 stream->write((uint32_t*)&local_set, sizeof(uint32_t));
16195 stream->write((uint32_t*)&local_descriptorWriteCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016196 for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
16197 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016198 marshal_VkWriteDescriptorSet(stream, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016199 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016200 AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetKHR readParams");
16201 AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070016202 pool->freeAll();
16203 countingStream->clearPool();
16204 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016205 mImpl->log("finish vkCmdPushDescriptorSetKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016206}
16207
16208void VkEncoder::vkCmdPushDescriptorSetWithTemplateKHR(
16209 VkCommandBuffer commandBuffer,
16210 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
16211 VkPipelineLayout layout,
16212 uint32_t set,
16213 const void* pData)
16214{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016215 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016216 AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetWithTemplateKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016217 mImpl->log("start vkCmdPushDescriptorSetWithTemplateKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016218 auto stream = mImpl->stream();
16219 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016220 auto resources = mImpl->resources();
16221 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016222 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016223 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016224 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016225 VkPipelineLayout local_layout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016226 uint32_t local_set;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016227 void* local_pData;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016228 local_commandBuffer = commandBuffer;
16229 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
16230 local_layout = layout;
16231 local_set = set;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016232 local_pData = nullptr;
16233 if (pData)
16234 {
16235 local_pData = (void*)pool->dupArray(pData, sizeof(const uint8_t));
16236 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016237 countingStream->rewind();
16238 {
David Reveman9875f2c2019-06-11 21:47:12 -040016239 uint64_t cgen_var_1045;
16240 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1045, 1);
16241 countingStream->write((uint64_t*)&cgen_var_1045, 1 * 8);
16242 uint64_t cgen_var_1046;
16243 countingStream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_1046, 1);
16244 countingStream->write((uint64_t*)&cgen_var_1046, 1 * 8);
16245 uint64_t cgen_var_1047;
16246 countingStream->handleMapping()->mapHandles_VkPipelineLayout_u64(&local_layout, &cgen_var_1047, 1);
16247 countingStream->write((uint64_t*)&cgen_var_1047, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016248 countingStream->write((uint32_t*)&local_set, sizeof(uint32_t));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080016249 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040016250 uint64_t cgen_var_1048 = (uint64_t)(uintptr_t)local_pData;
16251 countingStream->putBe64(cgen_var_1048);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016252 if (local_pData)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016253 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016254 countingStream->write((void*)local_pData, sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016255 }
16256 }
16257 uint32_t packetSize_vkCmdPushDescriptorSetWithTemplateKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16258 countingStream->rewind();
16259 uint32_t opcode_vkCmdPushDescriptorSetWithTemplateKHR = OP_vkCmdPushDescriptorSetWithTemplateKHR;
16260 stream->write(&opcode_vkCmdPushDescriptorSetWithTemplateKHR, sizeof(uint32_t));
16261 stream->write(&packetSize_vkCmdPushDescriptorSetWithTemplateKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016262 uint64_t cgen_var_1049;
16263 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1049, 1);
16264 stream->write((uint64_t*)&cgen_var_1049, 1 * 8);
16265 uint64_t cgen_var_1050;
16266 stream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_1050, 1);
16267 stream->write((uint64_t*)&cgen_var_1050, 1 * 8);
16268 uint64_t cgen_var_1051;
16269 stream->handleMapping()->mapHandles_VkPipelineLayout_u64(&local_layout, &cgen_var_1051, 1);
16270 stream->write((uint64_t*)&cgen_var_1051, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016271 stream->write((uint32_t*)&local_set, sizeof(uint32_t));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080016272 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040016273 uint64_t cgen_var_1052 = (uint64_t)(uintptr_t)local_pData;
16274 stream->putBe64(cgen_var_1052);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016275 if (local_pData)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016276 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016277 stream->write((void*)local_pData, sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016278 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016279 AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetWithTemplateKHR readParams");
16280 AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetWithTemplateKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070016281 pool->freeAll();
16282 countingStream->clearPool();
16283 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016284 mImpl->log("finish vkCmdPushDescriptorSetWithTemplateKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016285}
16286
16287#endif
16288#ifdef VK_KHR_16bit_storage
16289#endif
16290#ifdef VK_KHR_incremental_present
16291#endif
16292#ifdef VK_KHR_descriptor_update_template
16293VkResult VkEncoder::vkCreateDescriptorUpdateTemplateKHR(
16294 VkDevice device,
16295 const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
16296 const VkAllocationCallbacks* pAllocator,
16297 VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
16298{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016299 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016300 AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplateKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016301 mImpl->log("start vkCreateDescriptorUpdateTemplateKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016302 auto stream = mImpl->stream();
16303 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016304 auto resources = mImpl->resources();
16305 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016306 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016307 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016308 VkDescriptorUpdateTemplateCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016309 VkAllocationCallbacks* local_pAllocator;
16310 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016311 local_pCreateInfo = nullptr;
16312 if (pCreateInfo)
16313 {
16314 local_pCreateInfo = (VkDescriptorUpdateTemplateCreateInfo*)pool->alloc(sizeof(const VkDescriptorUpdateTemplateCreateInfo));
16315 deepcopy_VkDescriptorUpdateTemplateCreateInfo(pool, pCreateInfo, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
16316 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016317 local_pAllocator = nullptr;
16318 if (pAllocator)
16319 {
16320 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
16321 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
16322 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080016323 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080016324 if (local_pCreateInfo)
16325 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016326 transform_tohost_VkDescriptorUpdateTemplateCreateInfo(mImpl->resources(), (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016327 }
16328 if (local_pAllocator)
16329 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016330 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016331 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016332 countingStream->rewind();
16333 {
David Reveman9875f2c2019-06-11 21:47:12 -040016334 uint64_t cgen_var_1053;
16335 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1053, 1);
16336 countingStream->write((uint64_t*)&cgen_var_1053, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016337 marshal_VkDescriptorUpdateTemplateCreateInfo(countingStream, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080016338 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040016339 uint64_t cgen_var_1054 = (uint64_t)(uintptr_t)local_pAllocator;
16340 countingStream->putBe64(cgen_var_1054);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016341 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016342 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016343 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016344 }
David Reveman9875f2c2019-06-11 21:47:12 -040016345 uint64_t cgen_var_1055;
16346 countingStream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(pDescriptorUpdateTemplate, &cgen_var_1055, 1);
16347 countingStream->write((uint64_t*)&cgen_var_1055, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016348 }
16349 uint32_t packetSize_vkCreateDescriptorUpdateTemplateKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16350 countingStream->rewind();
16351 uint32_t opcode_vkCreateDescriptorUpdateTemplateKHR = OP_vkCreateDescriptorUpdateTemplateKHR;
16352 stream->write(&opcode_vkCreateDescriptorUpdateTemplateKHR, sizeof(uint32_t));
16353 stream->write(&packetSize_vkCreateDescriptorUpdateTemplateKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016354 uint64_t cgen_var_1056;
16355 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1056, 1);
16356 stream->write((uint64_t*)&cgen_var_1056, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016357 marshal_VkDescriptorUpdateTemplateCreateInfo(stream, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080016358 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040016359 uint64_t cgen_var_1057 = (uint64_t)(uintptr_t)local_pAllocator;
16360 stream->putBe64(cgen_var_1057);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016361 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016362 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016363 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016364 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080016365 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040016366 uint64_t cgen_var_1058;
16367 stream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(pDescriptorUpdateTemplate, &cgen_var_1058, 1);
16368 stream->write((uint64_t*)&cgen_var_1058, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080016369 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016370 AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplateKHR readParams");
Lingfeng Yang1dafbc32019-02-23 10:52:04 -080016371 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -040016372 uint64_t cgen_var_1059;
16373 stream->read((uint64_t*)&cgen_var_1059, 8);
16374 stream->handleMapping()->mapHandles_u64_VkDescriptorUpdateTemplate(&cgen_var_1059, (VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate, 1);
Lingfeng Yang1dafbc32019-02-23 10:52:04 -080016375 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016376 AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplateKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016377 VkResult vkCreateDescriptorUpdateTemplateKHR_VkResult_return = (VkResult)0;
16378 stream->read(&vkCreateDescriptorUpdateTemplateKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070016379 mImpl->resources()->on_vkCreateDescriptorUpdateTemplateKHR(this, vkCreateDescriptorUpdateTemplateKHR_VkResult_return, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
16380 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080016381 countingStream->clearPool();
16382 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016383 mImpl->log("finish vkCreateDescriptorUpdateTemplateKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016384 return vkCreateDescriptorUpdateTemplateKHR_VkResult_return;
16385}
16386
16387void VkEncoder::vkDestroyDescriptorUpdateTemplateKHR(
16388 VkDevice device,
16389 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
16390 const VkAllocationCallbacks* pAllocator)
16391{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016392 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016393 AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplateKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016394 mImpl->log("start vkDestroyDescriptorUpdateTemplateKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016395 auto stream = mImpl->stream();
16396 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016397 auto resources = mImpl->resources();
16398 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016399 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016400 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016401 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016402 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016403 local_device = device;
16404 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016405 local_pAllocator = nullptr;
16406 if (pAllocator)
16407 {
16408 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
16409 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
16410 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080016411 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080016412 if (local_pAllocator)
16413 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016414 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016415 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016416 countingStream->rewind();
16417 {
David Reveman9875f2c2019-06-11 21:47:12 -040016418 uint64_t cgen_var_1060;
16419 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1060, 1);
16420 countingStream->write((uint64_t*)&cgen_var_1060, 1 * 8);
16421 uint64_t cgen_var_1061;
16422 countingStream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_1061, 1);
16423 countingStream->write((uint64_t*)&cgen_var_1061, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080016424 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040016425 uint64_t cgen_var_1062 = (uint64_t)(uintptr_t)local_pAllocator;
16426 countingStream->putBe64(cgen_var_1062);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016427 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016428 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016429 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016430 }
16431 }
16432 uint32_t packetSize_vkDestroyDescriptorUpdateTemplateKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16433 countingStream->rewind();
16434 uint32_t opcode_vkDestroyDescriptorUpdateTemplateKHR = OP_vkDestroyDescriptorUpdateTemplateKHR;
16435 stream->write(&opcode_vkDestroyDescriptorUpdateTemplateKHR, sizeof(uint32_t));
16436 stream->write(&packetSize_vkDestroyDescriptorUpdateTemplateKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016437 uint64_t cgen_var_1063;
16438 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1063, 1);
16439 stream->write((uint64_t*)&cgen_var_1063, 1 * 8);
16440 uint64_t cgen_var_1064;
16441 stream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_1064, 1);
16442 stream->write((uint64_t*)&cgen_var_1064, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080016443 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040016444 uint64_t cgen_var_1065 = (uint64_t)(uintptr_t)local_pAllocator;
16445 stream->putBe64(cgen_var_1065);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016446 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016447 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016448 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016449 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016450 AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplateKHR readParams");
16451 AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplateKHR returnUnmarshal");
Lingfeng Yang1dafbc32019-02-23 10:52:04 -080016452 resources->destroyMapping()->mapHandles_VkDescriptorUpdateTemplate((VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate);
Lingfeng Yang256f9252020-07-14 14:27:33 -070016453 pool->freeAll();
16454 countingStream->clearPool();
16455 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016456 mImpl->log("finish vkDestroyDescriptorUpdateTemplateKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016457}
16458
16459void VkEncoder::vkUpdateDescriptorSetWithTemplateKHR(
16460 VkDevice device,
16461 VkDescriptorSet descriptorSet,
16462 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
16463 const void* pData)
16464{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016465 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016466 AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016467 mImpl->log("start vkUpdateDescriptorSetWithTemplateKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016468 auto stream = mImpl->stream();
16469 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016470 auto resources = mImpl->resources();
16471 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016472 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016473 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016474 VkDescriptorSet local_descriptorSet;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016475 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016476 void* local_pData;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016477 local_device = device;
16478 local_descriptorSet = descriptorSet;
16479 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016480 local_pData = nullptr;
16481 if (pData)
16482 {
16483 local_pData = (void*)pool->dupArray(pData, sizeof(const uint8_t));
16484 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016485 countingStream->rewind();
16486 {
David Reveman9875f2c2019-06-11 21:47:12 -040016487 uint64_t cgen_var_1066;
16488 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1066, 1);
16489 countingStream->write((uint64_t*)&cgen_var_1066, 1 * 8);
16490 uint64_t cgen_var_1067;
16491 countingStream->handleMapping()->mapHandles_VkDescriptorSet_u64(&local_descriptorSet, &cgen_var_1067, 1);
16492 countingStream->write((uint64_t*)&cgen_var_1067, 1 * 8);
16493 uint64_t cgen_var_1068;
16494 countingStream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_1068, 1);
16495 countingStream->write((uint64_t*)&cgen_var_1068, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080016496 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040016497 uint64_t cgen_var_1069 = (uint64_t)(uintptr_t)local_pData;
16498 countingStream->putBe64(cgen_var_1069);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016499 if (local_pData)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016500 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016501 countingStream->write((void*)local_pData, sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016502 }
16503 }
16504 uint32_t packetSize_vkUpdateDescriptorSetWithTemplateKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16505 countingStream->rewind();
16506 uint32_t opcode_vkUpdateDescriptorSetWithTemplateKHR = OP_vkUpdateDescriptorSetWithTemplateKHR;
16507 stream->write(&opcode_vkUpdateDescriptorSetWithTemplateKHR, sizeof(uint32_t));
16508 stream->write(&packetSize_vkUpdateDescriptorSetWithTemplateKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016509 uint64_t cgen_var_1070;
16510 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1070, 1);
16511 stream->write((uint64_t*)&cgen_var_1070, 1 * 8);
16512 uint64_t cgen_var_1071;
16513 stream->handleMapping()->mapHandles_VkDescriptorSet_u64(&local_descriptorSet, &cgen_var_1071, 1);
16514 stream->write((uint64_t*)&cgen_var_1071, 1 * 8);
16515 uint64_t cgen_var_1072;
16516 stream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_1072, 1);
16517 stream->write((uint64_t*)&cgen_var_1072, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080016518 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040016519 uint64_t cgen_var_1073 = (uint64_t)(uintptr_t)local_pData;
16520 stream->putBe64(cgen_var_1073);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016521 if (local_pData)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016522 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016523 stream->write((void*)local_pData, sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016524 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016525 AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateKHR readParams");
16526 AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070016527 pool->freeAll();
16528 countingStream->clearPool();
16529 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016530 mImpl->log("finish vkUpdateDescriptorSetWithTemplateKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016531}
16532
16533#endif
16534#ifdef VK_KHR_create_renderpass2
16535VkResult VkEncoder::vkCreateRenderPass2KHR(
16536 VkDevice device,
16537 const VkRenderPassCreateInfo2KHR* pCreateInfo,
16538 const VkAllocationCallbacks* pAllocator,
16539 VkRenderPass* pRenderPass)
16540{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016541 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016542 AEMU_SCOPED_TRACE("vkCreateRenderPass2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016543 mImpl->log("start vkCreateRenderPass2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016544 auto stream = mImpl->stream();
16545 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016546 auto resources = mImpl->resources();
16547 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016548 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016549 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016550 VkRenderPassCreateInfo2KHR* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016551 VkAllocationCallbacks* local_pAllocator;
16552 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016553 local_pCreateInfo = nullptr;
16554 if (pCreateInfo)
16555 {
16556 local_pCreateInfo = (VkRenderPassCreateInfo2KHR*)pool->alloc(sizeof(const VkRenderPassCreateInfo2KHR));
16557 deepcopy_VkRenderPassCreateInfo2KHR(pool, pCreateInfo, (VkRenderPassCreateInfo2KHR*)(local_pCreateInfo));
16558 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016559 local_pAllocator = nullptr;
16560 if (pAllocator)
16561 {
16562 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
16563 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
16564 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080016565 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080016566 if (local_pCreateInfo)
16567 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016568 transform_tohost_VkRenderPassCreateInfo2KHR(mImpl->resources(), (VkRenderPassCreateInfo2KHR*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016569 }
16570 if (local_pAllocator)
16571 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016572 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016573 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016574 countingStream->rewind();
16575 {
David Reveman9875f2c2019-06-11 21:47:12 -040016576 uint64_t cgen_var_1074;
16577 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1074, 1);
16578 countingStream->write((uint64_t*)&cgen_var_1074, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016579 marshal_VkRenderPassCreateInfo2KHR(countingStream, (VkRenderPassCreateInfo2KHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080016580 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040016581 uint64_t cgen_var_1075 = (uint64_t)(uintptr_t)local_pAllocator;
16582 countingStream->putBe64(cgen_var_1075);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016583 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016584 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016585 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016586 }
David Reveman9875f2c2019-06-11 21:47:12 -040016587 uint64_t cgen_var_1076;
16588 countingStream->handleMapping()->mapHandles_VkRenderPass_u64(pRenderPass, &cgen_var_1076, 1);
16589 countingStream->write((uint64_t*)&cgen_var_1076, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016590 }
16591 uint32_t packetSize_vkCreateRenderPass2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16592 countingStream->rewind();
16593 uint32_t opcode_vkCreateRenderPass2KHR = OP_vkCreateRenderPass2KHR;
16594 stream->write(&opcode_vkCreateRenderPass2KHR, sizeof(uint32_t));
16595 stream->write(&packetSize_vkCreateRenderPass2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016596 uint64_t cgen_var_1077;
16597 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1077, 1);
16598 stream->write((uint64_t*)&cgen_var_1077, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016599 marshal_VkRenderPassCreateInfo2KHR(stream, (VkRenderPassCreateInfo2KHR*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080016600 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040016601 uint64_t cgen_var_1078 = (uint64_t)(uintptr_t)local_pAllocator;
16602 stream->putBe64(cgen_var_1078);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016603 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016604 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016605 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016606 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080016607 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040016608 uint64_t cgen_var_1079;
16609 stream->handleMapping()->mapHandles_VkRenderPass_u64(pRenderPass, &cgen_var_1079, 1);
16610 stream->write((uint64_t*)&cgen_var_1079, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080016611 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016612 AEMU_SCOPED_TRACE("vkCreateRenderPass2KHR readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040016613 uint64_t cgen_var_1080;
16614 stream->read((uint64_t*)&cgen_var_1080, 8);
16615 stream->handleMapping()->mapHandles_u64_VkRenderPass(&cgen_var_1080, (VkRenderPass*)pRenderPass, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016616 AEMU_SCOPED_TRACE("vkCreateRenderPass2KHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016617 VkResult vkCreateRenderPass2KHR_VkResult_return = (VkResult)0;
16618 stream->read(&vkCreateRenderPass2KHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070016619 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080016620 countingStream->clearPool();
16621 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016622 mImpl->log("finish vkCreateRenderPass2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016623 return vkCreateRenderPass2KHR_VkResult_return;
16624}
16625
16626void VkEncoder::vkCmdBeginRenderPass2KHR(
16627 VkCommandBuffer commandBuffer,
16628 const VkRenderPassBeginInfo* pRenderPassBegin,
16629 const VkSubpassBeginInfoKHR* pSubpassBeginInfo)
16630{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016631 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016632 AEMU_SCOPED_TRACE("vkCmdBeginRenderPass2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016633 mImpl->log("start vkCmdBeginRenderPass2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016634 auto stream = mImpl->stream();
16635 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016636 auto resources = mImpl->resources();
16637 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016638 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016639 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016640 VkRenderPassBeginInfo* local_pRenderPassBegin;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016641 VkSubpassBeginInfoKHR* local_pSubpassBeginInfo;
16642 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016643 local_pRenderPassBegin = nullptr;
16644 if (pRenderPassBegin)
16645 {
16646 local_pRenderPassBegin = (VkRenderPassBeginInfo*)pool->alloc(sizeof(const VkRenderPassBeginInfo));
16647 deepcopy_VkRenderPassBeginInfo(pool, pRenderPassBegin, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
16648 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016649 local_pSubpassBeginInfo = nullptr;
16650 if (pSubpassBeginInfo)
16651 {
16652 local_pSubpassBeginInfo = (VkSubpassBeginInfoKHR*)pool->alloc(sizeof(const VkSubpassBeginInfoKHR));
16653 deepcopy_VkSubpassBeginInfoKHR(pool, pSubpassBeginInfo, (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
16654 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080016655 if (local_pRenderPassBegin)
16656 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016657 transform_tohost_VkRenderPassBeginInfo(mImpl->resources(), (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016658 }
16659 if (local_pSubpassBeginInfo)
16660 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016661 transform_tohost_VkSubpassBeginInfoKHR(mImpl->resources(), (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016662 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016663 countingStream->rewind();
16664 {
David Reveman9875f2c2019-06-11 21:47:12 -040016665 uint64_t cgen_var_1081;
16666 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1081, 1);
16667 countingStream->write((uint64_t*)&cgen_var_1081, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016668 marshal_VkRenderPassBeginInfo(countingStream, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
16669 marshal_VkSubpassBeginInfoKHR(countingStream, (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016670 }
16671 uint32_t packetSize_vkCmdBeginRenderPass2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16672 countingStream->rewind();
16673 uint32_t opcode_vkCmdBeginRenderPass2KHR = OP_vkCmdBeginRenderPass2KHR;
16674 stream->write(&opcode_vkCmdBeginRenderPass2KHR, sizeof(uint32_t));
16675 stream->write(&packetSize_vkCmdBeginRenderPass2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016676 uint64_t cgen_var_1082;
16677 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1082, 1);
16678 stream->write((uint64_t*)&cgen_var_1082, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016679 marshal_VkRenderPassBeginInfo(stream, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
16680 marshal_VkSubpassBeginInfoKHR(stream, (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016681 AEMU_SCOPED_TRACE("vkCmdBeginRenderPass2KHR readParams");
16682 AEMU_SCOPED_TRACE("vkCmdBeginRenderPass2KHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070016683 pool->freeAll();
16684 countingStream->clearPool();
16685 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016686 mImpl->log("finish vkCmdBeginRenderPass2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016687}
16688
16689void VkEncoder::vkCmdNextSubpass2KHR(
16690 VkCommandBuffer commandBuffer,
16691 const VkSubpassBeginInfoKHR* pSubpassBeginInfo,
16692 const VkSubpassEndInfoKHR* pSubpassEndInfo)
16693{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016694 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016695 AEMU_SCOPED_TRACE("vkCmdNextSubpass2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016696 mImpl->log("start vkCmdNextSubpass2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016697 auto stream = mImpl->stream();
16698 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016699 auto resources = mImpl->resources();
16700 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016701 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016702 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016703 VkSubpassBeginInfoKHR* local_pSubpassBeginInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016704 VkSubpassEndInfoKHR* local_pSubpassEndInfo;
16705 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016706 local_pSubpassBeginInfo = nullptr;
16707 if (pSubpassBeginInfo)
16708 {
16709 local_pSubpassBeginInfo = (VkSubpassBeginInfoKHR*)pool->alloc(sizeof(const VkSubpassBeginInfoKHR));
16710 deepcopy_VkSubpassBeginInfoKHR(pool, pSubpassBeginInfo, (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
16711 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016712 local_pSubpassEndInfo = nullptr;
16713 if (pSubpassEndInfo)
16714 {
16715 local_pSubpassEndInfo = (VkSubpassEndInfoKHR*)pool->alloc(sizeof(const VkSubpassEndInfoKHR));
16716 deepcopy_VkSubpassEndInfoKHR(pool, pSubpassEndInfo, (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
16717 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080016718 if (local_pSubpassBeginInfo)
16719 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016720 transform_tohost_VkSubpassBeginInfoKHR(mImpl->resources(), (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016721 }
16722 if (local_pSubpassEndInfo)
16723 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016724 transform_tohost_VkSubpassEndInfoKHR(mImpl->resources(), (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016725 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016726 countingStream->rewind();
16727 {
David Reveman9875f2c2019-06-11 21:47:12 -040016728 uint64_t cgen_var_1083;
16729 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1083, 1);
16730 countingStream->write((uint64_t*)&cgen_var_1083, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016731 marshal_VkSubpassBeginInfoKHR(countingStream, (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
16732 marshal_VkSubpassEndInfoKHR(countingStream, (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016733 }
16734 uint32_t packetSize_vkCmdNextSubpass2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16735 countingStream->rewind();
16736 uint32_t opcode_vkCmdNextSubpass2KHR = OP_vkCmdNextSubpass2KHR;
16737 stream->write(&opcode_vkCmdNextSubpass2KHR, sizeof(uint32_t));
16738 stream->write(&packetSize_vkCmdNextSubpass2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016739 uint64_t cgen_var_1084;
16740 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1084, 1);
16741 stream->write((uint64_t*)&cgen_var_1084, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016742 marshal_VkSubpassBeginInfoKHR(stream, (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
16743 marshal_VkSubpassEndInfoKHR(stream, (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016744 AEMU_SCOPED_TRACE("vkCmdNextSubpass2KHR readParams");
16745 AEMU_SCOPED_TRACE("vkCmdNextSubpass2KHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070016746 pool->freeAll();
16747 countingStream->clearPool();
16748 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016749 mImpl->log("finish vkCmdNextSubpass2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016750}
16751
16752void VkEncoder::vkCmdEndRenderPass2KHR(
16753 VkCommandBuffer commandBuffer,
16754 const VkSubpassEndInfoKHR* pSubpassEndInfo)
16755{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016756 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016757 AEMU_SCOPED_TRACE("vkCmdEndRenderPass2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016758 mImpl->log("start vkCmdEndRenderPass2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016759 auto stream = mImpl->stream();
16760 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016761 auto resources = mImpl->resources();
16762 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016763 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016764 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016765 VkSubpassEndInfoKHR* local_pSubpassEndInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016766 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016767 local_pSubpassEndInfo = nullptr;
16768 if (pSubpassEndInfo)
16769 {
16770 local_pSubpassEndInfo = (VkSubpassEndInfoKHR*)pool->alloc(sizeof(const VkSubpassEndInfoKHR));
16771 deepcopy_VkSubpassEndInfoKHR(pool, pSubpassEndInfo, (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
16772 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080016773 if (local_pSubpassEndInfo)
16774 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016775 transform_tohost_VkSubpassEndInfoKHR(mImpl->resources(), (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016776 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016777 countingStream->rewind();
16778 {
David Reveman9875f2c2019-06-11 21:47:12 -040016779 uint64_t cgen_var_1085;
16780 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1085, 1);
16781 countingStream->write((uint64_t*)&cgen_var_1085, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016782 marshal_VkSubpassEndInfoKHR(countingStream, (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016783 }
16784 uint32_t packetSize_vkCmdEndRenderPass2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16785 countingStream->rewind();
16786 uint32_t opcode_vkCmdEndRenderPass2KHR = OP_vkCmdEndRenderPass2KHR;
16787 stream->write(&opcode_vkCmdEndRenderPass2KHR, sizeof(uint32_t));
16788 stream->write(&packetSize_vkCmdEndRenderPass2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016789 uint64_t cgen_var_1086;
16790 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1086, 1);
16791 stream->write((uint64_t*)&cgen_var_1086, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016792 marshal_VkSubpassEndInfoKHR(stream, (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016793 AEMU_SCOPED_TRACE("vkCmdEndRenderPass2KHR readParams");
16794 AEMU_SCOPED_TRACE("vkCmdEndRenderPass2KHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070016795 pool->freeAll();
16796 countingStream->clearPool();
16797 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016798 mImpl->log("finish vkCmdEndRenderPass2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016799}
16800
16801#endif
16802#ifdef VK_KHR_shared_presentable_image
16803VkResult VkEncoder::vkGetSwapchainStatusKHR(
16804 VkDevice device,
16805 VkSwapchainKHR swapchain)
16806{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016807 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016808 AEMU_SCOPED_TRACE("vkGetSwapchainStatusKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016809 mImpl->log("start vkGetSwapchainStatusKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016810 auto stream = mImpl->stream();
16811 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016812 auto resources = mImpl->resources();
16813 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016814 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016815 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016816 VkSwapchainKHR local_swapchain;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016817 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016818 local_swapchain = swapchain;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016819 countingStream->rewind();
16820 {
David Reveman9875f2c2019-06-11 21:47:12 -040016821 uint64_t cgen_var_1087;
16822 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1087, 1);
16823 countingStream->write((uint64_t*)&cgen_var_1087, 1 * 8);
16824 uint64_t cgen_var_1088;
16825 countingStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_1088, 1);
16826 countingStream->write((uint64_t*)&cgen_var_1088, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016827 }
16828 uint32_t packetSize_vkGetSwapchainStatusKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16829 countingStream->rewind();
16830 uint32_t opcode_vkGetSwapchainStatusKHR = OP_vkGetSwapchainStatusKHR;
16831 stream->write(&opcode_vkGetSwapchainStatusKHR, sizeof(uint32_t));
16832 stream->write(&packetSize_vkGetSwapchainStatusKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016833 uint64_t cgen_var_1089;
16834 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1089, 1);
16835 stream->write((uint64_t*)&cgen_var_1089, 1 * 8);
16836 uint64_t cgen_var_1090;
16837 stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_1090, 1);
16838 stream->write((uint64_t*)&cgen_var_1090, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016839 AEMU_SCOPED_TRACE("vkGetSwapchainStatusKHR readParams");
16840 AEMU_SCOPED_TRACE("vkGetSwapchainStatusKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016841 VkResult vkGetSwapchainStatusKHR_VkResult_return = (VkResult)0;
16842 stream->read(&vkGetSwapchainStatusKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070016843 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080016844 countingStream->clearPool();
16845 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016846 mImpl->log("finish vkGetSwapchainStatusKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016847 return vkGetSwapchainStatusKHR_VkResult_return;
16848}
16849
16850#endif
16851#ifdef VK_KHR_external_fence_capabilities
16852void VkEncoder::vkGetPhysicalDeviceExternalFencePropertiesKHR(
16853 VkPhysicalDevice physicalDevice,
16854 const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
16855 VkExternalFenceProperties* pExternalFenceProperties)
16856{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016857 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016858 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFencePropertiesKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016859 mImpl->log("start vkGetPhysicalDeviceExternalFencePropertiesKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016860 auto stream = mImpl->stream();
16861 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016862 auto resources = mImpl->resources();
16863 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016864 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016865 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016866 VkPhysicalDeviceExternalFenceInfo* local_pExternalFenceInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016867 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016868 local_pExternalFenceInfo = nullptr;
16869 if (pExternalFenceInfo)
16870 {
16871 local_pExternalFenceInfo = (VkPhysicalDeviceExternalFenceInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalFenceInfo));
16872 deepcopy_VkPhysicalDeviceExternalFenceInfo(pool, pExternalFenceInfo, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
16873 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080016874 if (local_pExternalFenceInfo)
16875 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016876 transform_tohost_VkPhysicalDeviceExternalFenceInfo(mImpl->resources(), (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016877 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016878 countingStream->rewind();
16879 {
David Reveman9875f2c2019-06-11 21:47:12 -040016880 uint64_t cgen_var_1091;
16881 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1091, 1);
16882 countingStream->write((uint64_t*)&cgen_var_1091, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016883 marshal_VkPhysicalDeviceExternalFenceInfo(countingStream, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016884 marshal_VkExternalFenceProperties(countingStream, (VkExternalFenceProperties*)(pExternalFenceProperties));
16885 }
16886 uint32_t packetSize_vkGetPhysicalDeviceExternalFencePropertiesKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16887 countingStream->rewind();
16888 uint32_t opcode_vkGetPhysicalDeviceExternalFencePropertiesKHR = OP_vkGetPhysicalDeviceExternalFencePropertiesKHR;
16889 stream->write(&opcode_vkGetPhysicalDeviceExternalFencePropertiesKHR, sizeof(uint32_t));
16890 stream->write(&packetSize_vkGetPhysicalDeviceExternalFencePropertiesKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016891 uint64_t cgen_var_1092;
16892 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1092, 1);
16893 stream->write((uint64_t*)&cgen_var_1092, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016894 marshal_VkPhysicalDeviceExternalFenceInfo(stream, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016895 marshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016896 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFencePropertiesKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016897 unmarshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080016898 if (pExternalFenceProperties)
16899 {
16900 transform_fromhost_VkExternalFenceProperties(mImpl->resources(), (VkExternalFenceProperties*)(pExternalFenceProperties));
16901 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016902 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFencePropertiesKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070016903 pool->freeAll();
16904 countingStream->clearPool();
16905 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016906 mImpl->log("finish vkGetPhysicalDeviceExternalFencePropertiesKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016907}
16908
16909#endif
16910#ifdef VK_KHR_external_fence
16911#endif
16912#ifdef VK_KHR_external_fence_win32
16913VkResult VkEncoder::vkImportFenceWin32HandleKHR(
16914 VkDevice device,
16915 const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo)
16916{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016917 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016918 AEMU_SCOPED_TRACE("vkImportFenceWin32HandleKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016919 mImpl->log("start vkImportFenceWin32HandleKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016920 auto stream = mImpl->stream();
16921 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016922 auto resources = mImpl->resources();
16923 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016924 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016925 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016926 VkImportFenceWin32HandleInfoKHR* local_pImportFenceWin32HandleInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016927 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016928 local_pImportFenceWin32HandleInfo = nullptr;
16929 if (pImportFenceWin32HandleInfo)
16930 {
16931 local_pImportFenceWin32HandleInfo = (VkImportFenceWin32HandleInfoKHR*)pool->alloc(sizeof(const VkImportFenceWin32HandleInfoKHR));
16932 deepcopy_VkImportFenceWin32HandleInfoKHR(pool, pImportFenceWin32HandleInfo, (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo));
16933 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080016934 if (local_pImportFenceWin32HandleInfo)
16935 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016936 transform_tohost_VkImportFenceWin32HandleInfoKHR(mImpl->resources(), (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016937 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016938 countingStream->rewind();
16939 {
David Reveman9875f2c2019-06-11 21:47:12 -040016940 uint64_t cgen_var_1093;
16941 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1093, 1);
16942 countingStream->write((uint64_t*)&cgen_var_1093, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016943 marshal_VkImportFenceWin32HandleInfoKHR(countingStream, (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016944 }
16945 uint32_t packetSize_vkImportFenceWin32HandleKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
16946 countingStream->rewind();
16947 uint32_t opcode_vkImportFenceWin32HandleKHR = OP_vkImportFenceWin32HandleKHR;
16948 stream->write(&opcode_vkImportFenceWin32HandleKHR, sizeof(uint32_t));
16949 stream->write(&packetSize_vkImportFenceWin32HandleKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040016950 uint64_t cgen_var_1094;
16951 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1094, 1);
16952 stream->write((uint64_t*)&cgen_var_1094, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016953 marshal_VkImportFenceWin32HandleInfoKHR(stream, (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016954 AEMU_SCOPED_TRACE("vkImportFenceWin32HandleKHR readParams");
16955 AEMU_SCOPED_TRACE("vkImportFenceWin32HandleKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016956 VkResult vkImportFenceWin32HandleKHR_VkResult_return = (VkResult)0;
16957 stream->read(&vkImportFenceWin32HandleKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070016958 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080016959 countingStream->clearPool();
16960 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016961 mImpl->log("finish vkImportFenceWin32HandleKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016962 return vkImportFenceWin32HandleKHR_VkResult_return;
16963}
16964
16965VkResult VkEncoder::vkGetFenceWin32HandleKHR(
16966 VkDevice device,
16967 const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
16968 HANDLE* pHandle)
16969{
Lingfeng Yang256f9252020-07-14 14:27:33 -070016970 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080016971 AEMU_SCOPED_TRACE("vkGetFenceWin32HandleKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080016972 mImpl->log("start vkGetFenceWin32HandleKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016973 auto stream = mImpl->stream();
16974 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016975 auto resources = mImpl->resources();
16976 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080016977 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016978 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016979 VkFenceGetWin32HandleInfoKHR* local_pGetWin32HandleInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080016980 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016981 local_pGetWin32HandleInfo = nullptr;
16982 if (pGetWin32HandleInfo)
16983 {
16984 local_pGetWin32HandleInfo = (VkFenceGetWin32HandleInfoKHR*)pool->alloc(sizeof(const VkFenceGetWin32HandleInfoKHR));
16985 deepcopy_VkFenceGetWin32HandleInfoKHR(pool, pGetWin32HandleInfo, (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
16986 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080016987 if (local_pGetWin32HandleInfo)
16988 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080016989 transform_tohost_VkFenceGetWin32HandleInfoKHR(mImpl->resources(), (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080016990 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016991 countingStream->rewind();
16992 {
David Reveman9875f2c2019-06-11 21:47:12 -040016993 uint64_t cgen_var_1095;
16994 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1095, 1);
16995 countingStream->write((uint64_t*)&cgen_var_1095, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080016996 marshal_VkFenceGetWin32HandleInfoKHR(countingStream, (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070016997 countingStream->write((HANDLE*)pHandle, sizeof(HANDLE));
16998 }
16999 uint32_t packetSize_vkGetFenceWin32HandleKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17000 countingStream->rewind();
17001 uint32_t opcode_vkGetFenceWin32HandleKHR = OP_vkGetFenceWin32HandleKHR;
17002 stream->write(&opcode_vkGetFenceWin32HandleKHR, sizeof(uint32_t));
17003 stream->write(&packetSize_vkGetFenceWin32HandleKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017004 uint64_t cgen_var_1096;
17005 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1096, 1);
17006 stream->write((uint64_t*)&cgen_var_1096, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017007 marshal_VkFenceGetWin32HandleInfoKHR(stream, (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017008 stream->write((HANDLE*)pHandle, sizeof(HANDLE));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017009 AEMU_SCOPED_TRACE("vkGetFenceWin32HandleKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017010 stream->read((HANDLE*)pHandle, sizeof(HANDLE));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017011 AEMU_SCOPED_TRACE("vkGetFenceWin32HandleKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017012 VkResult vkGetFenceWin32HandleKHR_VkResult_return = (VkResult)0;
17013 stream->read(&vkGetFenceWin32HandleKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070017014 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080017015 countingStream->clearPool();
17016 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017017 mImpl->log("finish vkGetFenceWin32HandleKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017018 return vkGetFenceWin32HandleKHR_VkResult_return;
17019}
17020
17021#endif
17022#ifdef VK_KHR_external_fence_fd
17023VkResult VkEncoder::vkImportFenceFdKHR(
17024 VkDevice device,
17025 const VkImportFenceFdInfoKHR* pImportFenceFdInfo)
17026{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017027 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017028 AEMU_SCOPED_TRACE("vkImportFenceFdKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017029 mImpl->log("start vkImportFenceFdKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017030 auto stream = mImpl->stream();
17031 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017032 auto resources = mImpl->resources();
17033 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017034 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017035 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017036 VkImportFenceFdInfoKHR* local_pImportFenceFdInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080017037 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017038 local_pImportFenceFdInfo = nullptr;
17039 if (pImportFenceFdInfo)
17040 {
17041 local_pImportFenceFdInfo = (VkImportFenceFdInfoKHR*)pool->alloc(sizeof(const VkImportFenceFdInfoKHR));
17042 deepcopy_VkImportFenceFdInfoKHR(pool, pImportFenceFdInfo, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
17043 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080017044 if (local_pImportFenceFdInfo)
17045 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080017046 transform_tohost_VkImportFenceFdInfoKHR(mImpl->resources(), (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080017047 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017048 countingStream->rewind();
17049 {
David Reveman9875f2c2019-06-11 21:47:12 -040017050 uint64_t cgen_var_1097;
17051 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1097, 1);
17052 countingStream->write((uint64_t*)&cgen_var_1097, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017053 marshal_VkImportFenceFdInfoKHR(countingStream, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017054 }
17055 uint32_t packetSize_vkImportFenceFdKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17056 countingStream->rewind();
17057 uint32_t opcode_vkImportFenceFdKHR = OP_vkImportFenceFdKHR;
17058 stream->write(&opcode_vkImportFenceFdKHR, sizeof(uint32_t));
17059 stream->write(&packetSize_vkImportFenceFdKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017060 uint64_t cgen_var_1098;
17061 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1098, 1);
17062 stream->write((uint64_t*)&cgen_var_1098, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017063 marshal_VkImportFenceFdInfoKHR(stream, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017064 AEMU_SCOPED_TRACE("vkImportFenceFdKHR readParams");
17065 AEMU_SCOPED_TRACE("vkImportFenceFdKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017066 VkResult vkImportFenceFdKHR_VkResult_return = (VkResult)0;
17067 stream->read(&vkImportFenceFdKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070017068 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080017069 countingStream->clearPool();
17070 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017071 mImpl->log("finish vkImportFenceFdKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017072 return vkImportFenceFdKHR_VkResult_return;
17073}
17074
17075VkResult VkEncoder::vkGetFenceFdKHR(
17076 VkDevice device,
17077 const VkFenceGetFdInfoKHR* pGetFdInfo,
17078 int* pFd)
17079{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017080 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017081 AEMU_SCOPED_TRACE("vkGetFenceFdKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017082 mImpl->log("start vkGetFenceFdKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017083 auto stream = mImpl->stream();
17084 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017085 auto resources = mImpl->resources();
17086 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017087 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017088 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017089 VkFenceGetFdInfoKHR* local_pGetFdInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080017090 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017091 local_pGetFdInfo = nullptr;
17092 if (pGetFdInfo)
17093 {
17094 local_pGetFdInfo = (VkFenceGetFdInfoKHR*)pool->alloc(sizeof(const VkFenceGetFdInfoKHR));
17095 deepcopy_VkFenceGetFdInfoKHR(pool, pGetFdInfo, (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
17096 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080017097 if (local_pGetFdInfo)
17098 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080017099 transform_tohost_VkFenceGetFdInfoKHR(mImpl->resources(), (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080017100 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017101 countingStream->rewind();
17102 {
David Reveman9875f2c2019-06-11 21:47:12 -040017103 uint64_t cgen_var_1099;
17104 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1099, 1);
17105 countingStream->write((uint64_t*)&cgen_var_1099, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017106 marshal_VkFenceGetFdInfoKHR(countingStream, (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017107 countingStream->write((int*)pFd, sizeof(int));
17108 }
17109 uint32_t packetSize_vkGetFenceFdKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17110 countingStream->rewind();
17111 uint32_t opcode_vkGetFenceFdKHR = OP_vkGetFenceFdKHR;
17112 stream->write(&opcode_vkGetFenceFdKHR, sizeof(uint32_t));
17113 stream->write(&packetSize_vkGetFenceFdKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017114 uint64_t cgen_var_1100;
17115 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1100, 1);
17116 stream->write((uint64_t*)&cgen_var_1100, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017117 marshal_VkFenceGetFdInfoKHR(stream, (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017118 stream->write((int*)pFd, sizeof(int));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017119 AEMU_SCOPED_TRACE("vkGetFenceFdKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017120 stream->read((int*)pFd, sizeof(int));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017121 AEMU_SCOPED_TRACE("vkGetFenceFdKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017122 VkResult vkGetFenceFdKHR_VkResult_return = (VkResult)0;
17123 stream->read(&vkGetFenceFdKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070017124 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080017125 countingStream->clearPool();
17126 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017127 mImpl->log("finish vkGetFenceFdKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017128 return vkGetFenceFdKHR_VkResult_return;
17129}
17130
17131#endif
17132#ifdef VK_KHR_maintenance2
17133#endif
17134#ifdef VK_KHR_get_surface_capabilities2
17135VkResult VkEncoder::vkGetPhysicalDeviceSurfaceCapabilities2KHR(
17136 VkPhysicalDevice physicalDevice,
17137 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
17138 VkSurfaceCapabilities2KHR* pSurfaceCapabilities)
17139{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017140 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017141 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017142 mImpl->log("start vkGetPhysicalDeviceSurfaceCapabilities2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017143 auto stream = mImpl->stream();
17144 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017145 auto resources = mImpl->resources();
17146 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017147 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017148 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017149 VkPhysicalDeviceSurfaceInfo2KHR* local_pSurfaceInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080017150 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017151 local_pSurfaceInfo = nullptr;
17152 if (pSurfaceInfo)
17153 {
17154 local_pSurfaceInfo = (VkPhysicalDeviceSurfaceInfo2KHR*)pool->alloc(sizeof(const VkPhysicalDeviceSurfaceInfo2KHR));
17155 deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(pool, pSurfaceInfo, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
17156 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080017157 if (local_pSurfaceInfo)
17158 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080017159 transform_tohost_VkPhysicalDeviceSurfaceInfo2KHR(mImpl->resources(), (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080017160 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017161 countingStream->rewind();
17162 {
David Reveman9875f2c2019-06-11 21:47:12 -040017163 uint64_t cgen_var_1101;
17164 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1101, 1);
17165 countingStream->write((uint64_t*)&cgen_var_1101, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017166 marshal_VkPhysicalDeviceSurfaceInfo2KHR(countingStream, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017167 marshal_VkSurfaceCapabilities2KHR(countingStream, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
17168 }
17169 uint32_t packetSize_vkGetPhysicalDeviceSurfaceCapabilities2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17170 countingStream->rewind();
17171 uint32_t opcode_vkGetPhysicalDeviceSurfaceCapabilities2KHR = OP_vkGetPhysicalDeviceSurfaceCapabilities2KHR;
17172 stream->write(&opcode_vkGetPhysicalDeviceSurfaceCapabilities2KHR, sizeof(uint32_t));
17173 stream->write(&packetSize_vkGetPhysicalDeviceSurfaceCapabilities2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017174 uint64_t cgen_var_1102;
17175 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1102, 1);
17176 stream->write((uint64_t*)&cgen_var_1102, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017177 marshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017178 marshal_VkSurfaceCapabilities2KHR(stream, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017179 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2KHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017180 unmarshal_VkSurfaceCapabilities2KHR(stream, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
Lingfeng Yang97a06702018-12-24 17:02:43 -080017181 if (pSurfaceCapabilities)
17182 {
17183 transform_fromhost_VkSurfaceCapabilities2KHR(mImpl->resources(), (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
17184 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017185 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2KHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017186 VkResult vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return = (VkResult)0;
17187 stream->read(&vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070017188 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080017189 countingStream->clearPool();
17190 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017191 mImpl->log("finish vkGetPhysicalDeviceSurfaceCapabilities2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017192 return vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return;
17193}
17194
17195VkResult VkEncoder::vkGetPhysicalDeviceSurfaceFormats2KHR(
17196 VkPhysicalDevice physicalDevice,
17197 const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
17198 uint32_t* pSurfaceFormatCount,
17199 VkSurfaceFormat2KHR* pSurfaceFormats)
17200{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017201 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017202 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormats2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017203 mImpl->log("start vkGetPhysicalDeviceSurfaceFormats2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017204 auto stream = mImpl->stream();
17205 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017206 auto resources = mImpl->resources();
17207 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017208 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017209 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017210 VkPhysicalDeviceSurfaceInfo2KHR* local_pSurfaceInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080017211 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017212 local_pSurfaceInfo = nullptr;
17213 if (pSurfaceInfo)
17214 {
17215 local_pSurfaceInfo = (VkPhysicalDeviceSurfaceInfo2KHR*)pool->alloc(sizeof(const VkPhysicalDeviceSurfaceInfo2KHR));
17216 deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(pool, pSurfaceInfo, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
17217 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080017218 if (local_pSurfaceInfo)
17219 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080017220 transform_tohost_VkPhysicalDeviceSurfaceInfo2KHR(mImpl->resources(), (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080017221 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017222 countingStream->rewind();
17223 {
David Reveman9875f2c2019-06-11 21:47:12 -040017224 uint64_t cgen_var_1103;
17225 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1103, 1);
17226 countingStream->write((uint64_t*)&cgen_var_1103, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017227 marshal_VkPhysicalDeviceSurfaceInfo2KHR(countingStream, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017228 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017229 uint64_t cgen_var_1104 = (uint64_t)(uintptr_t)pSurfaceFormatCount;
17230 countingStream->putBe64(cgen_var_1104);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017231 if (pSurfaceFormatCount)
17232 {
17233 countingStream->write((uint32_t*)pSurfaceFormatCount, sizeof(uint32_t));
17234 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017235 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017236 uint64_t cgen_var_1105 = (uint64_t)(uintptr_t)pSurfaceFormats;
17237 countingStream->putBe64(cgen_var_1105);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017238 if (pSurfaceFormats)
17239 {
17240 for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
17241 {
17242 marshal_VkSurfaceFormat2KHR(countingStream, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
17243 }
17244 }
17245 }
17246 uint32_t packetSize_vkGetPhysicalDeviceSurfaceFormats2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17247 countingStream->rewind();
17248 uint32_t opcode_vkGetPhysicalDeviceSurfaceFormats2KHR = OP_vkGetPhysicalDeviceSurfaceFormats2KHR;
17249 stream->write(&opcode_vkGetPhysicalDeviceSurfaceFormats2KHR, sizeof(uint32_t));
17250 stream->write(&packetSize_vkGetPhysicalDeviceSurfaceFormats2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017251 uint64_t cgen_var_1106;
17252 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1106, 1);
17253 stream->write((uint64_t*)&cgen_var_1106, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017254 marshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017255 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017256 uint64_t cgen_var_1107 = (uint64_t)(uintptr_t)pSurfaceFormatCount;
17257 stream->putBe64(cgen_var_1107);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017258 if (pSurfaceFormatCount)
17259 {
17260 stream->write((uint32_t*)pSurfaceFormatCount, sizeof(uint32_t));
17261 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017262 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017263 uint64_t cgen_var_1108 = (uint64_t)(uintptr_t)pSurfaceFormats;
17264 stream->putBe64(cgen_var_1108);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017265 if (pSurfaceFormats)
17266 {
17267 for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
17268 {
17269 marshal_VkSurfaceFormat2KHR(stream, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
17270 }
17271 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017272 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormats2KHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017273 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017274 uint32_t* check_pSurfaceFormatCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017275 check_pSurfaceFormatCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017276 if (pSurfaceFormatCount)
17277 {
17278 if (!(check_pSurfaceFormatCount))
17279 {
17280 fprintf(stderr, "fatal: pSurfaceFormatCount inconsistent between guest and host\n");
17281 }
17282 stream->read((uint32_t*)pSurfaceFormatCount, sizeof(uint32_t));
17283 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017284 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017285 VkSurfaceFormat2KHR* check_pSurfaceFormats;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017286 check_pSurfaceFormats = (VkSurfaceFormat2KHR*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017287 if (pSurfaceFormats)
17288 {
17289 if (!(check_pSurfaceFormats))
17290 {
17291 fprintf(stderr, "fatal: pSurfaceFormats inconsistent between guest and host\n");
17292 }
17293 for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
17294 {
17295 unmarshal_VkSurfaceFormat2KHR(stream, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
17296 }
17297 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080017298 if (pSurfaceFormats)
17299 {
17300 for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
17301 {
17302 transform_fromhost_VkSurfaceFormat2KHR(mImpl->resources(), (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
17303 }
17304 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017305 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormats2KHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017306 VkResult vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return = (VkResult)0;
17307 stream->read(&vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070017308 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080017309 countingStream->clearPool();
17310 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017311 mImpl->log("finish vkGetPhysicalDeviceSurfaceFormats2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017312 return vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return;
17313}
17314
17315#endif
17316#ifdef VK_KHR_variable_pointers
17317#endif
17318#ifdef VK_KHR_get_display_properties2
17319VkResult VkEncoder::vkGetPhysicalDeviceDisplayProperties2KHR(
17320 VkPhysicalDevice physicalDevice,
17321 uint32_t* pPropertyCount,
17322 VkDisplayProperties2KHR* pProperties)
17323{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017324 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017325 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayProperties2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017326 mImpl->log("start vkGetPhysicalDeviceDisplayProperties2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017327 auto stream = mImpl->stream();
17328 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017329 auto resources = mImpl->resources();
17330 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017331 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017332 VkPhysicalDevice local_physicalDevice;
17333 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017334 countingStream->rewind();
17335 {
David Reveman9875f2c2019-06-11 21:47:12 -040017336 uint64_t cgen_var_1111;
17337 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1111, 1);
17338 countingStream->write((uint64_t*)&cgen_var_1111, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017339 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017340 uint64_t cgen_var_1112 = (uint64_t)(uintptr_t)pPropertyCount;
17341 countingStream->putBe64(cgen_var_1112);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017342 if (pPropertyCount)
17343 {
17344 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
17345 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017346 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017347 uint64_t cgen_var_1113 = (uint64_t)(uintptr_t)pProperties;
17348 countingStream->putBe64(cgen_var_1113);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017349 if (pProperties)
17350 {
17351 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17352 {
17353 marshal_VkDisplayProperties2KHR(countingStream, (VkDisplayProperties2KHR*)(pProperties + i));
17354 }
17355 }
17356 }
17357 uint32_t packetSize_vkGetPhysicalDeviceDisplayProperties2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17358 countingStream->rewind();
17359 uint32_t opcode_vkGetPhysicalDeviceDisplayProperties2KHR = OP_vkGetPhysicalDeviceDisplayProperties2KHR;
17360 stream->write(&opcode_vkGetPhysicalDeviceDisplayProperties2KHR, sizeof(uint32_t));
17361 stream->write(&packetSize_vkGetPhysicalDeviceDisplayProperties2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017362 uint64_t cgen_var_1114;
17363 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1114, 1);
17364 stream->write((uint64_t*)&cgen_var_1114, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017365 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017366 uint64_t cgen_var_1115 = (uint64_t)(uintptr_t)pPropertyCount;
17367 stream->putBe64(cgen_var_1115);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017368 if (pPropertyCount)
17369 {
17370 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
17371 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017372 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017373 uint64_t cgen_var_1116 = (uint64_t)(uintptr_t)pProperties;
17374 stream->putBe64(cgen_var_1116);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017375 if (pProperties)
17376 {
17377 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17378 {
17379 marshal_VkDisplayProperties2KHR(stream, (VkDisplayProperties2KHR*)(pProperties + i));
17380 }
17381 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017382 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayProperties2KHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017383 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017384 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017385 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017386 if (pPropertyCount)
17387 {
17388 if (!(check_pPropertyCount))
17389 {
17390 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
17391 }
17392 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
17393 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017394 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017395 VkDisplayProperties2KHR* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017396 check_pProperties = (VkDisplayProperties2KHR*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017397 if (pProperties)
17398 {
17399 if (!(check_pProperties))
17400 {
17401 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
17402 }
17403 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17404 {
17405 unmarshal_VkDisplayProperties2KHR(stream, (VkDisplayProperties2KHR*)(pProperties + i));
17406 }
17407 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080017408 if (pProperties)
17409 {
17410 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17411 {
17412 transform_fromhost_VkDisplayProperties2KHR(mImpl->resources(), (VkDisplayProperties2KHR*)(pProperties + i));
17413 }
17414 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017415 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayProperties2KHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017416 VkResult vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return = (VkResult)0;
17417 stream->read(&vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070017418 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080017419 countingStream->clearPool();
17420 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017421 mImpl->log("finish vkGetPhysicalDeviceDisplayProperties2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017422 return vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return;
17423}
17424
17425VkResult VkEncoder::vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
17426 VkPhysicalDevice physicalDevice,
17427 uint32_t* pPropertyCount,
17428 VkDisplayPlaneProperties2KHR* pProperties)
17429{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017430 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017431 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlaneProperties2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017432 mImpl->log("start vkGetPhysicalDeviceDisplayPlaneProperties2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017433 auto stream = mImpl->stream();
17434 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017435 auto resources = mImpl->resources();
17436 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017437 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017438 VkPhysicalDevice local_physicalDevice;
17439 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017440 countingStream->rewind();
17441 {
David Reveman9875f2c2019-06-11 21:47:12 -040017442 uint64_t cgen_var_1119;
17443 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1119, 1);
17444 countingStream->write((uint64_t*)&cgen_var_1119, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017445 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017446 uint64_t cgen_var_1120 = (uint64_t)(uintptr_t)pPropertyCount;
17447 countingStream->putBe64(cgen_var_1120);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017448 if (pPropertyCount)
17449 {
17450 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
17451 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017452 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017453 uint64_t cgen_var_1121 = (uint64_t)(uintptr_t)pProperties;
17454 countingStream->putBe64(cgen_var_1121);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017455 if (pProperties)
17456 {
17457 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17458 {
17459 marshal_VkDisplayPlaneProperties2KHR(countingStream, (VkDisplayPlaneProperties2KHR*)(pProperties + i));
17460 }
17461 }
17462 }
17463 uint32_t packetSize_vkGetPhysicalDeviceDisplayPlaneProperties2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17464 countingStream->rewind();
17465 uint32_t opcode_vkGetPhysicalDeviceDisplayPlaneProperties2KHR = OP_vkGetPhysicalDeviceDisplayPlaneProperties2KHR;
17466 stream->write(&opcode_vkGetPhysicalDeviceDisplayPlaneProperties2KHR, sizeof(uint32_t));
17467 stream->write(&packetSize_vkGetPhysicalDeviceDisplayPlaneProperties2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017468 uint64_t cgen_var_1122;
17469 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1122, 1);
17470 stream->write((uint64_t*)&cgen_var_1122, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017471 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017472 uint64_t cgen_var_1123 = (uint64_t)(uintptr_t)pPropertyCount;
17473 stream->putBe64(cgen_var_1123);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017474 if (pPropertyCount)
17475 {
17476 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
17477 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017478 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017479 uint64_t cgen_var_1124 = (uint64_t)(uintptr_t)pProperties;
17480 stream->putBe64(cgen_var_1124);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017481 if (pProperties)
17482 {
17483 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17484 {
17485 marshal_VkDisplayPlaneProperties2KHR(stream, (VkDisplayPlaneProperties2KHR*)(pProperties + i));
17486 }
17487 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017488 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlaneProperties2KHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017489 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017490 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017491 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017492 if (pPropertyCount)
17493 {
17494 if (!(check_pPropertyCount))
17495 {
17496 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
17497 }
17498 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
17499 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017500 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017501 VkDisplayPlaneProperties2KHR* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017502 check_pProperties = (VkDisplayPlaneProperties2KHR*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017503 if (pProperties)
17504 {
17505 if (!(check_pProperties))
17506 {
17507 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
17508 }
17509 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17510 {
17511 unmarshal_VkDisplayPlaneProperties2KHR(stream, (VkDisplayPlaneProperties2KHR*)(pProperties + i));
17512 }
17513 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080017514 if (pProperties)
17515 {
17516 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17517 {
17518 transform_fromhost_VkDisplayPlaneProperties2KHR(mImpl->resources(), (VkDisplayPlaneProperties2KHR*)(pProperties + i));
17519 }
17520 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017521 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlaneProperties2KHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017522 VkResult vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return = (VkResult)0;
17523 stream->read(&vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070017524 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080017525 countingStream->clearPool();
17526 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017527 mImpl->log("finish vkGetPhysicalDeviceDisplayPlaneProperties2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017528 return vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return;
17529}
17530
17531VkResult VkEncoder::vkGetDisplayModeProperties2KHR(
17532 VkPhysicalDevice physicalDevice,
17533 VkDisplayKHR display,
17534 uint32_t* pPropertyCount,
17535 VkDisplayModeProperties2KHR* pProperties)
17536{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017537 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017538 AEMU_SCOPED_TRACE("vkGetDisplayModeProperties2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017539 mImpl->log("start vkGetDisplayModeProperties2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017540 auto stream = mImpl->stream();
17541 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017542 auto resources = mImpl->resources();
17543 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017544 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017545 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017546 VkDisplayKHR local_display;
Lingfeng Yang9666b852018-11-13 23:09:59 -080017547 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017548 local_display = display;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017549 countingStream->rewind();
17550 {
David Reveman9875f2c2019-06-11 21:47:12 -040017551 uint64_t cgen_var_1127;
17552 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1127, 1);
17553 countingStream->write((uint64_t*)&cgen_var_1127, 1 * 8);
17554 uint64_t cgen_var_1128;
17555 countingStream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1128, 1);
17556 countingStream->write((uint64_t*)&cgen_var_1128, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017557 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017558 uint64_t cgen_var_1129 = (uint64_t)(uintptr_t)pPropertyCount;
17559 countingStream->putBe64(cgen_var_1129);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017560 if (pPropertyCount)
17561 {
17562 countingStream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
17563 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017564 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017565 uint64_t cgen_var_1130 = (uint64_t)(uintptr_t)pProperties;
17566 countingStream->putBe64(cgen_var_1130);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017567 if (pProperties)
17568 {
17569 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17570 {
17571 marshal_VkDisplayModeProperties2KHR(countingStream, (VkDisplayModeProperties2KHR*)(pProperties + i));
17572 }
17573 }
17574 }
17575 uint32_t packetSize_vkGetDisplayModeProperties2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17576 countingStream->rewind();
17577 uint32_t opcode_vkGetDisplayModeProperties2KHR = OP_vkGetDisplayModeProperties2KHR;
17578 stream->write(&opcode_vkGetDisplayModeProperties2KHR, sizeof(uint32_t));
17579 stream->write(&packetSize_vkGetDisplayModeProperties2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017580 uint64_t cgen_var_1131;
17581 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1131, 1);
17582 stream->write((uint64_t*)&cgen_var_1131, 1 * 8);
17583 uint64_t cgen_var_1132;
17584 stream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1132, 1);
17585 stream->write((uint64_t*)&cgen_var_1132, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017586 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017587 uint64_t cgen_var_1133 = (uint64_t)(uintptr_t)pPropertyCount;
17588 stream->putBe64(cgen_var_1133);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017589 if (pPropertyCount)
17590 {
17591 stream->write((uint32_t*)pPropertyCount, sizeof(uint32_t));
17592 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017593 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017594 uint64_t cgen_var_1134 = (uint64_t)(uintptr_t)pProperties;
17595 stream->putBe64(cgen_var_1134);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017596 if (pProperties)
17597 {
17598 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17599 {
17600 marshal_VkDisplayModeProperties2KHR(stream, (VkDisplayModeProperties2KHR*)(pProperties + i));
17601 }
17602 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017603 AEMU_SCOPED_TRACE("vkGetDisplayModeProperties2KHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017604 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017605 uint32_t* check_pPropertyCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017606 check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017607 if (pPropertyCount)
17608 {
17609 if (!(check_pPropertyCount))
17610 {
17611 fprintf(stderr, "fatal: pPropertyCount inconsistent between guest and host\n");
17612 }
17613 stream->read((uint32_t*)pPropertyCount, sizeof(uint32_t));
17614 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017615 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017616 VkDisplayModeProperties2KHR* check_pProperties;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017617 check_pProperties = (VkDisplayModeProperties2KHR*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017618 if (pProperties)
17619 {
17620 if (!(check_pProperties))
17621 {
17622 fprintf(stderr, "fatal: pProperties inconsistent between guest and host\n");
17623 }
17624 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17625 {
17626 unmarshal_VkDisplayModeProperties2KHR(stream, (VkDisplayModeProperties2KHR*)(pProperties + i));
17627 }
17628 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080017629 if (pProperties)
17630 {
17631 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
17632 {
17633 transform_fromhost_VkDisplayModeProperties2KHR(mImpl->resources(), (VkDisplayModeProperties2KHR*)(pProperties + i));
17634 }
17635 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017636 AEMU_SCOPED_TRACE("vkGetDisplayModeProperties2KHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017637 VkResult vkGetDisplayModeProperties2KHR_VkResult_return = (VkResult)0;
17638 stream->read(&vkGetDisplayModeProperties2KHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070017639 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080017640 countingStream->clearPool();
17641 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017642 mImpl->log("finish vkGetDisplayModeProperties2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017643 return vkGetDisplayModeProperties2KHR_VkResult_return;
17644}
17645
17646VkResult VkEncoder::vkGetDisplayPlaneCapabilities2KHR(
17647 VkPhysicalDevice physicalDevice,
17648 const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo,
17649 VkDisplayPlaneCapabilities2KHR* pCapabilities)
17650{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017651 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017652 AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilities2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017653 mImpl->log("start vkGetDisplayPlaneCapabilities2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017654 auto stream = mImpl->stream();
17655 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017656 auto resources = mImpl->resources();
17657 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017658 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017659 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017660 VkDisplayPlaneInfo2KHR* local_pDisplayPlaneInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080017661 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017662 local_pDisplayPlaneInfo = nullptr;
17663 if (pDisplayPlaneInfo)
17664 {
17665 local_pDisplayPlaneInfo = (VkDisplayPlaneInfo2KHR*)pool->alloc(sizeof(const VkDisplayPlaneInfo2KHR));
17666 deepcopy_VkDisplayPlaneInfo2KHR(pool, pDisplayPlaneInfo, (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo));
17667 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080017668 if (local_pDisplayPlaneInfo)
17669 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080017670 transform_tohost_VkDisplayPlaneInfo2KHR(mImpl->resources(), (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080017671 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017672 countingStream->rewind();
17673 {
David Reveman9875f2c2019-06-11 21:47:12 -040017674 uint64_t cgen_var_1137;
17675 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1137, 1);
17676 countingStream->write((uint64_t*)&cgen_var_1137, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017677 marshal_VkDisplayPlaneInfo2KHR(countingStream, (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017678 marshal_VkDisplayPlaneCapabilities2KHR(countingStream, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
17679 }
17680 uint32_t packetSize_vkGetDisplayPlaneCapabilities2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17681 countingStream->rewind();
17682 uint32_t opcode_vkGetDisplayPlaneCapabilities2KHR = OP_vkGetDisplayPlaneCapabilities2KHR;
17683 stream->write(&opcode_vkGetDisplayPlaneCapabilities2KHR, sizeof(uint32_t));
17684 stream->write(&packetSize_vkGetDisplayPlaneCapabilities2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017685 uint64_t cgen_var_1138;
17686 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1138, 1);
17687 stream->write((uint64_t*)&cgen_var_1138, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017688 marshal_VkDisplayPlaneInfo2KHR(stream, (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017689 marshal_VkDisplayPlaneCapabilities2KHR(stream, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017690 AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilities2KHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017691 unmarshal_VkDisplayPlaneCapabilities2KHR(stream, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
Lingfeng Yang97a06702018-12-24 17:02:43 -080017692 if (pCapabilities)
17693 {
17694 transform_fromhost_VkDisplayPlaneCapabilities2KHR(mImpl->resources(), (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
17695 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017696 AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilities2KHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017697 VkResult vkGetDisplayPlaneCapabilities2KHR_VkResult_return = (VkResult)0;
17698 stream->read(&vkGetDisplayPlaneCapabilities2KHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070017699 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080017700 countingStream->clearPool();
17701 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017702 mImpl->log("finish vkGetDisplayPlaneCapabilities2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017703 return vkGetDisplayPlaneCapabilities2KHR_VkResult_return;
17704}
17705
17706#endif
17707#ifdef VK_KHR_dedicated_allocation
17708#endif
17709#ifdef VK_KHR_storage_buffer_storage_class
17710#endif
17711#ifdef VK_KHR_relaxed_block_layout
17712#endif
17713#ifdef VK_KHR_get_memory_requirements2
17714void VkEncoder::vkGetImageMemoryRequirements2KHR(
17715 VkDevice device,
17716 const VkImageMemoryRequirementsInfo2* pInfo,
17717 VkMemoryRequirements2* pMemoryRequirements)
17718{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017719 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017720 AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017721 mImpl->log("start vkGetImageMemoryRequirements2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017722 auto stream = mImpl->stream();
17723 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017724 auto resources = mImpl->resources();
17725 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017726 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017727 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017728 VkImageMemoryRequirementsInfo2* local_pInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080017729 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017730 local_pInfo = nullptr;
17731 if (pInfo)
17732 {
17733 local_pInfo = (VkImageMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkImageMemoryRequirementsInfo2));
17734 deepcopy_VkImageMemoryRequirementsInfo2(pool, pInfo, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
17735 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080017736 if (local_pInfo)
17737 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080017738 transform_tohost_VkImageMemoryRequirementsInfo2(mImpl->resources(), (VkImageMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080017739 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017740 countingStream->rewind();
17741 {
David Reveman9875f2c2019-06-11 21:47:12 -040017742 uint64_t cgen_var_1139;
17743 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1139, 1);
17744 countingStream->write((uint64_t*)&cgen_var_1139, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017745 marshal_VkImageMemoryRequirementsInfo2(countingStream, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017746 marshal_VkMemoryRequirements2(countingStream, (VkMemoryRequirements2*)(pMemoryRequirements));
17747 }
17748 uint32_t packetSize_vkGetImageMemoryRequirements2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17749 countingStream->rewind();
17750 uint32_t opcode_vkGetImageMemoryRequirements2KHR = OP_vkGetImageMemoryRequirements2KHR;
17751 stream->write(&opcode_vkGetImageMemoryRequirements2KHR, sizeof(uint32_t));
17752 stream->write(&packetSize_vkGetImageMemoryRequirements2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017753 uint64_t cgen_var_1140;
17754 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1140, 1);
17755 stream->write((uint64_t*)&cgen_var_1140, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017756 marshal_VkImageMemoryRequirementsInfo2(stream, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017757 marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017758 AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2KHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017759 unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
Lingfeng Yang97a06702018-12-24 17:02:43 -080017760 if (pMemoryRequirements)
17761 {
17762 transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
17763 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017764 AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2KHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070017765 pool->freeAll();
17766 countingStream->clearPool();
17767 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017768 mImpl->log("finish vkGetImageMemoryRequirements2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017769}
17770
17771void VkEncoder::vkGetBufferMemoryRequirements2KHR(
17772 VkDevice device,
17773 const VkBufferMemoryRequirementsInfo2* pInfo,
17774 VkMemoryRequirements2* pMemoryRequirements)
17775{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017776 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017777 AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017778 mImpl->log("start vkGetBufferMemoryRequirements2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017779 auto stream = mImpl->stream();
17780 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017781 auto resources = mImpl->resources();
17782 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017783 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017784 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017785 VkBufferMemoryRequirementsInfo2* local_pInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080017786 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017787 local_pInfo = nullptr;
17788 if (pInfo)
17789 {
17790 local_pInfo = (VkBufferMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkBufferMemoryRequirementsInfo2));
17791 deepcopy_VkBufferMemoryRequirementsInfo2(pool, pInfo, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
17792 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080017793 if (local_pInfo)
17794 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080017795 transform_tohost_VkBufferMemoryRequirementsInfo2(mImpl->resources(), (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080017796 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017797 countingStream->rewind();
17798 {
David Reveman9875f2c2019-06-11 21:47:12 -040017799 uint64_t cgen_var_1141;
17800 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1141, 1);
17801 countingStream->write((uint64_t*)&cgen_var_1141, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017802 marshal_VkBufferMemoryRequirementsInfo2(countingStream, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017803 marshal_VkMemoryRequirements2(countingStream, (VkMemoryRequirements2*)(pMemoryRequirements));
17804 }
17805 uint32_t packetSize_vkGetBufferMemoryRequirements2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17806 countingStream->rewind();
17807 uint32_t opcode_vkGetBufferMemoryRequirements2KHR = OP_vkGetBufferMemoryRequirements2KHR;
17808 stream->write(&opcode_vkGetBufferMemoryRequirements2KHR, sizeof(uint32_t));
17809 stream->write(&packetSize_vkGetBufferMemoryRequirements2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017810 uint64_t cgen_var_1142;
17811 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1142, 1);
17812 stream->write((uint64_t*)&cgen_var_1142, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017813 marshal_VkBufferMemoryRequirementsInfo2(stream, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017814 marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017815 AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2KHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017816 unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
Lingfeng Yang97a06702018-12-24 17:02:43 -080017817 if (pMemoryRequirements)
17818 {
17819 transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
17820 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017821 AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2KHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070017822 pool->freeAll();
17823 countingStream->clearPool();
17824 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017825 mImpl->log("finish vkGetBufferMemoryRequirements2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017826}
17827
17828void VkEncoder::vkGetImageSparseMemoryRequirements2KHR(
17829 VkDevice device,
17830 const VkImageSparseMemoryRequirementsInfo2* pInfo,
17831 uint32_t* pSparseMemoryRequirementCount,
17832 VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
17833{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017834 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017835 AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017836 mImpl->log("start vkGetImageSparseMemoryRequirements2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017837 auto stream = mImpl->stream();
17838 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017839 auto resources = mImpl->resources();
17840 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017841 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017842 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017843 VkImageSparseMemoryRequirementsInfo2* local_pInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080017844 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017845 local_pInfo = nullptr;
17846 if (pInfo)
17847 {
17848 local_pInfo = (VkImageSparseMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkImageSparseMemoryRequirementsInfo2));
17849 deepcopy_VkImageSparseMemoryRequirementsInfo2(pool, pInfo, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
17850 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080017851 if (local_pInfo)
17852 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080017853 transform_tohost_VkImageSparseMemoryRequirementsInfo2(mImpl->resources(), (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080017854 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017855 countingStream->rewind();
17856 {
David Reveman9875f2c2019-06-11 21:47:12 -040017857 uint64_t cgen_var_1143;
17858 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1143, 1);
17859 countingStream->write((uint64_t*)&cgen_var_1143, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017860 marshal_VkImageSparseMemoryRequirementsInfo2(countingStream, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017861 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017862 uint64_t cgen_var_1144 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
17863 countingStream->putBe64(cgen_var_1144);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017864 if (pSparseMemoryRequirementCount)
17865 {
17866 countingStream->write((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
17867 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017868 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017869 uint64_t cgen_var_1145 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
17870 countingStream->putBe64(cgen_var_1145);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017871 if (pSparseMemoryRequirements)
17872 {
17873 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
17874 {
17875 marshal_VkSparseImageMemoryRequirements2(countingStream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
17876 }
17877 }
17878 }
17879 uint32_t packetSize_vkGetImageSparseMemoryRequirements2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
17880 countingStream->rewind();
17881 uint32_t opcode_vkGetImageSparseMemoryRequirements2KHR = OP_vkGetImageSparseMemoryRequirements2KHR;
17882 stream->write(&opcode_vkGetImageSparseMemoryRequirements2KHR, sizeof(uint32_t));
17883 stream->write(&packetSize_vkGetImageSparseMemoryRequirements2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040017884 uint64_t cgen_var_1146;
17885 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1146, 1);
17886 stream->write((uint64_t*)&cgen_var_1146, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017887 marshal_VkImageSparseMemoryRequirementsInfo2(stream, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017888 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017889 uint64_t cgen_var_1147 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
17890 stream->putBe64(cgen_var_1147);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017891 if (pSparseMemoryRequirementCount)
17892 {
17893 stream->write((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
17894 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017895 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017896 uint64_t cgen_var_1148 = (uint64_t)(uintptr_t)pSparseMemoryRequirements;
17897 stream->putBe64(cgen_var_1148);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017898 if (pSparseMemoryRequirements)
17899 {
17900 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
17901 {
17902 marshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
17903 }
17904 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017905 AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2KHR readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017906 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017907 uint32_t* check_pSparseMemoryRequirementCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017908 check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017909 if (pSparseMemoryRequirementCount)
17910 {
17911 if (!(check_pSparseMemoryRequirementCount))
17912 {
17913 fprintf(stderr, "fatal: pSparseMemoryRequirementCount inconsistent between guest and host\n");
17914 }
17915 stream->read((uint32_t*)pSparseMemoryRequirementCount, sizeof(uint32_t));
17916 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017917 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017918 VkSparseImageMemoryRequirements2* check_pSparseMemoryRequirements;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017919 check_pSparseMemoryRequirements = (VkSparseImageMemoryRequirements2*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017920 if (pSparseMemoryRequirements)
17921 {
17922 if (!(check_pSparseMemoryRequirements))
17923 {
17924 fprintf(stderr, "fatal: pSparseMemoryRequirements inconsistent between guest and host\n");
17925 }
17926 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
17927 {
17928 unmarshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
17929 }
17930 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080017931 if (pSparseMemoryRequirements)
17932 {
17933 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
17934 {
17935 transform_fromhost_VkSparseImageMemoryRequirements2(mImpl->resources(), (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
17936 }
17937 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017938 AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2KHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070017939 pool->freeAll();
17940 countingStream->clearPool();
17941 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017942 mImpl->log("finish vkGetImageSparseMemoryRequirements2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017943}
17944
17945#endif
17946#ifdef VK_KHR_image_format_list
17947#endif
17948#ifdef VK_KHR_sampler_ycbcr_conversion
17949VkResult VkEncoder::vkCreateSamplerYcbcrConversionKHR(
17950 VkDevice device,
17951 const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
17952 const VkAllocationCallbacks* pAllocator,
17953 VkSamplerYcbcrConversion* pYcbcrConversion)
17954{
Lingfeng Yang256f9252020-07-14 14:27:33 -070017955 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080017956 AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversionKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080017957 mImpl->log("start vkCreateSamplerYcbcrConversionKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017958 auto stream = mImpl->stream();
17959 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017960 auto resources = mImpl->resources();
17961 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080017962 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017963 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017964 VkSamplerYcbcrConversionCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080017965 VkAllocationCallbacks* local_pAllocator;
17966 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017967 local_pCreateInfo = nullptr;
17968 if (pCreateInfo)
17969 {
17970 local_pCreateInfo = (VkSamplerYcbcrConversionCreateInfo*)pool->alloc(sizeof(const VkSamplerYcbcrConversionCreateInfo));
17971 deepcopy_VkSamplerYcbcrConversionCreateInfo(pool, pCreateInfo, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
17972 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017973 local_pAllocator = nullptr;
17974 if (pAllocator)
17975 {
17976 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
17977 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
17978 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080017979 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080017980 if (local_pCreateInfo)
17981 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080017982 transform_tohost_VkSamplerYcbcrConversionCreateInfo(mImpl->resources(), (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080017983 }
17984 if (local_pAllocator)
17985 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080017986 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080017987 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017988 countingStream->rewind();
17989 {
David Reveman9875f2c2019-06-11 21:47:12 -040017990 uint64_t cgen_var_1151;
17991 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1151, 1);
17992 countingStream->write((uint64_t*)&cgen_var_1151, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017993 marshal_VkSamplerYcbcrConversionCreateInfo(countingStream, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080017994 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040017995 uint64_t cgen_var_1152 = (uint64_t)(uintptr_t)local_pAllocator;
17996 countingStream->putBe64(cgen_var_1152);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017997 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070017998 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080017999 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018000 }
David Reveman9875f2c2019-06-11 21:47:12 -040018001 uint64_t cgen_var_1153;
18002 countingStream->handleMapping()->mapHandles_VkSamplerYcbcrConversion_u64(pYcbcrConversion, &cgen_var_1153, 1);
18003 countingStream->write((uint64_t*)&cgen_var_1153, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018004 }
18005 uint32_t packetSize_vkCreateSamplerYcbcrConversionKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18006 countingStream->rewind();
18007 uint32_t opcode_vkCreateSamplerYcbcrConversionKHR = OP_vkCreateSamplerYcbcrConversionKHR;
18008 stream->write(&opcode_vkCreateSamplerYcbcrConversionKHR, sizeof(uint32_t));
18009 stream->write(&packetSize_vkCreateSamplerYcbcrConversionKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018010 uint64_t cgen_var_1154;
18011 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1154, 1);
18012 stream->write((uint64_t*)&cgen_var_1154, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018013 marshal_VkSamplerYcbcrConversionCreateInfo(stream, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080018014 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040018015 uint64_t cgen_var_1155 = (uint64_t)(uintptr_t)local_pAllocator;
18016 stream->putBe64(cgen_var_1155);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018017 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018018 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018019 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018020 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080018021 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040018022 uint64_t cgen_var_1156;
18023 stream->handleMapping()->mapHandles_VkSamplerYcbcrConversion_u64(pYcbcrConversion, &cgen_var_1156, 1);
18024 stream->write((uint64_t*)&cgen_var_1156, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080018025 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018026 AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversionKHR readParams");
Lingfeng Yang1dafbc32019-02-23 10:52:04 -080018027 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -040018028 uint64_t cgen_var_1157;
18029 stream->read((uint64_t*)&cgen_var_1157, 8);
18030 stream->handleMapping()->mapHandles_u64_VkSamplerYcbcrConversion(&cgen_var_1157, (VkSamplerYcbcrConversion*)pYcbcrConversion, 1);
Lingfeng Yang1dafbc32019-02-23 10:52:04 -080018031 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018032 AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversionKHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018033 VkResult vkCreateSamplerYcbcrConversionKHR_VkResult_return = (VkResult)0;
18034 stream->read(&vkCreateSamplerYcbcrConversionKHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070018035 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080018036 countingStream->clearPool();
18037 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018038 mImpl->log("finish vkCreateSamplerYcbcrConversionKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018039 return vkCreateSamplerYcbcrConversionKHR_VkResult_return;
18040}
18041
18042void VkEncoder::vkDestroySamplerYcbcrConversionKHR(
18043 VkDevice device,
18044 VkSamplerYcbcrConversion ycbcrConversion,
18045 const VkAllocationCallbacks* pAllocator)
18046{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018047 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018048 AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversionKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018049 mImpl->log("start vkDestroySamplerYcbcrConversionKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018050 auto stream = mImpl->stream();
18051 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018052 auto resources = mImpl->resources();
18053 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080018054 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018055 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018056 VkSamplerYcbcrConversion local_ycbcrConversion;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018057 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018058 local_device = device;
18059 local_ycbcrConversion = ycbcrConversion;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018060 local_pAllocator = nullptr;
18061 if (pAllocator)
18062 {
18063 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
18064 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
18065 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080018066 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080018067 if (local_pAllocator)
18068 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080018069 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080018070 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018071 countingStream->rewind();
18072 {
David Reveman9875f2c2019-06-11 21:47:12 -040018073 uint64_t cgen_var_1158;
18074 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1158, 1);
18075 countingStream->write((uint64_t*)&cgen_var_1158, 1 * 8);
18076 uint64_t cgen_var_1159;
18077 countingStream->handleMapping()->mapHandles_VkSamplerYcbcrConversion_u64(&local_ycbcrConversion, &cgen_var_1159, 1);
18078 countingStream->write((uint64_t*)&cgen_var_1159, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080018079 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040018080 uint64_t cgen_var_1160 = (uint64_t)(uintptr_t)local_pAllocator;
18081 countingStream->putBe64(cgen_var_1160);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018082 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018083 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018084 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018085 }
18086 }
18087 uint32_t packetSize_vkDestroySamplerYcbcrConversionKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18088 countingStream->rewind();
18089 uint32_t opcode_vkDestroySamplerYcbcrConversionKHR = OP_vkDestroySamplerYcbcrConversionKHR;
18090 stream->write(&opcode_vkDestroySamplerYcbcrConversionKHR, sizeof(uint32_t));
18091 stream->write(&packetSize_vkDestroySamplerYcbcrConversionKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018092 uint64_t cgen_var_1161;
18093 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1161, 1);
18094 stream->write((uint64_t*)&cgen_var_1161, 1 * 8);
18095 uint64_t cgen_var_1162;
18096 stream->handleMapping()->mapHandles_VkSamplerYcbcrConversion_u64(&local_ycbcrConversion, &cgen_var_1162, 1);
18097 stream->write((uint64_t*)&cgen_var_1162, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080018098 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040018099 uint64_t cgen_var_1163 = (uint64_t)(uintptr_t)local_pAllocator;
18100 stream->putBe64(cgen_var_1163);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018101 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018102 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018103 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018104 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018105 AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversionKHR readParams");
18106 AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversionKHR returnUnmarshal");
Lingfeng Yang1dafbc32019-02-23 10:52:04 -080018107 resources->destroyMapping()->mapHandles_VkSamplerYcbcrConversion((VkSamplerYcbcrConversion*)&ycbcrConversion);
Lingfeng Yang256f9252020-07-14 14:27:33 -070018108 pool->freeAll();
18109 countingStream->clearPool();
18110 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018111 mImpl->log("finish vkDestroySamplerYcbcrConversionKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018112}
18113
18114#endif
18115#ifdef VK_KHR_bind_memory2
18116VkResult VkEncoder::vkBindBufferMemory2KHR(
18117 VkDevice device,
18118 uint32_t bindInfoCount,
18119 const VkBindBufferMemoryInfo* pBindInfos)
18120{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018121 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018122 AEMU_SCOPED_TRACE("vkBindBufferMemory2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018123 mImpl->log("start vkBindBufferMemory2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018124 auto stream = mImpl->stream();
18125 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018126 auto resources = mImpl->resources();
18127 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080018128 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018129 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018130 uint32_t local_bindInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018131 VkBindBufferMemoryInfo* local_pBindInfos;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018132 local_device = device;
18133 local_bindInfoCount = bindInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018134 local_pBindInfos = nullptr;
18135 if (pBindInfos)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018136 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018137 local_pBindInfos = (VkBindBufferMemoryInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindBufferMemoryInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018138 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
18139 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018140 deepcopy_VkBindBufferMemoryInfo(pool, pBindInfos + i, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
18141 }
18142 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080018143 if (local_pBindInfos)
18144 {
18145 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
18146 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080018147 transform_tohost_VkBindBufferMemoryInfo(mImpl->resources(), (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -080018148 }
18149 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018150 countingStream->rewind();
18151 {
David Reveman9875f2c2019-06-11 21:47:12 -040018152 uint64_t cgen_var_1164;
18153 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1164, 1);
18154 countingStream->write((uint64_t*)&cgen_var_1164, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018155 countingStream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
18156 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
18157 {
18158 marshal_VkBindBufferMemoryInfo(countingStream, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018159 }
18160 }
18161 uint32_t packetSize_vkBindBufferMemory2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18162 countingStream->rewind();
18163 uint32_t opcode_vkBindBufferMemory2KHR = OP_vkBindBufferMemory2KHR;
18164 stream->write(&opcode_vkBindBufferMemory2KHR, sizeof(uint32_t));
18165 stream->write(&packetSize_vkBindBufferMemory2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018166 uint64_t cgen_var_1165;
18167 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1165, 1);
18168 stream->write((uint64_t*)&cgen_var_1165, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018169 stream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018170 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
18171 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018172 marshal_VkBindBufferMemoryInfo(stream, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018173 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018174 AEMU_SCOPED_TRACE("vkBindBufferMemory2KHR readParams");
18175 AEMU_SCOPED_TRACE("vkBindBufferMemory2KHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018176 VkResult vkBindBufferMemory2KHR_VkResult_return = (VkResult)0;
18177 stream->read(&vkBindBufferMemory2KHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070018178 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080018179 countingStream->clearPool();
18180 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018181 mImpl->log("finish vkBindBufferMemory2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018182 return vkBindBufferMemory2KHR_VkResult_return;
18183}
18184
18185VkResult VkEncoder::vkBindImageMemory2KHR(
18186 VkDevice device,
18187 uint32_t bindInfoCount,
18188 const VkBindImageMemoryInfo* pBindInfos)
18189{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018190 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018191 AEMU_SCOPED_TRACE("vkBindImageMemory2KHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018192 mImpl->log("start vkBindImageMemory2KHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018193 auto stream = mImpl->stream();
18194 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018195 auto resources = mImpl->resources();
18196 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080018197 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018198 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018199 uint32_t local_bindInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018200 VkBindImageMemoryInfo* local_pBindInfos;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018201 local_device = device;
18202 local_bindInfoCount = bindInfoCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018203 local_pBindInfos = nullptr;
18204 if (pBindInfos)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018205 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018206 local_pBindInfos = (VkBindImageMemoryInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindImageMemoryInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018207 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
18208 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018209 deepcopy_VkBindImageMemoryInfo(pool, pBindInfos + i, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
18210 }
18211 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080018212 if (local_pBindInfos)
18213 {
18214 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
18215 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080018216 transform_tohost_VkBindImageMemoryInfo(mImpl->resources(), (VkBindImageMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -080018217 }
18218 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018219 countingStream->rewind();
18220 {
David Reveman9875f2c2019-06-11 21:47:12 -040018221 uint64_t cgen_var_1166;
18222 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1166, 1);
18223 countingStream->write((uint64_t*)&cgen_var_1166, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018224 countingStream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
18225 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
18226 {
18227 marshal_VkBindImageMemoryInfo(countingStream, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018228 }
18229 }
18230 uint32_t packetSize_vkBindImageMemory2KHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18231 countingStream->rewind();
18232 uint32_t opcode_vkBindImageMemory2KHR = OP_vkBindImageMemory2KHR;
18233 stream->write(&opcode_vkBindImageMemory2KHR, sizeof(uint32_t));
18234 stream->write(&packetSize_vkBindImageMemory2KHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018235 uint64_t cgen_var_1167;
18236 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1167, 1);
18237 stream->write((uint64_t*)&cgen_var_1167, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018238 stream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018239 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
18240 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018241 marshal_VkBindImageMemoryInfo(stream, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018242 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018243 AEMU_SCOPED_TRACE("vkBindImageMemory2KHR readParams");
18244 AEMU_SCOPED_TRACE("vkBindImageMemory2KHR returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018245 VkResult vkBindImageMemory2KHR_VkResult_return = (VkResult)0;
18246 stream->read(&vkBindImageMemory2KHR_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070018247 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080018248 countingStream->clearPool();
18249 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018250 mImpl->log("finish vkBindImageMemory2KHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018251 return vkBindImageMemory2KHR_VkResult_return;
18252}
18253
18254#endif
18255#ifdef VK_KHR_maintenance3
18256void VkEncoder::vkGetDescriptorSetLayoutSupportKHR(
18257 VkDevice device,
18258 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
18259 VkDescriptorSetLayoutSupport* pSupport)
18260{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018261 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018262 AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupportKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018263 mImpl->log("start vkGetDescriptorSetLayoutSupportKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018264 auto stream = mImpl->stream();
18265 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018266 auto resources = mImpl->resources();
18267 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080018268 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018269 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018270 VkDescriptorSetLayoutCreateInfo* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018271 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018272 local_pCreateInfo = nullptr;
18273 if (pCreateInfo)
18274 {
18275 local_pCreateInfo = (VkDescriptorSetLayoutCreateInfo*)pool->alloc(sizeof(const VkDescriptorSetLayoutCreateInfo));
18276 deepcopy_VkDescriptorSetLayoutCreateInfo(pool, pCreateInfo, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
18277 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080018278 if (local_pCreateInfo)
18279 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080018280 transform_tohost_VkDescriptorSetLayoutCreateInfo(mImpl->resources(), (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080018281 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018282 countingStream->rewind();
18283 {
David Reveman9875f2c2019-06-11 21:47:12 -040018284 uint64_t cgen_var_1168;
18285 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1168, 1);
18286 countingStream->write((uint64_t*)&cgen_var_1168, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018287 marshal_VkDescriptorSetLayoutCreateInfo(countingStream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018288 marshal_VkDescriptorSetLayoutSupport(countingStream, (VkDescriptorSetLayoutSupport*)(pSupport));
18289 }
18290 uint32_t packetSize_vkGetDescriptorSetLayoutSupportKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18291 countingStream->rewind();
18292 uint32_t opcode_vkGetDescriptorSetLayoutSupportKHR = OP_vkGetDescriptorSetLayoutSupportKHR;
18293 stream->write(&opcode_vkGetDescriptorSetLayoutSupportKHR, sizeof(uint32_t));
18294 stream->write(&packetSize_vkGetDescriptorSetLayoutSupportKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018295 uint64_t cgen_var_1169;
18296 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1169, 1);
18297 stream->write((uint64_t*)&cgen_var_1169, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018298 marshal_VkDescriptorSetLayoutCreateInfo(stream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018299 marshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018300 AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupportKHR readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018301 unmarshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
Lingfeng Yang97a06702018-12-24 17:02:43 -080018302 if (pSupport)
18303 {
18304 transform_fromhost_VkDescriptorSetLayoutSupport(mImpl->resources(), (VkDescriptorSetLayoutSupport*)(pSupport));
18305 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018306 AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupportKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070018307 pool->freeAll();
18308 countingStream->clearPool();
18309 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018310 mImpl->log("finish vkGetDescriptorSetLayoutSupportKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018311}
18312
18313#endif
18314#ifdef VK_KHR_draw_indirect_count
18315void VkEncoder::vkCmdDrawIndirectCountKHR(
18316 VkCommandBuffer commandBuffer,
18317 VkBuffer buffer,
18318 VkDeviceSize offset,
18319 VkBuffer countBuffer,
18320 VkDeviceSize countBufferOffset,
18321 uint32_t maxDrawCount,
18322 uint32_t stride)
18323{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018324 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018325 AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018326 mImpl->log("start vkCmdDrawIndirectCountKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018327 auto stream = mImpl->stream();
18328 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018329 auto resources = mImpl->resources();
18330 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080018331 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018332 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018333 VkBuffer local_buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018334 VkDeviceSize local_offset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018335 VkBuffer local_countBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018336 VkDeviceSize local_countBufferOffset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018337 uint32_t local_maxDrawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018338 uint32_t local_stride;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018339 local_commandBuffer = commandBuffer;
18340 local_buffer = buffer;
18341 local_offset = offset;
18342 local_countBuffer = countBuffer;
18343 local_countBufferOffset = countBufferOffset;
18344 local_maxDrawCount = maxDrawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018345 local_stride = stride;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018346 countingStream->rewind();
18347 {
David Reveman9875f2c2019-06-11 21:47:12 -040018348 uint64_t cgen_var_1170;
18349 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1170, 1);
18350 countingStream->write((uint64_t*)&cgen_var_1170, 1 * 8);
18351 uint64_t cgen_var_1171;
18352 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_1171, 1);
18353 countingStream->write((uint64_t*)&cgen_var_1171, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080018354 countingStream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
David Reveman9875f2c2019-06-11 21:47:12 -040018355 uint64_t cgen_var_1172;
18356 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_countBuffer, &cgen_var_1172, 1);
18357 countingStream->write((uint64_t*)&cgen_var_1172, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018358 countingStream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
18359 countingStream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
18360 countingStream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018361 }
18362 uint32_t packetSize_vkCmdDrawIndirectCountKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18363 countingStream->rewind();
18364 uint32_t opcode_vkCmdDrawIndirectCountKHR = OP_vkCmdDrawIndirectCountKHR;
18365 stream->write(&opcode_vkCmdDrawIndirectCountKHR, sizeof(uint32_t));
18366 stream->write(&packetSize_vkCmdDrawIndirectCountKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018367 uint64_t cgen_var_1173;
18368 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1173, 1);
18369 stream->write((uint64_t*)&cgen_var_1173, 1 * 8);
18370 uint64_t cgen_var_1174;
18371 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_1174, 1);
18372 stream->write((uint64_t*)&cgen_var_1174, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080018373 stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
David Reveman9875f2c2019-06-11 21:47:12 -040018374 uint64_t cgen_var_1175;
18375 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_countBuffer, &cgen_var_1175, 1);
18376 stream->write((uint64_t*)&cgen_var_1175, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018377 stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
18378 stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
18379 stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018380 AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountKHR readParams");
18381 AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070018382 pool->freeAll();
18383 countingStream->clearPool();
18384 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018385 mImpl->log("finish vkCmdDrawIndirectCountKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018386}
18387
18388void VkEncoder::vkCmdDrawIndexedIndirectCountKHR(
18389 VkCommandBuffer commandBuffer,
18390 VkBuffer buffer,
18391 VkDeviceSize offset,
18392 VkBuffer countBuffer,
18393 VkDeviceSize countBufferOffset,
18394 uint32_t maxDrawCount,
18395 uint32_t stride)
18396{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018397 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018398 AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountKHR encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018399 mImpl->log("start vkCmdDrawIndexedIndirectCountKHR");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018400 auto stream = mImpl->stream();
18401 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018402 auto resources = mImpl->resources();
18403 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080018404 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018405 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018406 VkBuffer local_buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018407 VkDeviceSize local_offset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018408 VkBuffer local_countBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018409 VkDeviceSize local_countBufferOffset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018410 uint32_t local_maxDrawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018411 uint32_t local_stride;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018412 local_commandBuffer = commandBuffer;
18413 local_buffer = buffer;
18414 local_offset = offset;
18415 local_countBuffer = countBuffer;
18416 local_countBufferOffset = countBufferOffset;
18417 local_maxDrawCount = maxDrawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018418 local_stride = stride;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018419 countingStream->rewind();
18420 {
David Reveman9875f2c2019-06-11 21:47:12 -040018421 uint64_t cgen_var_1176;
18422 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1176, 1);
18423 countingStream->write((uint64_t*)&cgen_var_1176, 1 * 8);
18424 uint64_t cgen_var_1177;
18425 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_1177, 1);
18426 countingStream->write((uint64_t*)&cgen_var_1177, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080018427 countingStream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
David Reveman9875f2c2019-06-11 21:47:12 -040018428 uint64_t cgen_var_1178;
18429 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_countBuffer, &cgen_var_1178, 1);
18430 countingStream->write((uint64_t*)&cgen_var_1178, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018431 countingStream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
18432 countingStream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
18433 countingStream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018434 }
18435 uint32_t packetSize_vkCmdDrawIndexedIndirectCountKHR = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18436 countingStream->rewind();
18437 uint32_t opcode_vkCmdDrawIndexedIndirectCountKHR = OP_vkCmdDrawIndexedIndirectCountKHR;
18438 stream->write(&opcode_vkCmdDrawIndexedIndirectCountKHR, sizeof(uint32_t));
18439 stream->write(&packetSize_vkCmdDrawIndexedIndirectCountKHR, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018440 uint64_t cgen_var_1179;
18441 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1179, 1);
18442 stream->write((uint64_t*)&cgen_var_1179, 1 * 8);
18443 uint64_t cgen_var_1180;
18444 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_1180, 1);
18445 stream->write((uint64_t*)&cgen_var_1180, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080018446 stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
David Reveman9875f2c2019-06-11 21:47:12 -040018447 uint64_t cgen_var_1181;
18448 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_countBuffer, &cgen_var_1181, 1);
18449 stream->write((uint64_t*)&cgen_var_1181, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018450 stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
18451 stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
18452 stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018453 AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountKHR readParams");
18454 AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountKHR returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070018455 pool->freeAll();
18456 countingStream->clearPool();
18457 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018458 mImpl->log("finish vkCmdDrawIndexedIndirectCountKHR");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018459}
18460
18461#endif
18462#ifdef VK_KHR_8bit_storage
18463#endif
Lingfeng Yang4c056b22020-07-02 11:43:57 -070018464#ifdef VK_KHR_shader_float16_int8
18465#endif
Lingfeng Yang808a6312018-11-13 21:06:15 -080018466#ifdef VK_ANDROID_native_buffer
18467VkResult VkEncoder::vkGetSwapchainGrallocUsageANDROID(
18468 VkDevice device,
18469 VkFormat format,
18470 VkImageUsageFlags imageUsage,
18471 int* grallocUsage)
18472{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018473 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018474 AEMU_SCOPED_TRACE("vkGetSwapchainGrallocUsageANDROID encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018475 mImpl->log("start vkGetSwapchainGrallocUsageANDROID");
Lingfeng Yang808a6312018-11-13 21:06:15 -080018476 auto stream = mImpl->stream();
18477 auto countingStream = mImpl->countingStream();
18478 auto resources = mImpl->resources();
18479 auto pool = mImpl->pool();
18480 stream->setHandleMapping(resources->unwrapMapping());
18481 VkDevice local_device;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018482 VkFormat local_format;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018483 VkImageUsageFlags local_imageUsage;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018484 local_device = device;
18485 local_format = format;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018486 local_imageUsage = imageUsage;
18487 countingStream->rewind();
18488 {
David Reveman9875f2c2019-06-11 21:47:12 -040018489 uint64_t cgen_var_1182;
18490 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1182, 1);
18491 countingStream->write((uint64_t*)&cgen_var_1182, 1 * 8);
Lingfeng Yang808a6312018-11-13 21:06:15 -080018492 countingStream->write((VkFormat*)&local_format, sizeof(VkFormat));
18493 countingStream->write((VkImageUsageFlags*)&local_imageUsage, sizeof(VkImageUsageFlags));
18494 countingStream->write((int*)grallocUsage, sizeof(int));
18495 }
18496 uint32_t packetSize_vkGetSwapchainGrallocUsageANDROID = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18497 countingStream->rewind();
18498 uint32_t opcode_vkGetSwapchainGrallocUsageANDROID = OP_vkGetSwapchainGrallocUsageANDROID;
18499 stream->write(&opcode_vkGetSwapchainGrallocUsageANDROID, sizeof(uint32_t));
18500 stream->write(&packetSize_vkGetSwapchainGrallocUsageANDROID, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018501 uint64_t cgen_var_1183;
18502 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1183, 1);
18503 stream->write((uint64_t*)&cgen_var_1183, 1 * 8);
Lingfeng Yang808a6312018-11-13 21:06:15 -080018504 stream->write((VkFormat*)&local_format, sizeof(VkFormat));
18505 stream->write((VkImageUsageFlags*)&local_imageUsage, sizeof(VkImageUsageFlags));
18506 stream->write((int*)grallocUsage, sizeof(int));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018507 AEMU_SCOPED_TRACE("vkGetSwapchainGrallocUsageANDROID readParams");
Lingfeng Yang808a6312018-11-13 21:06:15 -080018508 stream->read((int*)grallocUsage, sizeof(int));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018509 AEMU_SCOPED_TRACE("vkGetSwapchainGrallocUsageANDROID returnUnmarshal");
Lingfeng Yang808a6312018-11-13 21:06:15 -080018510 VkResult vkGetSwapchainGrallocUsageANDROID_VkResult_return = (VkResult)0;
18511 stream->read(&vkGetSwapchainGrallocUsageANDROID_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070018512 pool->freeAll();
Lingfeng Yang808a6312018-11-13 21:06:15 -080018513 countingStream->clearPool();
18514 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018515 mImpl->log("finish vkGetSwapchainGrallocUsageANDROID");;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018516 return vkGetSwapchainGrallocUsageANDROID_VkResult_return;
18517}
18518
18519VkResult VkEncoder::vkAcquireImageANDROID(
18520 VkDevice device,
18521 VkImage image,
18522 int nativeFenceFd,
18523 VkSemaphore semaphore,
18524 VkFence fence)
18525{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018526 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018527 AEMU_SCOPED_TRACE("vkAcquireImageANDROID encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018528 mImpl->log("start vkAcquireImageANDROID");
Lingfeng Yang808a6312018-11-13 21:06:15 -080018529 auto stream = mImpl->stream();
18530 auto countingStream = mImpl->countingStream();
18531 auto resources = mImpl->resources();
18532 auto pool = mImpl->pool();
18533 stream->setHandleMapping(resources->unwrapMapping());
18534 VkDevice local_device;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018535 VkImage local_image;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018536 int local_nativeFenceFd;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018537 VkSemaphore local_semaphore;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018538 VkFence local_fence;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018539 local_device = device;
18540 local_image = image;
18541 local_nativeFenceFd = nativeFenceFd;
18542 local_semaphore = semaphore;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018543 local_fence = fence;
Lingfeng Yangdef88ba2018-12-13 12:43:17 -080018544 mImpl->resources()->unwrap_vkAcquireImageANDROID_nativeFenceFd(nativeFenceFd, &local_nativeFenceFd);
Lingfeng Yang808a6312018-11-13 21:06:15 -080018545 countingStream->rewind();
18546 {
David Reveman9875f2c2019-06-11 21:47:12 -040018547 uint64_t cgen_var_1184;
18548 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1184, 1);
18549 countingStream->write((uint64_t*)&cgen_var_1184, 1 * 8);
18550 uint64_t cgen_var_1185;
18551 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_1185, 1);
18552 countingStream->write((uint64_t*)&cgen_var_1185, 1 * 8);
Lingfeng Yang808a6312018-11-13 21:06:15 -080018553 countingStream->write((int*)&local_nativeFenceFd, sizeof(int));
David Reveman9875f2c2019-06-11 21:47:12 -040018554 uint64_t cgen_var_1186;
18555 countingStream->handleMapping()->mapHandles_VkSemaphore_u64(&local_semaphore, &cgen_var_1186, 1);
18556 countingStream->write((uint64_t*)&cgen_var_1186, 1 * 8);
18557 uint64_t cgen_var_1187;
18558 countingStream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_1187, 1);
18559 countingStream->write((uint64_t*)&cgen_var_1187, 1 * 8);
Lingfeng Yang808a6312018-11-13 21:06:15 -080018560 }
18561 uint32_t packetSize_vkAcquireImageANDROID = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18562 countingStream->rewind();
18563 uint32_t opcode_vkAcquireImageANDROID = OP_vkAcquireImageANDROID;
18564 stream->write(&opcode_vkAcquireImageANDROID, sizeof(uint32_t));
18565 stream->write(&packetSize_vkAcquireImageANDROID, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018566 uint64_t cgen_var_1188;
18567 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1188, 1);
18568 stream->write((uint64_t*)&cgen_var_1188, 1 * 8);
18569 uint64_t cgen_var_1189;
18570 stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_1189, 1);
18571 stream->write((uint64_t*)&cgen_var_1189, 1 * 8);
Lingfeng Yang808a6312018-11-13 21:06:15 -080018572 stream->write((int*)&local_nativeFenceFd, sizeof(int));
David Reveman9875f2c2019-06-11 21:47:12 -040018573 uint64_t cgen_var_1190;
18574 stream->handleMapping()->mapHandles_VkSemaphore_u64(&local_semaphore, &cgen_var_1190, 1);
18575 stream->write((uint64_t*)&cgen_var_1190, 1 * 8);
18576 uint64_t cgen_var_1191;
18577 stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_1191, 1);
18578 stream->write((uint64_t*)&cgen_var_1191, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018579 AEMU_SCOPED_TRACE("vkAcquireImageANDROID readParams");
18580 AEMU_SCOPED_TRACE("vkAcquireImageANDROID returnUnmarshal");
Lingfeng Yang808a6312018-11-13 21:06:15 -080018581 VkResult vkAcquireImageANDROID_VkResult_return = (VkResult)0;
18582 stream->read(&vkAcquireImageANDROID_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070018583 pool->freeAll();
Lingfeng Yang808a6312018-11-13 21:06:15 -080018584 countingStream->clearPool();
18585 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018586 mImpl->log("finish vkAcquireImageANDROID");;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018587 return vkAcquireImageANDROID_VkResult_return;
18588}
18589
18590VkResult VkEncoder::vkQueueSignalReleaseImageANDROID(
18591 VkQueue queue,
18592 uint32_t waitSemaphoreCount,
18593 const VkSemaphore* pWaitSemaphores,
18594 VkImage image,
18595 int* pNativeFenceFd)
18596{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018597 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018598 AEMU_SCOPED_TRACE("vkQueueSignalReleaseImageANDROID encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018599 mImpl->log("start vkQueueSignalReleaseImageANDROID");
Lingfeng Yang808a6312018-11-13 21:06:15 -080018600 auto stream = mImpl->stream();
18601 auto countingStream = mImpl->countingStream();
18602 auto resources = mImpl->resources();
18603 auto pool = mImpl->pool();
18604 stream->setHandleMapping(resources->unwrapMapping());
18605 VkQueue local_queue;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018606 uint32_t local_waitSemaphoreCount;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018607 VkSemaphore* local_pWaitSemaphores;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018608 VkImage local_image;
18609 local_queue = queue;
18610 local_waitSemaphoreCount = waitSemaphoreCount;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018611 local_pWaitSemaphores = nullptr;
18612 if (pWaitSemaphores)
18613 {
Lingfeng Yang5fda8132019-01-23 09:57:27 -080018614 local_pWaitSemaphores = (VkSemaphore*)pool->dupArray(pWaitSemaphores, ((waitSemaphoreCount)) * sizeof(const VkSemaphore));
Lingfeng Yang808a6312018-11-13 21:06:15 -080018615 }
Lingfeng Yang808a6312018-11-13 21:06:15 -080018616 local_image = image;
18617 countingStream->rewind();
18618 {
David Reveman9875f2c2019-06-11 21:47:12 -040018619 uint64_t cgen_var_1192;
18620 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1192, 1);
18621 countingStream->write((uint64_t*)&cgen_var_1192, 1 * 8);
Lingfeng Yang808a6312018-11-13 21:06:15 -080018622 countingStream->write((uint32_t*)&local_waitSemaphoreCount, sizeof(uint32_t));
Lingfeng Yang5fda8132019-01-23 09:57:27 -080018623 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040018624 uint64_t cgen_var_1193 = (uint64_t)(uintptr_t)local_pWaitSemaphores;
18625 countingStream->putBe64(cgen_var_1193);
Lingfeng Yang5fda8132019-01-23 09:57:27 -080018626 if (local_pWaitSemaphores)
18627 {
18628 if (((waitSemaphoreCount)))
18629 {
David Reveman9875f2c2019-06-11 21:47:12 -040018630 uint64_t* cgen_var_1194;
18631 countingStream->alloc((void**)&cgen_var_1194, ((waitSemaphoreCount)) * 8);
18632 countingStream->handleMapping()->mapHandles_VkSemaphore_u64(local_pWaitSemaphores, cgen_var_1194, ((waitSemaphoreCount)));
18633 countingStream->write((uint64_t*)cgen_var_1194, ((waitSemaphoreCount)) * 8);
Lingfeng Yang5fda8132019-01-23 09:57:27 -080018634 }
18635 }
David Reveman9875f2c2019-06-11 21:47:12 -040018636 uint64_t cgen_var_1195;
18637 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_1195, 1);
18638 countingStream->write((uint64_t*)&cgen_var_1195, 1 * 8);
Lingfeng Yang808a6312018-11-13 21:06:15 -080018639 countingStream->write((int*)pNativeFenceFd, sizeof(int));
18640 }
18641 uint32_t packetSize_vkQueueSignalReleaseImageANDROID = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18642 countingStream->rewind();
18643 uint32_t opcode_vkQueueSignalReleaseImageANDROID = OP_vkQueueSignalReleaseImageANDROID;
18644 stream->write(&opcode_vkQueueSignalReleaseImageANDROID, sizeof(uint32_t));
18645 stream->write(&packetSize_vkQueueSignalReleaseImageANDROID, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018646 uint64_t cgen_var_1196;
18647 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1196, 1);
18648 stream->write((uint64_t*)&cgen_var_1196, 1 * 8);
Lingfeng Yang5fda8132019-01-23 09:57:27 -080018649 stream->write((uint32_t*)&local_waitSemaphoreCount, sizeof(uint32_t));
18650 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040018651 uint64_t cgen_var_1197 = (uint64_t)(uintptr_t)local_pWaitSemaphores;
18652 stream->putBe64(cgen_var_1197);
Lingfeng Yang5fda8132019-01-23 09:57:27 -080018653 if (local_pWaitSemaphores)
18654 {
18655 if (((waitSemaphoreCount)))
18656 {
David Reveman9875f2c2019-06-11 21:47:12 -040018657 uint64_t* cgen_var_1198;
18658 stream->alloc((void**)&cgen_var_1198, ((waitSemaphoreCount)) * 8);
18659 stream->handleMapping()->mapHandles_VkSemaphore_u64(local_pWaitSemaphores, cgen_var_1198, ((waitSemaphoreCount)));
18660 stream->write((uint64_t*)cgen_var_1198, ((waitSemaphoreCount)) * 8);
Lingfeng Yang5fda8132019-01-23 09:57:27 -080018661 }
18662 }
David Reveman9875f2c2019-06-11 21:47:12 -040018663 uint64_t cgen_var_1199;
18664 stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_1199, 1);
18665 stream->write((uint64_t*)&cgen_var_1199, 1 * 8);
Lingfeng Yang808a6312018-11-13 21:06:15 -080018666 stream->write((int*)pNativeFenceFd, sizeof(int));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018667 AEMU_SCOPED_TRACE("vkQueueSignalReleaseImageANDROID readParams");
Lingfeng Yang808a6312018-11-13 21:06:15 -080018668 stream->read((int*)pNativeFenceFd, sizeof(int));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018669 AEMU_SCOPED_TRACE("vkQueueSignalReleaseImageANDROID returnUnmarshal");
Lingfeng Yang808a6312018-11-13 21:06:15 -080018670 VkResult vkQueueSignalReleaseImageANDROID_VkResult_return = (VkResult)0;
18671 stream->read(&vkQueueSignalReleaseImageANDROID_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070018672 stream->flush();
18673 pool->freeAll();
Lingfeng Yang808a6312018-11-13 21:06:15 -080018674 countingStream->clearPool();
18675 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018676 mImpl->log("finish vkQueueSignalReleaseImageANDROID");;
Lingfeng Yang808a6312018-11-13 21:06:15 -080018677 return vkQueueSignalReleaseImageANDROID_VkResult_return;
18678}
18679
18680#endif
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018681#ifdef VK_EXT_debug_report
18682VkResult VkEncoder::vkCreateDebugReportCallbackEXT(
18683 VkInstance instance,
18684 const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
18685 const VkAllocationCallbacks* pAllocator,
18686 VkDebugReportCallbackEXT* pCallback)
18687{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018688 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018689 AEMU_SCOPED_TRACE("vkCreateDebugReportCallbackEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018690 mImpl->log("start vkCreateDebugReportCallbackEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018691 auto stream = mImpl->stream();
18692 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018693 auto resources = mImpl->resources();
18694 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080018695 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018696 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018697 VkDebugReportCallbackCreateInfoEXT* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018698 VkAllocationCallbacks* local_pAllocator;
18699 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018700 local_pCreateInfo = nullptr;
18701 if (pCreateInfo)
18702 {
18703 local_pCreateInfo = (VkDebugReportCallbackCreateInfoEXT*)pool->alloc(sizeof(const VkDebugReportCallbackCreateInfoEXT));
18704 deepcopy_VkDebugReportCallbackCreateInfoEXT(pool, pCreateInfo, (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo));
18705 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018706 local_pAllocator = nullptr;
18707 if (pAllocator)
18708 {
18709 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
18710 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
18711 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080018712 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080018713 if (local_pCreateInfo)
18714 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080018715 transform_tohost_VkDebugReportCallbackCreateInfoEXT(mImpl->resources(), (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080018716 }
18717 if (local_pAllocator)
18718 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080018719 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080018720 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018721 countingStream->rewind();
18722 {
David Reveman9875f2c2019-06-11 21:47:12 -040018723 uint64_t cgen_var_1200;
18724 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1200, 1);
18725 countingStream->write((uint64_t*)&cgen_var_1200, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018726 marshal_VkDebugReportCallbackCreateInfoEXT(countingStream, (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080018727 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040018728 uint64_t cgen_var_1201 = (uint64_t)(uintptr_t)local_pAllocator;
18729 countingStream->putBe64(cgen_var_1201);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018730 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018731 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018732 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018733 }
David Reveman9875f2c2019-06-11 21:47:12 -040018734 uint64_t cgen_var_1202;
18735 countingStream->handleMapping()->mapHandles_VkDebugReportCallbackEXT_u64(pCallback, &cgen_var_1202, 1);
18736 countingStream->write((uint64_t*)&cgen_var_1202, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018737 }
18738 uint32_t packetSize_vkCreateDebugReportCallbackEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18739 countingStream->rewind();
18740 uint32_t opcode_vkCreateDebugReportCallbackEXT = OP_vkCreateDebugReportCallbackEXT;
18741 stream->write(&opcode_vkCreateDebugReportCallbackEXT, sizeof(uint32_t));
18742 stream->write(&packetSize_vkCreateDebugReportCallbackEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018743 uint64_t cgen_var_1203;
18744 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1203, 1);
18745 stream->write((uint64_t*)&cgen_var_1203, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018746 marshal_VkDebugReportCallbackCreateInfoEXT(stream, (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080018747 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040018748 uint64_t cgen_var_1204 = (uint64_t)(uintptr_t)local_pAllocator;
18749 stream->putBe64(cgen_var_1204);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018750 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018751 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018752 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018753 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080018754 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040018755 uint64_t cgen_var_1205;
18756 stream->handleMapping()->mapHandles_VkDebugReportCallbackEXT_u64(pCallback, &cgen_var_1205, 1);
18757 stream->write((uint64_t*)&cgen_var_1205, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080018758 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018759 AEMU_SCOPED_TRACE("vkCreateDebugReportCallbackEXT readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -080018760 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -040018761 uint64_t cgen_var_1206;
18762 stream->read((uint64_t*)&cgen_var_1206, 8);
18763 stream->handleMapping()->mapHandles_u64_VkDebugReportCallbackEXT(&cgen_var_1206, (VkDebugReportCallbackEXT*)pCallback, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -080018764 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018765 AEMU_SCOPED_TRACE("vkCreateDebugReportCallbackEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018766 VkResult vkCreateDebugReportCallbackEXT_VkResult_return = (VkResult)0;
18767 stream->read(&vkCreateDebugReportCallbackEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070018768 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080018769 countingStream->clearPool();
18770 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018771 mImpl->log("finish vkCreateDebugReportCallbackEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018772 return vkCreateDebugReportCallbackEXT_VkResult_return;
18773}
18774
18775void VkEncoder::vkDestroyDebugReportCallbackEXT(
18776 VkInstance instance,
18777 VkDebugReportCallbackEXT callback,
18778 const VkAllocationCallbacks* pAllocator)
18779{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018780 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018781 AEMU_SCOPED_TRACE("vkDestroyDebugReportCallbackEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018782 mImpl->log("start vkDestroyDebugReportCallbackEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018783 auto stream = mImpl->stream();
18784 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018785 auto resources = mImpl->resources();
18786 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080018787 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018788 VkInstance local_instance;
Lingfeng Yang9d02e102018-11-10 01:51:46 -080018789 VkDebugReportCallbackEXT local_callback;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018790 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018791 local_instance = instance;
18792 local_callback = callback;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018793 local_pAllocator = nullptr;
18794 if (pAllocator)
18795 {
18796 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
18797 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
18798 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080018799 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080018800 if (local_pAllocator)
18801 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080018802 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080018803 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018804 countingStream->rewind();
18805 {
David Reveman9875f2c2019-06-11 21:47:12 -040018806 uint64_t cgen_var_1207;
18807 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1207, 1);
18808 countingStream->write((uint64_t*)&cgen_var_1207, 1 * 8);
18809 uint64_t cgen_var_1208;
18810 countingStream->handleMapping()->mapHandles_VkDebugReportCallbackEXT_u64(&local_callback, &cgen_var_1208, 1);
18811 countingStream->write((uint64_t*)&cgen_var_1208, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080018812 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040018813 uint64_t cgen_var_1209 = (uint64_t)(uintptr_t)local_pAllocator;
18814 countingStream->putBe64(cgen_var_1209);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018815 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018816 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018817 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018818 }
18819 }
18820 uint32_t packetSize_vkDestroyDebugReportCallbackEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18821 countingStream->rewind();
18822 uint32_t opcode_vkDestroyDebugReportCallbackEXT = OP_vkDestroyDebugReportCallbackEXT;
18823 stream->write(&opcode_vkDestroyDebugReportCallbackEXT, sizeof(uint32_t));
18824 stream->write(&packetSize_vkDestroyDebugReportCallbackEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018825 uint64_t cgen_var_1210;
18826 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1210, 1);
18827 stream->write((uint64_t*)&cgen_var_1210, 1 * 8);
18828 uint64_t cgen_var_1211;
18829 stream->handleMapping()->mapHandles_VkDebugReportCallbackEXT_u64(&local_callback, &cgen_var_1211, 1);
18830 stream->write((uint64_t*)&cgen_var_1211, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080018831 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040018832 uint64_t cgen_var_1212 = (uint64_t)(uintptr_t)local_pAllocator;
18833 stream->putBe64(cgen_var_1212);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018834 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018835 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018836 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018837 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018838 AEMU_SCOPED_TRACE("vkDestroyDebugReportCallbackEXT readParams");
18839 AEMU_SCOPED_TRACE("vkDestroyDebugReportCallbackEXT returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018840 resources->destroyMapping()->mapHandles_VkDebugReportCallbackEXT((VkDebugReportCallbackEXT*)&callback);
Lingfeng Yang256f9252020-07-14 14:27:33 -070018841 pool->freeAll();
18842 countingStream->clearPool();
18843 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018844 mImpl->log("finish vkDestroyDebugReportCallbackEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018845}
18846
18847void VkEncoder::vkDebugReportMessageEXT(
18848 VkInstance instance,
18849 VkDebugReportFlagsEXT flags,
18850 VkDebugReportObjectTypeEXT objectType,
18851 uint64_t object,
18852 size_t location,
18853 int32_t messageCode,
18854 const char* pLayerPrefix,
18855 const char* pMessage)
18856{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018857 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018858 AEMU_SCOPED_TRACE("vkDebugReportMessageEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018859 mImpl->log("start vkDebugReportMessageEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018860 auto stream = mImpl->stream();
18861 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018862 auto resources = mImpl->resources();
18863 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080018864 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018865 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018866 VkDebugReportFlagsEXT local_flags;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018867 VkDebugReportObjectTypeEXT local_objectType;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018868 uint64_t local_object;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018869 size_t local_location;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018870 int32_t local_messageCode;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018871 char* local_pLayerPrefix;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018872 char* local_pMessage;
18873 local_instance = instance;
18874 local_flags = flags;
18875 local_objectType = objectType;
18876 local_object = object;
18877 local_location = location;
18878 local_messageCode = messageCode;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018879 local_pLayerPrefix = nullptr;
18880 if (pLayerPrefix)
18881 {
18882 local_pLayerPrefix = pool->strDup(pLayerPrefix);
18883 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018884 local_pMessage = nullptr;
18885 if (pMessage)
18886 {
18887 local_pMessage = pool->strDup(pMessage);
18888 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018889 countingStream->rewind();
18890 {
David Reveman9875f2c2019-06-11 21:47:12 -040018891 uint64_t cgen_var_1213;
18892 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1213, 1);
18893 countingStream->write((uint64_t*)&cgen_var_1213, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018894 countingStream->write((VkDebugReportFlagsEXT*)&local_flags, sizeof(VkDebugReportFlagsEXT));
18895 countingStream->write((VkDebugReportObjectTypeEXT*)&local_objectType, sizeof(VkDebugReportObjectTypeEXT));
18896 countingStream->write((uint64_t*)&local_object, sizeof(uint64_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018897 uint64_t cgen_var_1214 = (uint64_t)local_location;
18898 countingStream->putBe64(cgen_var_1214);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018899 countingStream->write((int32_t*)&local_messageCode, sizeof(int32_t));
18900 countingStream->putString(local_pLayerPrefix);
18901 countingStream->putString(local_pMessage);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018902 }
18903 uint32_t packetSize_vkDebugReportMessageEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18904 countingStream->rewind();
18905 uint32_t opcode_vkDebugReportMessageEXT = OP_vkDebugReportMessageEXT;
18906 stream->write(&opcode_vkDebugReportMessageEXT, sizeof(uint32_t));
18907 stream->write(&packetSize_vkDebugReportMessageEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018908 uint64_t cgen_var_1215;
18909 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1215, 1);
18910 stream->write((uint64_t*)&cgen_var_1215, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018911 stream->write((VkDebugReportFlagsEXT*)&local_flags, sizeof(VkDebugReportFlagsEXT));
18912 stream->write((VkDebugReportObjectTypeEXT*)&local_objectType, sizeof(VkDebugReportObjectTypeEXT));
18913 stream->write((uint64_t*)&local_object, sizeof(uint64_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018914 uint64_t cgen_var_1216 = (uint64_t)local_location;
18915 stream->putBe64(cgen_var_1216);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018916 stream->write((int32_t*)&local_messageCode, sizeof(int32_t));
18917 stream->putString(local_pLayerPrefix);
18918 stream->putString(local_pMessage);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018919 AEMU_SCOPED_TRACE("vkDebugReportMessageEXT readParams");
18920 AEMU_SCOPED_TRACE("vkDebugReportMessageEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070018921 pool->freeAll();
18922 countingStream->clearPool();
18923 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018924 mImpl->log("finish vkDebugReportMessageEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018925}
18926
18927#endif
18928#ifdef VK_NV_glsl_shader
18929#endif
18930#ifdef VK_EXT_depth_range_unrestricted
18931#endif
18932#ifdef VK_IMG_filter_cubic
18933#endif
18934#ifdef VK_AMD_rasterization_order
18935#endif
18936#ifdef VK_AMD_shader_trinary_minmax
18937#endif
18938#ifdef VK_AMD_shader_explicit_vertex_parameter
18939#endif
18940#ifdef VK_EXT_debug_marker
18941VkResult VkEncoder::vkDebugMarkerSetObjectTagEXT(
18942 VkDevice device,
18943 const VkDebugMarkerObjectTagInfoEXT* pTagInfo)
18944{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018945 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018946 AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectTagEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018947 mImpl->log("start vkDebugMarkerSetObjectTagEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018948 auto stream = mImpl->stream();
18949 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018950 auto resources = mImpl->resources();
18951 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080018952 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018953 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018954 VkDebugMarkerObjectTagInfoEXT* local_pTagInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080018955 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018956 local_pTagInfo = nullptr;
18957 if (pTagInfo)
18958 {
18959 local_pTagInfo = (VkDebugMarkerObjectTagInfoEXT*)pool->alloc(sizeof(const VkDebugMarkerObjectTagInfoEXT));
18960 deepcopy_VkDebugMarkerObjectTagInfoEXT(pool, pTagInfo, (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo));
18961 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080018962 if (local_pTagInfo)
18963 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080018964 transform_tohost_VkDebugMarkerObjectTagInfoEXT(mImpl->resources(), (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080018965 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018966 countingStream->rewind();
18967 {
David Reveman9875f2c2019-06-11 21:47:12 -040018968 uint64_t cgen_var_1217;
18969 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1217, 1);
18970 countingStream->write((uint64_t*)&cgen_var_1217, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018971 marshal_VkDebugMarkerObjectTagInfoEXT(countingStream, (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018972 }
18973 uint32_t packetSize_vkDebugMarkerSetObjectTagEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
18974 countingStream->rewind();
18975 uint32_t opcode_vkDebugMarkerSetObjectTagEXT = OP_vkDebugMarkerSetObjectTagEXT;
18976 stream->write(&opcode_vkDebugMarkerSetObjectTagEXT, sizeof(uint32_t));
18977 stream->write(&packetSize_vkDebugMarkerSetObjectTagEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040018978 uint64_t cgen_var_1218;
18979 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1218, 1);
18980 stream->write((uint64_t*)&cgen_var_1218, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080018981 marshal_VkDebugMarkerObjectTagInfoEXT(stream, (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018982 AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectTagEXT readParams");
18983 AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectTagEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018984 VkResult vkDebugMarkerSetObjectTagEXT_VkResult_return = (VkResult)0;
18985 stream->read(&vkDebugMarkerSetObjectTagEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070018986 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080018987 countingStream->clearPool();
18988 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018989 mImpl->log("finish vkDebugMarkerSetObjectTagEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070018990 return vkDebugMarkerSetObjectTagEXT_VkResult_return;
18991}
18992
18993VkResult VkEncoder::vkDebugMarkerSetObjectNameEXT(
18994 VkDevice device,
18995 const VkDebugMarkerObjectNameInfoEXT* pNameInfo)
18996{
Lingfeng Yang256f9252020-07-14 14:27:33 -070018997 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080018998 AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectNameEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080018999 mImpl->log("start vkDebugMarkerSetObjectNameEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019000 auto stream = mImpl->stream();
19001 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019002 auto resources = mImpl->resources();
19003 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019004 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019005 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019006 VkDebugMarkerObjectNameInfoEXT* local_pNameInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019007 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019008 local_pNameInfo = nullptr;
19009 if (pNameInfo)
19010 {
19011 local_pNameInfo = (VkDebugMarkerObjectNameInfoEXT*)pool->alloc(sizeof(const VkDebugMarkerObjectNameInfoEXT));
19012 deepcopy_VkDebugMarkerObjectNameInfoEXT(pool, pNameInfo, (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo));
19013 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080019014 if (local_pNameInfo)
19015 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080019016 transform_tohost_VkDebugMarkerObjectNameInfoEXT(mImpl->resources(), (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080019017 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019018 countingStream->rewind();
19019 {
David Reveman9875f2c2019-06-11 21:47:12 -040019020 uint64_t cgen_var_1219;
19021 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1219, 1);
19022 countingStream->write((uint64_t*)&cgen_var_1219, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019023 marshal_VkDebugMarkerObjectNameInfoEXT(countingStream, (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019024 }
19025 uint32_t packetSize_vkDebugMarkerSetObjectNameEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19026 countingStream->rewind();
19027 uint32_t opcode_vkDebugMarkerSetObjectNameEXT = OP_vkDebugMarkerSetObjectNameEXT;
19028 stream->write(&opcode_vkDebugMarkerSetObjectNameEXT, sizeof(uint32_t));
19029 stream->write(&packetSize_vkDebugMarkerSetObjectNameEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019030 uint64_t cgen_var_1220;
19031 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1220, 1);
19032 stream->write((uint64_t*)&cgen_var_1220, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019033 marshal_VkDebugMarkerObjectNameInfoEXT(stream, (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019034 AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectNameEXT readParams");
19035 AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectNameEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019036 VkResult vkDebugMarkerSetObjectNameEXT_VkResult_return = (VkResult)0;
19037 stream->read(&vkDebugMarkerSetObjectNameEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070019038 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080019039 countingStream->clearPool();
19040 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019041 mImpl->log("finish vkDebugMarkerSetObjectNameEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019042 return vkDebugMarkerSetObjectNameEXT_VkResult_return;
19043}
19044
19045void VkEncoder::vkCmdDebugMarkerBeginEXT(
19046 VkCommandBuffer commandBuffer,
19047 const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
19048{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019049 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019050 AEMU_SCOPED_TRACE("vkCmdDebugMarkerBeginEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019051 mImpl->log("start vkCmdDebugMarkerBeginEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019052 auto stream = mImpl->stream();
19053 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019054 auto resources = mImpl->resources();
19055 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019056 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019057 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019058 VkDebugMarkerMarkerInfoEXT* local_pMarkerInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019059 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019060 local_pMarkerInfo = nullptr;
19061 if (pMarkerInfo)
19062 {
19063 local_pMarkerInfo = (VkDebugMarkerMarkerInfoEXT*)pool->alloc(sizeof(const VkDebugMarkerMarkerInfoEXT));
19064 deepcopy_VkDebugMarkerMarkerInfoEXT(pool, pMarkerInfo, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
19065 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080019066 if (local_pMarkerInfo)
19067 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080019068 transform_tohost_VkDebugMarkerMarkerInfoEXT(mImpl->resources(), (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080019069 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019070 countingStream->rewind();
19071 {
David Reveman9875f2c2019-06-11 21:47:12 -040019072 uint64_t cgen_var_1221;
19073 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1221, 1);
19074 countingStream->write((uint64_t*)&cgen_var_1221, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019075 marshal_VkDebugMarkerMarkerInfoEXT(countingStream, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019076 }
19077 uint32_t packetSize_vkCmdDebugMarkerBeginEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19078 countingStream->rewind();
19079 uint32_t opcode_vkCmdDebugMarkerBeginEXT = OP_vkCmdDebugMarkerBeginEXT;
19080 stream->write(&opcode_vkCmdDebugMarkerBeginEXT, sizeof(uint32_t));
19081 stream->write(&packetSize_vkCmdDebugMarkerBeginEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019082 uint64_t cgen_var_1222;
19083 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1222, 1);
19084 stream->write((uint64_t*)&cgen_var_1222, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019085 marshal_VkDebugMarkerMarkerInfoEXT(stream, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019086 AEMU_SCOPED_TRACE("vkCmdDebugMarkerBeginEXT readParams");
19087 AEMU_SCOPED_TRACE("vkCmdDebugMarkerBeginEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070019088 pool->freeAll();
19089 countingStream->clearPool();
19090 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019091 mImpl->log("finish vkCmdDebugMarkerBeginEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019092}
19093
19094void VkEncoder::vkCmdDebugMarkerEndEXT(
19095 VkCommandBuffer commandBuffer)
19096{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019097 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019098 AEMU_SCOPED_TRACE("vkCmdDebugMarkerEndEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019099 mImpl->log("start vkCmdDebugMarkerEndEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019100 auto stream = mImpl->stream();
19101 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019102 auto resources = mImpl->resources();
19103 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019104 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019105 VkCommandBuffer local_commandBuffer;
19106 local_commandBuffer = commandBuffer;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019107 countingStream->rewind();
19108 {
David Reveman9875f2c2019-06-11 21:47:12 -040019109 uint64_t cgen_var_1223;
19110 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1223, 1);
19111 countingStream->write((uint64_t*)&cgen_var_1223, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019112 }
19113 uint32_t packetSize_vkCmdDebugMarkerEndEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19114 countingStream->rewind();
19115 uint32_t opcode_vkCmdDebugMarkerEndEXT = OP_vkCmdDebugMarkerEndEXT;
19116 stream->write(&opcode_vkCmdDebugMarkerEndEXT, sizeof(uint32_t));
19117 stream->write(&packetSize_vkCmdDebugMarkerEndEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019118 uint64_t cgen_var_1224;
19119 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1224, 1);
19120 stream->write((uint64_t*)&cgen_var_1224, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019121 AEMU_SCOPED_TRACE("vkCmdDebugMarkerEndEXT readParams");
19122 AEMU_SCOPED_TRACE("vkCmdDebugMarkerEndEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070019123 pool->freeAll();
19124 countingStream->clearPool();
19125 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019126 mImpl->log("finish vkCmdDebugMarkerEndEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019127}
19128
19129void VkEncoder::vkCmdDebugMarkerInsertEXT(
19130 VkCommandBuffer commandBuffer,
19131 const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
19132{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019133 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019134 AEMU_SCOPED_TRACE("vkCmdDebugMarkerInsertEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019135 mImpl->log("start vkCmdDebugMarkerInsertEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019136 auto stream = mImpl->stream();
19137 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019138 auto resources = mImpl->resources();
19139 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019140 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019141 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019142 VkDebugMarkerMarkerInfoEXT* local_pMarkerInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019143 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019144 local_pMarkerInfo = nullptr;
19145 if (pMarkerInfo)
19146 {
19147 local_pMarkerInfo = (VkDebugMarkerMarkerInfoEXT*)pool->alloc(sizeof(const VkDebugMarkerMarkerInfoEXT));
19148 deepcopy_VkDebugMarkerMarkerInfoEXT(pool, pMarkerInfo, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
19149 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080019150 if (local_pMarkerInfo)
19151 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080019152 transform_tohost_VkDebugMarkerMarkerInfoEXT(mImpl->resources(), (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080019153 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019154 countingStream->rewind();
19155 {
David Reveman9875f2c2019-06-11 21:47:12 -040019156 uint64_t cgen_var_1225;
19157 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1225, 1);
19158 countingStream->write((uint64_t*)&cgen_var_1225, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019159 marshal_VkDebugMarkerMarkerInfoEXT(countingStream, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019160 }
19161 uint32_t packetSize_vkCmdDebugMarkerInsertEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19162 countingStream->rewind();
19163 uint32_t opcode_vkCmdDebugMarkerInsertEXT = OP_vkCmdDebugMarkerInsertEXT;
19164 stream->write(&opcode_vkCmdDebugMarkerInsertEXT, sizeof(uint32_t));
19165 stream->write(&packetSize_vkCmdDebugMarkerInsertEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019166 uint64_t cgen_var_1226;
19167 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1226, 1);
19168 stream->write((uint64_t*)&cgen_var_1226, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019169 marshal_VkDebugMarkerMarkerInfoEXT(stream, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019170 AEMU_SCOPED_TRACE("vkCmdDebugMarkerInsertEXT readParams");
19171 AEMU_SCOPED_TRACE("vkCmdDebugMarkerInsertEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070019172 pool->freeAll();
19173 countingStream->clearPool();
19174 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019175 mImpl->log("finish vkCmdDebugMarkerInsertEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019176}
19177
19178#endif
19179#ifdef VK_AMD_gcn_shader
19180#endif
19181#ifdef VK_NV_dedicated_allocation
19182#endif
19183#ifdef VK_AMD_draw_indirect_count
19184void VkEncoder::vkCmdDrawIndirectCountAMD(
19185 VkCommandBuffer commandBuffer,
19186 VkBuffer buffer,
19187 VkDeviceSize offset,
19188 VkBuffer countBuffer,
19189 VkDeviceSize countBufferOffset,
19190 uint32_t maxDrawCount,
19191 uint32_t stride)
19192{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019193 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019194 AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountAMD encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019195 mImpl->log("start vkCmdDrawIndirectCountAMD");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019196 auto stream = mImpl->stream();
19197 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019198 auto resources = mImpl->resources();
19199 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019200 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019201 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019202 VkBuffer local_buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019203 VkDeviceSize local_offset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019204 VkBuffer local_countBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019205 VkDeviceSize local_countBufferOffset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019206 uint32_t local_maxDrawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019207 uint32_t local_stride;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019208 local_commandBuffer = commandBuffer;
19209 local_buffer = buffer;
19210 local_offset = offset;
19211 local_countBuffer = countBuffer;
19212 local_countBufferOffset = countBufferOffset;
19213 local_maxDrawCount = maxDrawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019214 local_stride = stride;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019215 countingStream->rewind();
19216 {
David Reveman9875f2c2019-06-11 21:47:12 -040019217 uint64_t cgen_var_1227;
19218 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1227, 1);
19219 countingStream->write((uint64_t*)&cgen_var_1227, 1 * 8);
19220 uint64_t cgen_var_1228;
19221 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_1228, 1);
19222 countingStream->write((uint64_t*)&cgen_var_1228, 1 * 8);
Lingfeng Yang5fda8132019-01-23 09:57:27 -080019223 countingStream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
David Reveman9875f2c2019-06-11 21:47:12 -040019224 uint64_t cgen_var_1229;
19225 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_countBuffer, &cgen_var_1229, 1);
19226 countingStream->write((uint64_t*)&cgen_var_1229, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019227 countingStream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
19228 countingStream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
19229 countingStream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019230 }
19231 uint32_t packetSize_vkCmdDrawIndirectCountAMD = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19232 countingStream->rewind();
19233 uint32_t opcode_vkCmdDrawIndirectCountAMD = OP_vkCmdDrawIndirectCountAMD;
19234 stream->write(&opcode_vkCmdDrawIndirectCountAMD, sizeof(uint32_t));
19235 stream->write(&packetSize_vkCmdDrawIndirectCountAMD, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019236 uint64_t cgen_var_1230;
19237 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1230, 1);
19238 stream->write((uint64_t*)&cgen_var_1230, 1 * 8);
19239 uint64_t cgen_var_1231;
19240 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_1231, 1);
19241 stream->write((uint64_t*)&cgen_var_1231, 1 * 8);
Lingfeng Yang5fda8132019-01-23 09:57:27 -080019242 stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
David Reveman9875f2c2019-06-11 21:47:12 -040019243 uint64_t cgen_var_1232;
19244 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_countBuffer, &cgen_var_1232, 1);
19245 stream->write((uint64_t*)&cgen_var_1232, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019246 stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
19247 stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
19248 stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019249 AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountAMD readParams");
19250 AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountAMD returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070019251 pool->freeAll();
19252 countingStream->clearPool();
19253 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019254 mImpl->log("finish vkCmdDrawIndirectCountAMD");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019255}
19256
19257void VkEncoder::vkCmdDrawIndexedIndirectCountAMD(
19258 VkCommandBuffer commandBuffer,
19259 VkBuffer buffer,
19260 VkDeviceSize offset,
19261 VkBuffer countBuffer,
19262 VkDeviceSize countBufferOffset,
19263 uint32_t maxDrawCount,
19264 uint32_t stride)
19265{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019266 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019267 AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountAMD encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019268 mImpl->log("start vkCmdDrawIndexedIndirectCountAMD");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019269 auto stream = mImpl->stream();
19270 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019271 auto resources = mImpl->resources();
19272 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019273 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019274 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019275 VkBuffer local_buffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019276 VkDeviceSize local_offset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019277 VkBuffer local_countBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019278 VkDeviceSize local_countBufferOffset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019279 uint32_t local_maxDrawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019280 uint32_t local_stride;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019281 local_commandBuffer = commandBuffer;
19282 local_buffer = buffer;
19283 local_offset = offset;
19284 local_countBuffer = countBuffer;
19285 local_countBufferOffset = countBufferOffset;
19286 local_maxDrawCount = maxDrawCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019287 local_stride = stride;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019288 countingStream->rewind();
19289 {
David Reveman9875f2c2019-06-11 21:47:12 -040019290 uint64_t cgen_var_1233;
19291 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1233, 1);
19292 countingStream->write((uint64_t*)&cgen_var_1233, 1 * 8);
19293 uint64_t cgen_var_1234;
19294 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_1234, 1);
19295 countingStream->write((uint64_t*)&cgen_var_1234, 1 * 8);
Lingfeng Yang5fda8132019-01-23 09:57:27 -080019296 countingStream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
David Reveman9875f2c2019-06-11 21:47:12 -040019297 uint64_t cgen_var_1235;
19298 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_countBuffer, &cgen_var_1235, 1);
19299 countingStream->write((uint64_t*)&cgen_var_1235, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019300 countingStream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
19301 countingStream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
19302 countingStream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019303 }
19304 uint32_t packetSize_vkCmdDrawIndexedIndirectCountAMD = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19305 countingStream->rewind();
19306 uint32_t opcode_vkCmdDrawIndexedIndirectCountAMD = OP_vkCmdDrawIndexedIndirectCountAMD;
19307 stream->write(&opcode_vkCmdDrawIndexedIndirectCountAMD, sizeof(uint32_t));
19308 stream->write(&packetSize_vkCmdDrawIndexedIndirectCountAMD, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019309 uint64_t cgen_var_1236;
19310 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1236, 1);
19311 stream->write((uint64_t*)&cgen_var_1236, 1 * 8);
19312 uint64_t cgen_var_1237;
19313 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_1237, 1);
19314 stream->write((uint64_t*)&cgen_var_1237, 1 * 8);
Lingfeng Yang5fda8132019-01-23 09:57:27 -080019315 stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
David Reveman9875f2c2019-06-11 21:47:12 -040019316 uint64_t cgen_var_1238;
19317 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_countBuffer, &cgen_var_1238, 1);
19318 stream->write((uint64_t*)&cgen_var_1238, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019319 stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
19320 stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
19321 stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019322 AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountAMD readParams");
19323 AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountAMD returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070019324 pool->freeAll();
19325 countingStream->clearPool();
19326 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019327 mImpl->log("finish vkCmdDrawIndexedIndirectCountAMD");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019328}
19329
19330#endif
19331#ifdef VK_AMD_negative_viewport_height
19332#endif
19333#ifdef VK_AMD_gpu_shader_half_float
19334#endif
19335#ifdef VK_AMD_shader_ballot
19336#endif
19337#ifdef VK_AMD_texture_gather_bias_lod
19338#endif
19339#ifdef VK_AMD_shader_info
19340VkResult VkEncoder::vkGetShaderInfoAMD(
19341 VkDevice device,
19342 VkPipeline pipeline,
19343 VkShaderStageFlagBits shaderStage,
19344 VkShaderInfoTypeAMD infoType,
19345 size_t* pInfoSize,
19346 void* pInfo)
19347{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019348 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019349 AEMU_SCOPED_TRACE("vkGetShaderInfoAMD encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019350 mImpl->log("start vkGetShaderInfoAMD");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019351 auto stream = mImpl->stream();
19352 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019353 auto resources = mImpl->resources();
19354 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019355 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019356 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019357 VkPipeline local_pipeline;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019358 VkShaderStageFlagBits local_shaderStage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019359 VkShaderInfoTypeAMD local_infoType;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019360 local_device = device;
19361 local_pipeline = pipeline;
19362 local_shaderStage = shaderStage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019363 local_infoType = infoType;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019364 countingStream->rewind();
19365 {
David Reveman9875f2c2019-06-11 21:47:12 -040019366 uint64_t cgen_var_1239;
19367 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1239, 1);
19368 countingStream->write((uint64_t*)&cgen_var_1239, 1 * 8);
19369 uint64_t cgen_var_1240;
19370 countingStream->handleMapping()->mapHandles_VkPipeline_u64(&local_pipeline, &cgen_var_1240, 1);
19371 countingStream->write((uint64_t*)&cgen_var_1240, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019372 countingStream->write((VkShaderStageFlagBits*)&local_shaderStage, sizeof(VkShaderStageFlagBits));
19373 countingStream->write((VkShaderInfoTypeAMD*)&local_infoType, sizeof(VkShaderInfoTypeAMD));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019374 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040019375 uint64_t cgen_var_1241 = (uint64_t)(uintptr_t)pInfoSize;
19376 countingStream->putBe64(cgen_var_1241);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019377 if (pInfoSize)
19378 {
David Reveman9875f2c2019-06-11 21:47:12 -040019379 uint64_t cgen_var_1242 = (uint64_t)(*pInfoSize);
19380 countingStream->putBe64(cgen_var_1242);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019381 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019382 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040019383 uint64_t cgen_var_1243 = (uint64_t)(uintptr_t)pInfo;
19384 countingStream->putBe64(cgen_var_1243);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019385 if (pInfo)
19386 {
19387 countingStream->write((void*)pInfo, (*(pInfoSize)) * sizeof(uint8_t));
19388 }
19389 }
19390 uint32_t packetSize_vkGetShaderInfoAMD = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19391 countingStream->rewind();
19392 uint32_t opcode_vkGetShaderInfoAMD = OP_vkGetShaderInfoAMD;
19393 stream->write(&opcode_vkGetShaderInfoAMD, sizeof(uint32_t));
19394 stream->write(&packetSize_vkGetShaderInfoAMD, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019395 uint64_t cgen_var_1244;
19396 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1244, 1);
19397 stream->write((uint64_t*)&cgen_var_1244, 1 * 8);
19398 uint64_t cgen_var_1245;
19399 stream->handleMapping()->mapHandles_VkPipeline_u64(&local_pipeline, &cgen_var_1245, 1);
19400 stream->write((uint64_t*)&cgen_var_1245, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019401 stream->write((VkShaderStageFlagBits*)&local_shaderStage, sizeof(VkShaderStageFlagBits));
19402 stream->write((VkShaderInfoTypeAMD*)&local_infoType, sizeof(VkShaderInfoTypeAMD));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019403 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040019404 uint64_t cgen_var_1246 = (uint64_t)(uintptr_t)pInfoSize;
19405 stream->putBe64(cgen_var_1246);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019406 if (pInfoSize)
19407 {
David Reveman9875f2c2019-06-11 21:47:12 -040019408 uint64_t cgen_var_1247 = (uint64_t)(*pInfoSize);
19409 stream->putBe64(cgen_var_1247);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019410 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019411 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040019412 uint64_t cgen_var_1248 = (uint64_t)(uintptr_t)pInfo;
19413 stream->putBe64(cgen_var_1248);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019414 if (pInfo)
19415 {
19416 stream->write((void*)pInfo, (*(pInfoSize)) * sizeof(uint8_t));
19417 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019418 AEMU_SCOPED_TRACE("vkGetShaderInfoAMD readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019419 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019420 size_t* check_pInfoSize;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019421 check_pInfoSize = (size_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019422 if (pInfoSize)
19423 {
19424 if (!(check_pInfoSize))
19425 {
19426 fprintf(stderr, "fatal: pInfoSize inconsistent between guest and host\n");
19427 }
Lingfeng Yangfddc0de2018-11-27 22:26:51 -080019428 (*pInfoSize) = (size_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019429 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019430 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019431 void* check_pInfo;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019432 check_pInfo = (void*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019433 if (pInfo)
19434 {
19435 if (!(check_pInfo))
19436 {
19437 fprintf(stderr, "fatal: pInfo inconsistent between guest and host\n");
19438 }
19439 stream->read((void*)pInfo, (*(pInfoSize)) * sizeof(uint8_t));
19440 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019441 AEMU_SCOPED_TRACE("vkGetShaderInfoAMD returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019442 VkResult vkGetShaderInfoAMD_VkResult_return = (VkResult)0;
19443 stream->read(&vkGetShaderInfoAMD_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070019444 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080019445 countingStream->clearPool();
19446 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019447 mImpl->log("finish vkGetShaderInfoAMD");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019448 return vkGetShaderInfoAMD_VkResult_return;
19449}
19450
19451#endif
19452#ifdef VK_AMD_shader_image_load_store_lod
19453#endif
19454#ifdef VK_IMG_format_pvrtc
19455#endif
19456#ifdef VK_NV_external_memory_capabilities
19457VkResult VkEncoder::vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
19458 VkPhysicalDevice physicalDevice,
19459 VkFormat format,
19460 VkImageType type,
19461 VkImageTiling tiling,
19462 VkImageUsageFlags usage,
19463 VkImageCreateFlags flags,
19464 VkExternalMemoryHandleTypeFlagsNV externalHandleType,
19465 VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties)
19466{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019467 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019468 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalImageFormatPropertiesNV encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019469 mImpl->log("start vkGetPhysicalDeviceExternalImageFormatPropertiesNV");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019470 auto stream = mImpl->stream();
19471 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019472 auto resources = mImpl->resources();
19473 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019474 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019475 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019476 VkFormat local_format;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019477 VkImageType local_type;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019478 VkImageTiling local_tiling;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019479 VkImageUsageFlags local_usage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019480 VkImageCreateFlags local_flags;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019481 VkExternalMemoryHandleTypeFlagsNV local_externalHandleType;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019482 local_physicalDevice = physicalDevice;
19483 local_format = format;
19484 local_type = type;
19485 local_tiling = tiling;
19486 local_usage = usage;
19487 local_flags = flags;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019488 local_externalHandleType = externalHandleType;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019489 countingStream->rewind();
19490 {
David Reveman9875f2c2019-06-11 21:47:12 -040019491 uint64_t cgen_var_1252;
19492 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1252, 1);
19493 countingStream->write((uint64_t*)&cgen_var_1252, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019494 countingStream->write((VkFormat*)&local_format, sizeof(VkFormat));
19495 countingStream->write((VkImageType*)&local_type, sizeof(VkImageType));
19496 countingStream->write((VkImageTiling*)&local_tiling, sizeof(VkImageTiling));
19497 countingStream->write((VkImageUsageFlags*)&local_usage, sizeof(VkImageUsageFlags));
19498 countingStream->write((VkImageCreateFlags*)&local_flags, sizeof(VkImageCreateFlags));
19499 countingStream->write((VkExternalMemoryHandleTypeFlagsNV*)&local_externalHandleType, sizeof(VkExternalMemoryHandleTypeFlagsNV));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019500 marshal_VkExternalImageFormatPropertiesNV(countingStream, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
19501 }
19502 uint32_t packetSize_vkGetPhysicalDeviceExternalImageFormatPropertiesNV = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19503 countingStream->rewind();
19504 uint32_t opcode_vkGetPhysicalDeviceExternalImageFormatPropertiesNV = OP_vkGetPhysicalDeviceExternalImageFormatPropertiesNV;
19505 stream->write(&opcode_vkGetPhysicalDeviceExternalImageFormatPropertiesNV, sizeof(uint32_t));
19506 stream->write(&packetSize_vkGetPhysicalDeviceExternalImageFormatPropertiesNV, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019507 uint64_t cgen_var_1253;
19508 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1253, 1);
19509 stream->write((uint64_t*)&cgen_var_1253, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019510 stream->write((VkFormat*)&local_format, sizeof(VkFormat));
19511 stream->write((VkImageType*)&local_type, sizeof(VkImageType));
19512 stream->write((VkImageTiling*)&local_tiling, sizeof(VkImageTiling));
19513 stream->write((VkImageUsageFlags*)&local_usage, sizeof(VkImageUsageFlags));
19514 stream->write((VkImageCreateFlags*)&local_flags, sizeof(VkImageCreateFlags));
19515 stream->write((VkExternalMemoryHandleTypeFlagsNV*)&local_externalHandleType, sizeof(VkExternalMemoryHandleTypeFlagsNV));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019516 marshal_VkExternalImageFormatPropertiesNV(stream, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019517 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalImageFormatPropertiesNV readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019518 unmarshal_VkExternalImageFormatPropertiesNV(stream, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080019519 if (pExternalImageFormatProperties)
19520 {
19521 transform_fromhost_VkExternalImageFormatPropertiesNV(mImpl->resources(), (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
19522 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019523 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalImageFormatPropertiesNV returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019524 VkResult vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return = (VkResult)0;
19525 stream->read(&vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070019526 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080019527 countingStream->clearPool();
19528 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019529 mImpl->log("finish vkGetPhysicalDeviceExternalImageFormatPropertiesNV");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019530 return vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return;
19531}
19532
19533#endif
19534#ifdef VK_NV_external_memory
19535#endif
19536#ifdef VK_NV_external_memory_win32
19537VkResult VkEncoder::vkGetMemoryWin32HandleNV(
19538 VkDevice device,
19539 VkDeviceMemory memory,
19540 VkExternalMemoryHandleTypeFlagsNV handleType,
19541 HANDLE* pHandle)
19542{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019543 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019544 AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleNV encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019545 mImpl->log("start vkGetMemoryWin32HandleNV");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019546 auto stream = mImpl->stream();
19547 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019548 auto resources = mImpl->resources();
19549 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019550 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019551 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019552 VkDeviceMemory local_memory;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019553 VkExternalMemoryHandleTypeFlagsNV local_handleType;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019554 local_device = device;
19555 local_memory = memory;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019556 local_handleType = handleType;
Lingfeng Yang2b1b8cf2019-02-08 09:53:36 -080019557 mImpl->resources()->deviceMemoryTransform_tohost((VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019558 countingStream->rewind();
19559 {
David Reveman9875f2c2019-06-11 21:47:12 -040019560 uint64_t cgen_var_1254;
19561 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1254, 1);
19562 countingStream->write((uint64_t*)&cgen_var_1254, 1 * 8);
19563 uint64_t cgen_var_1255;
19564 countingStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_1255, 1);
19565 countingStream->write((uint64_t*)&cgen_var_1255, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019566 countingStream->write((VkExternalMemoryHandleTypeFlagsNV*)&local_handleType, sizeof(VkExternalMemoryHandleTypeFlagsNV));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019567 countingStream->write((HANDLE*)pHandle, sizeof(HANDLE));
19568 }
19569 uint32_t packetSize_vkGetMemoryWin32HandleNV = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19570 countingStream->rewind();
19571 uint32_t opcode_vkGetMemoryWin32HandleNV = OP_vkGetMemoryWin32HandleNV;
19572 stream->write(&opcode_vkGetMemoryWin32HandleNV, sizeof(uint32_t));
19573 stream->write(&packetSize_vkGetMemoryWin32HandleNV, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019574 uint64_t cgen_var_1256;
19575 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1256, 1);
19576 stream->write((uint64_t*)&cgen_var_1256, 1 * 8);
19577 uint64_t cgen_var_1257;
19578 stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_1257, 1);
19579 stream->write((uint64_t*)&cgen_var_1257, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019580 stream->write((VkExternalMemoryHandleTypeFlagsNV*)&local_handleType, sizeof(VkExternalMemoryHandleTypeFlagsNV));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019581 stream->write((HANDLE*)pHandle, sizeof(HANDLE));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019582 AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleNV readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019583 stream->read((HANDLE*)pHandle, sizeof(HANDLE));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019584 AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleNV returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019585 VkResult vkGetMemoryWin32HandleNV_VkResult_return = (VkResult)0;
19586 stream->read(&vkGetMemoryWin32HandleNV_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070019587 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080019588 countingStream->clearPool();
19589 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019590 mImpl->log("finish vkGetMemoryWin32HandleNV");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019591 return vkGetMemoryWin32HandleNV_VkResult_return;
19592}
19593
19594#endif
19595#ifdef VK_NV_win32_keyed_mutex
19596#endif
19597#ifdef VK_EXT_validation_flags
19598#endif
19599#ifdef VK_NN_vi_surface
19600VkResult VkEncoder::vkCreateViSurfaceNN(
19601 VkInstance instance,
19602 const VkViSurfaceCreateInfoNN* pCreateInfo,
19603 const VkAllocationCallbacks* pAllocator,
19604 VkSurfaceKHR* pSurface)
19605{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019606 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019607 AEMU_SCOPED_TRACE("vkCreateViSurfaceNN encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019608 mImpl->log("start vkCreateViSurfaceNN");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019609 auto stream = mImpl->stream();
19610 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019611 auto resources = mImpl->resources();
19612 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019613 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019614 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019615 VkViSurfaceCreateInfoNN* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019616 VkAllocationCallbacks* local_pAllocator;
19617 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019618 local_pCreateInfo = nullptr;
19619 if (pCreateInfo)
19620 {
19621 local_pCreateInfo = (VkViSurfaceCreateInfoNN*)pool->alloc(sizeof(const VkViSurfaceCreateInfoNN));
19622 deepcopy_VkViSurfaceCreateInfoNN(pool, pCreateInfo, (VkViSurfaceCreateInfoNN*)(local_pCreateInfo));
19623 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019624 local_pAllocator = nullptr;
19625 if (pAllocator)
19626 {
19627 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
19628 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
19629 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080019630 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080019631 if (local_pCreateInfo)
19632 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080019633 transform_tohost_VkViSurfaceCreateInfoNN(mImpl->resources(), (VkViSurfaceCreateInfoNN*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080019634 }
19635 if (local_pAllocator)
19636 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080019637 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080019638 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019639 countingStream->rewind();
19640 {
David Reveman9875f2c2019-06-11 21:47:12 -040019641 uint64_t cgen_var_1258;
19642 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1258, 1);
19643 countingStream->write((uint64_t*)&cgen_var_1258, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019644 marshal_VkViSurfaceCreateInfoNN(countingStream, (VkViSurfaceCreateInfoNN*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019645 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040019646 uint64_t cgen_var_1259 = (uint64_t)(uintptr_t)local_pAllocator;
19647 countingStream->putBe64(cgen_var_1259);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019648 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019649 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019650 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019651 }
David Reveman9875f2c2019-06-11 21:47:12 -040019652 uint64_t cgen_var_1260;
19653 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_1260, 1);
19654 countingStream->write((uint64_t*)&cgen_var_1260, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019655 }
19656 uint32_t packetSize_vkCreateViSurfaceNN = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19657 countingStream->rewind();
19658 uint32_t opcode_vkCreateViSurfaceNN = OP_vkCreateViSurfaceNN;
19659 stream->write(&opcode_vkCreateViSurfaceNN, sizeof(uint32_t));
19660 stream->write(&packetSize_vkCreateViSurfaceNN, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019661 uint64_t cgen_var_1261;
19662 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1261, 1);
19663 stream->write((uint64_t*)&cgen_var_1261, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019664 marshal_VkViSurfaceCreateInfoNN(stream, (VkViSurfaceCreateInfoNN*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019665 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040019666 uint64_t cgen_var_1262 = (uint64_t)(uintptr_t)local_pAllocator;
19667 stream->putBe64(cgen_var_1262);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019668 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019669 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019670 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019671 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080019672 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040019673 uint64_t cgen_var_1263;
19674 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_1263, 1);
19675 stream->write((uint64_t*)&cgen_var_1263, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080019676 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019677 AEMU_SCOPED_TRACE("vkCreateViSurfaceNN readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040019678 uint64_t cgen_var_1264;
19679 stream->read((uint64_t*)&cgen_var_1264, 8);
19680 stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_1264, (VkSurfaceKHR*)pSurface, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019681 AEMU_SCOPED_TRACE("vkCreateViSurfaceNN returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019682 VkResult vkCreateViSurfaceNN_VkResult_return = (VkResult)0;
19683 stream->read(&vkCreateViSurfaceNN_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070019684 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080019685 countingStream->clearPool();
19686 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019687 mImpl->log("finish vkCreateViSurfaceNN");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019688 return vkCreateViSurfaceNN_VkResult_return;
19689}
19690
19691#endif
19692#ifdef VK_EXT_shader_subgroup_ballot
19693#endif
19694#ifdef VK_EXT_shader_subgroup_vote
19695#endif
19696#ifdef VK_EXT_conditional_rendering
19697void VkEncoder::vkCmdBeginConditionalRenderingEXT(
19698 VkCommandBuffer commandBuffer,
19699 const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin)
19700{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019701 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019702 AEMU_SCOPED_TRACE("vkCmdBeginConditionalRenderingEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019703 mImpl->log("start vkCmdBeginConditionalRenderingEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019704 auto stream = mImpl->stream();
19705 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019706 auto resources = mImpl->resources();
19707 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019708 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019709 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019710 VkConditionalRenderingBeginInfoEXT* local_pConditionalRenderingBegin;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019711 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019712 local_pConditionalRenderingBegin = nullptr;
19713 if (pConditionalRenderingBegin)
19714 {
19715 local_pConditionalRenderingBegin = (VkConditionalRenderingBeginInfoEXT*)pool->alloc(sizeof(const VkConditionalRenderingBeginInfoEXT));
19716 deepcopy_VkConditionalRenderingBeginInfoEXT(pool, pConditionalRenderingBegin, (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin));
19717 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080019718 if (local_pConditionalRenderingBegin)
19719 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080019720 transform_tohost_VkConditionalRenderingBeginInfoEXT(mImpl->resources(), (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin));
Lingfeng Yang62b23322018-12-24 12:45:47 -080019721 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019722 countingStream->rewind();
19723 {
David Reveman9875f2c2019-06-11 21:47:12 -040019724 uint64_t cgen_var_1265;
19725 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1265, 1);
19726 countingStream->write((uint64_t*)&cgen_var_1265, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019727 marshal_VkConditionalRenderingBeginInfoEXT(countingStream, (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019728 }
19729 uint32_t packetSize_vkCmdBeginConditionalRenderingEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19730 countingStream->rewind();
19731 uint32_t opcode_vkCmdBeginConditionalRenderingEXT = OP_vkCmdBeginConditionalRenderingEXT;
19732 stream->write(&opcode_vkCmdBeginConditionalRenderingEXT, sizeof(uint32_t));
19733 stream->write(&packetSize_vkCmdBeginConditionalRenderingEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019734 uint64_t cgen_var_1266;
19735 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1266, 1);
19736 stream->write((uint64_t*)&cgen_var_1266, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019737 marshal_VkConditionalRenderingBeginInfoEXT(stream, (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019738 AEMU_SCOPED_TRACE("vkCmdBeginConditionalRenderingEXT readParams");
19739 AEMU_SCOPED_TRACE("vkCmdBeginConditionalRenderingEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070019740 pool->freeAll();
19741 countingStream->clearPool();
19742 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019743 mImpl->log("finish vkCmdBeginConditionalRenderingEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019744}
19745
19746void VkEncoder::vkCmdEndConditionalRenderingEXT(
19747 VkCommandBuffer commandBuffer)
19748{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019749 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019750 AEMU_SCOPED_TRACE("vkCmdEndConditionalRenderingEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019751 mImpl->log("start vkCmdEndConditionalRenderingEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019752 auto stream = mImpl->stream();
19753 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019754 auto resources = mImpl->resources();
19755 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019756 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019757 VkCommandBuffer local_commandBuffer;
19758 local_commandBuffer = commandBuffer;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019759 countingStream->rewind();
19760 {
David Reveman9875f2c2019-06-11 21:47:12 -040019761 uint64_t cgen_var_1267;
19762 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1267, 1);
19763 countingStream->write((uint64_t*)&cgen_var_1267, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019764 }
19765 uint32_t packetSize_vkCmdEndConditionalRenderingEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19766 countingStream->rewind();
19767 uint32_t opcode_vkCmdEndConditionalRenderingEXT = OP_vkCmdEndConditionalRenderingEXT;
19768 stream->write(&opcode_vkCmdEndConditionalRenderingEXT, sizeof(uint32_t));
19769 stream->write(&packetSize_vkCmdEndConditionalRenderingEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019770 uint64_t cgen_var_1268;
19771 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1268, 1);
19772 stream->write((uint64_t*)&cgen_var_1268, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019773 AEMU_SCOPED_TRACE("vkCmdEndConditionalRenderingEXT readParams");
19774 AEMU_SCOPED_TRACE("vkCmdEndConditionalRenderingEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070019775 pool->freeAll();
19776 countingStream->clearPool();
19777 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019778 mImpl->log("finish vkCmdEndConditionalRenderingEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019779}
19780
19781#endif
19782#ifdef VK_NVX_device_generated_commands
19783void VkEncoder::vkCmdProcessCommandsNVX(
19784 VkCommandBuffer commandBuffer,
19785 const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo)
19786{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019787 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019788 AEMU_SCOPED_TRACE("vkCmdProcessCommandsNVX encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019789 mImpl->log("start vkCmdProcessCommandsNVX");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019790 auto stream = mImpl->stream();
19791 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019792 auto resources = mImpl->resources();
19793 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019794 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019795 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019796 VkCmdProcessCommandsInfoNVX* local_pProcessCommandsInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019797 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019798 local_pProcessCommandsInfo = nullptr;
19799 if (pProcessCommandsInfo)
19800 {
19801 local_pProcessCommandsInfo = (VkCmdProcessCommandsInfoNVX*)pool->alloc(sizeof(const VkCmdProcessCommandsInfoNVX));
19802 deepcopy_VkCmdProcessCommandsInfoNVX(pool, pProcessCommandsInfo, (VkCmdProcessCommandsInfoNVX*)(local_pProcessCommandsInfo));
19803 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080019804 if (local_pProcessCommandsInfo)
19805 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080019806 transform_tohost_VkCmdProcessCommandsInfoNVX(mImpl->resources(), (VkCmdProcessCommandsInfoNVX*)(local_pProcessCommandsInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080019807 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019808 countingStream->rewind();
19809 {
David Reveman9875f2c2019-06-11 21:47:12 -040019810 uint64_t cgen_var_1269;
19811 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1269, 1);
19812 countingStream->write((uint64_t*)&cgen_var_1269, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019813 marshal_VkCmdProcessCommandsInfoNVX(countingStream, (VkCmdProcessCommandsInfoNVX*)(local_pProcessCommandsInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019814 }
19815 uint32_t packetSize_vkCmdProcessCommandsNVX = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19816 countingStream->rewind();
19817 uint32_t opcode_vkCmdProcessCommandsNVX = OP_vkCmdProcessCommandsNVX;
19818 stream->write(&opcode_vkCmdProcessCommandsNVX, sizeof(uint32_t));
19819 stream->write(&packetSize_vkCmdProcessCommandsNVX, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019820 uint64_t cgen_var_1270;
19821 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1270, 1);
19822 stream->write((uint64_t*)&cgen_var_1270, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019823 marshal_VkCmdProcessCommandsInfoNVX(stream, (VkCmdProcessCommandsInfoNVX*)(local_pProcessCommandsInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019824 AEMU_SCOPED_TRACE("vkCmdProcessCommandsNVX readParams");
19825 AEMU_SCOPED_TRACE("vkCmdProcessCommandsNVX returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070019826 pool->freeAll();
19827 countingStream->clearPool();
19828 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019829 mImpl->log("finish vkCmdProcessCommandsNVX");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019830}
19831
19832void VkEncoder::vkCmdReserveSpaceForCommandsNVX(
19833 VkCommandBuffer commandBuffer,
19834 const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo)
19835{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019836 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019837 AEMU_SCOPED_TRACE("vkCmdReserveSpaceForCommandsNVX encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019838 mImpl->log("start vkCmdReserveSpaceForCommandsNVX");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019839 auto stream = mImpl->stream();
19840 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019841 auto resources = mImpl->resources();
19842 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019843 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019844 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019845 VkCmdReserveSpaceForCommandsInfoNVX* local_pReserveSpaceInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019846 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019847 local_pReserveSpaceInfo = nullptr;
19848 if (pReserveSpaceInfo)
19849 {
19850 local_pReserveSpaceInfo = (VkCmdReserveSpaceForCommandsInfoNVX*)pool->alloc(sizeof(const VkCmdReserveSpaceForCommandsInfoNVX));
19851 deepcopy_VkCmdReserveSpaceForCommandsInfoNVX(pool, pReserveSpaceInfo, (VkCmdReserveSpaceForCommandsInfoNVX*)(local_pReserveSpaceInfo));
19852 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080019853 if (local_pReserveSpaceInfo)
19854 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080019855 transform_tohost_VkCmdReserveSpaceForCommandsInfoNVX(mImpl->resources(), (VkCmdReserveSpaceForCommandsInfoNVX*)(local_pReserveSpaceInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080019856 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019857 countingStream->rewind();
19858 {
David Reveman9875f2c2019-06-11 21:47:12 -040019859 uint64_t cgen_var_1271;
19860 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1271, 1);
19861 countingStream->write((uint64_t*)&cgen_var_1271, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019862 marshal_VkCmdReserveSpaceForCommandsInfoNVX(countingStream, (VkCmdReserveSpaceForCommandsInfoNVX*)(local_pReserveSpaceInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019863 }
19864 uint32_t packetSize_vkCmdReserveSpaceForCommandsNVX = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19865 countingStream->rewind();
19866 uint32_t opcode_vkCmdReserveSpaceForCommandsNVX = OP_vkCmdReserveSpaceForCommandsNVX;
19867 stream->write(&opcode_vkCmdReserveSpaceForCommandsNVX, sizeof(uint32_t));
19868 stream->write(&packetSize_vkCmdReserveSpaceForCommandsNVX, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019869 uint64_t cgen_var_1272;
19870 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1272, 1);
19871 stream->write((uint64_t*)&cgen_var_1272, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019872 marshal_VkCmdReserveSpaceForCommandsInfoNVX(stream, (VkCmdReserveSpaceForCommandsInfoNVX*)(local_pReserveSpaceInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019873 AEMU_SCOPED_TRACE("vkCmdReserveSpaceForCommandsNVX readParams");
19874 AEMU_SCOPED_TRACE("vkCmdReserveSpaceForCommandsNVX returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070019875 pool->freeAll();
19876 countingStream->clearPool();
19877 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019878 mImpl->log("finish vkCmdReserveSpaceForCommandsNVX");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019879}
19880
19881VkResult VkEncoder::vkCreateIndirectCommandsLayoutNVX(
19882 VkDevice device,
19883 const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
19884 const VkAllocationCallbacks* pAllocator,
19885 VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout)
19886{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019887 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019888 AEMU_SCOPED_TRACE("vkCreateIndirectCommandsLayoutNVX encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019889 mImpl->log("start vkCreateIndirectCommandsLayoutNVX");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019890 auto stream = mImpl->stream();
19891 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019892 auto resources = mImpl->resources();
19893 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019894 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019895 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019896 VkIndirectCommandsLayoutCreateInfoNVX* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019897 VkAllocationCallbacks* local_pAllocator;
19898 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019899 local_pCreateInfo = nullptr;
19900 if (pCreateInfo)
19901 {
19902 local_pCreateInfo = (VkIndirectCommandsLayoutCreateInfoNVX*)pool->alloc(sizeof(const VkIndirectCommandsLayoutCreateInfoNVX));
19903 deepcopy_VkIndirectCommandsLayoutCreateInfoNVX(pool, pCreateInfo, (VkIndirectCommandsLayoutCreateInfoNVX*)(local_pCreateInfo));
19904 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019905 local_pAllocator = nullptr;
19906 if (pAllocator)
19907 {
19908 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
19909 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
19910 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080019911 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080019912 if (local_pCreateInfo)
19913 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080019914 transform_tohost_VkIndirectCommandsLayoutCreateInfoNVX(mImpl->resources(), (VkIndirectCommandsLayoutCreateInfoNVX*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080019915 }
19916 if (local_pAllocator)
19917 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080019918 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080019919 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019920 countingStream->rewind();
19921 {
David Reveman9875f2c2019-06-11 21:47:12 -040019922 uint64_t cgen_var_1273;
19923 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1273, 1);
19924 countingStream->write((uint64_t*)&cgen_var_1273, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019925 marshal_VkIndirectCommandsLayoutCreateInfoNVX(countingStream, (VkIndirectCommandsLayoutCreateInfoNVX*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019926 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040019927 uint64_t cgen_var_1274 = (uint64_t)(uintptr_t)local_pAllocator;
19928 countingStream->putBe64(cgen_var_1274);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019929 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019930 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019931 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019932 }
David Reveman9875f2c2019-06-11 21:47:12 -040019933 uint64_t cgen_var_1275;
19934 countingStream->handleMapping()->mapHandles_VkIndirectCommandsLayoutNVX_u64(pIndirectCommandsLayout, &cgen_var_1275, 1);
19935 countingStream->write((uint64_t*)&cgen_var_1275, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019936 }
19937 uint32_t packetSize_vkCreateIndirectCommandsLayoutNVX = 4 + 4 + (uint32_t)countingStream->bytesWritten();
19938 countingStream->rewind();
19939 uint32_t opcode_vkCreateIndirectCommandsLayoutNVX = OP_vkCreateIndirectCommandsLayoutNVX;
19940 stream->write(&opcode_vkCreateIndirectCommandsLayoutNVX, sizeof(uint32_t));
19941 stream->write(&packetSize_vkCreateIndirectCommandsLayoutNVX, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040019942 uint64_t cgen_var_1276;
19943 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1276, 1);
19944 stream->write((uint64_t*)&cgen_var_1276, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019945 marshal_VkIndirectCommandsLayoutCreateInfoNVX(stream, (VkIndirectCommandsLayoutCreateInfoNVX*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080019946 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040019947 uint64_t cgen_var_1277 = (uint64_t)(uintptr_t)local_pAllocator;
19948 stream->putBe64(cgen_var_1277);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019949 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019950 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019951 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019952 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080019953 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040019954 uint64_t cgen_var_1278;
19955 stream->handleMapping()->mapHandles_VkIndirectCommandsLayoutNVX_u64(pIndirectCommandsLayout, &cgen_var_1278, 1);
19956 stream->write((uint64_t*)&cgen_var_1278, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080019957 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019958 AEMU_SCOPED_TRACE("vkCreateIndirectCommandsLayoutNVX readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -080019959 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -040019960 uint64_t cgen_var_1279;
19961 stream->read((uint64_t*)&cgen_var_1279, 8);
19962 stream->handleMapping()->mapHandles_u64_VkIndirectCommandsLayoutNVX(&cgen_var_1279, (VkIndirectCommandsLayoutNVX*)pIndirectCommandsLayout, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -080019963 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019964 AEMU_SCOPED_TRACE("vkCreateIndirectCommandsLayoutNVX returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019965 VkResult vkCreateIndirectCommandsLayoutNVX_VkResult_return = (VkResult)0;
19966 stream->read(&vkCreateIndirectCommandsLayoutNVX_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070019967 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080019968 countingStream->clearPool();
19969 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019970 mImpl->log("finish vkCreateIndirectCommandsLayoutNVX");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019971 return vkCreateIndirectCommandsLayoutNVX_VkResult_return;
19972}
19973
19974void VkEncoder::vkDestroyIndirectCommandsLayoutNVX(
19975 VkDevice device,
19976 VkIndirectCommandsLayoutNVX indirectCommandsLayout,
19977 const VkAllocationCallbacks* pAllocator)
19978{
Lingfeng Yang256f9252020-07-14 14:27:33 -070019979 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080019980 AEMU_SCOPED_TRACE("vkDestroyIndirectCommandsLayoutNVX encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080019981 mImpl->log("start vkDestroyIndirectCommandsLayoutNVX");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070019982 auto stream = mImpl->stream();
19983 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019984 auto resources = mImpl->resources();
19985 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080019986 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019987 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -080019988 VkIndirectCommandsLayoutNVX local_indirectCommandsLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019989 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -080019990 local_device = device;
19991 local_indirectCommandsLayout = indirectCommandsLayout;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080019992 local_pAllocator = nullptr;
19993 if (pAllocator)
19994 {
19995 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
19996 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
19997 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080019998 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080019999 if (local_pAllocator)
20000 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080020001 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080020002 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020003 countingStream->rewind();
20004 {
David Reveman9875f2c2019-06-11 21:47:12 -040020005 uint64_t cgen_var_1280;
20006 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1280, 1);
20007 countingStream->write((uint64_t*)&cgen_var_1280, 1 * 8);
20008 uint64_t cgen_var_1281;
20009 countingStream->handleMapping()->mapHandles_VkIndirectCommandsLayoutNVX_u64(&local_indirectCommandsLayout, &cgen_var_1281, 1);
20010 countingStream->write((uint64_t*)&cgen_var_1281, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080020011 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040020012 uint64_t cgen_var_1282 = (uint64_t)(uintptr_t)local_pAllocator;
20013 countingStream->putBe64(cgen_var_1282);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020014 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020015 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020016 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020017 }
20018 }
20019 uint32_t packetSize_vkDestroyIndirectCommandsLayoutNVX = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20020 countingStream->rewind();
20021 uint32_t opcode_vkDestroyIndirectCommandsLayoutNVX = OP_vkDestroyIndirectCommandsLayoutNVX;
20022 stream->write(&opcode_vkDestroyIndirectCommandsLayoutNVX, sizeof(uint32_t));
20023 stream->write(&packetSize_vkDestroyIndirectCommandsLayoutNVX, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020024 uint64_t cgen_var_1283;
20025 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1283, 1);
20026 stream->write((uint64_t*)&cgen_var_1283, 1 * 8);
20027 uint64_t cgen_var_1284;
20028 stream->handleMapping()->mapHandles_VkIndirectCommandsLayoutNVX_u64(&local_indirectCommandsLayout, &cgen_var_1284, 1);
20029 stream->write((uint64_t*)&cgen_var_1284, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080020030 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040020031 uint64_t cgen_var_1285 = (uint64_t)(uintptr_t)local_pAllocator;
20032 stream->putBe64(cgen_var_1285);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020033 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020034 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020035 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020036 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020037 AEMU_SCOPED_TRACE("vkDestroyIndirectCommandsLayoutNVX readParams");
20038 AEMU_SCOPED_TRACE("vkDestroyIndirectCommandsLayoutNVX returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020039 resources->destroyMapping()->mapHandles_VkIndirectCommandsLayoutNVX((VkIndirectCommandsLayoutNVX*)&indirectCommandsLayout);
Lingfeng Yang256f9252020-07-14 14:27:33 -070020040 pool->freeAll();
20041 countingStream->clearPool();
20042 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020043 mImpl->log("finish vkDestroyIndirectCommandsLayoutNVX");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020044}
20045
20046VkResult VkEncoder::vkCreateObjectTableNVX(
20047 VkDevice device,
20048 const VkObjectTableCreateInfoNVX* pCreateInfo,
20049 const VkAllocationCallbacks* pAllocator,
20050 VkObjectTableNVX* pObjectTable)
20051{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020052 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020053 AEMU_SCOPED_TRACE("vkCreateObjectTableNVX encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020054 mImpl->log("start vkCreateObjectTableNVX");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020055 auto stream = mImpl->stream();
20056 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020057 auto resources = mImpl->resources();
20058 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020059 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020060 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020061 VkObjectTableCreateInfoNVX* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020062 VkAllocationCallbacks* local_pAllocator;
20063 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020064 local_pCreateInfo = nullptr;
20065 if (pCreateInfo)
20066 {
20067 local_pCreateInfo = (VkObjectTableCreateInfoNVX*)pool->alloc(sizeof(const VkObjectTableCreateInfoNVX));
20068 deepcopy_VkObjectTableCreateInfoNVX(pool, pCreateInfo, (VkObjectTableCreateInfoNVX*)(local_pCreateInfo));
20069 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020070 local_pAllocator = nullptr;
20071 if (pAllocator)
20072 {
20073 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
20074 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
20075 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080020076 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080020077 if (local_pCreateInfo)
20078 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080020079 transform_tohost_VkObjectTableCreateInfoNVX(mImpl->resources(), (VkObjectTableCreateInfoNVX*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080020080 }
20081 if (local_pAllocator)
20082 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080020083 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080020084 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020085 countingStream->rewind();
20086 {
David Reveman9875f2c2019-06-11 21:47:12 -040020087 uint64_t cgen_var_1286;
20088 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1286, 1);
20089 countingStream->write((uint64_t*)&cgen_var_1286, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020090 marshal_VkObjectTableCreateInfoNVX(countingStream, (VkObjectTableCreateInfoNVX*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080020091 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040020092 uint64_t cgen_var_1287 = (uint64_t)(uintptr_t)local_pAllocator;
20093 countingStream->putBe64(cgen_var_1287);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020094 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020095 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020096 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020097 }
David Reveman9875f2c2019-06-11 21:47:12 -040020098 uint64_t cgen_var_1288;
20099 countingStream->handleMapping()->mapHandles_VkObjectTableNVX_u64(pObjectTable, &cgen_var_1288, 1);
20100 countingStream->write((uint64_t*)&cgen_var_1288, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020101 }
20102 uint32_t packetSize_vkCreateObjectTableNVX = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20103 countingStream->rewind();
20104 uint32_t opcode_vkCreateObjectTableNVX = OP_vkCreateObjectTableNVX;
20105 stream->write(&opcode_vkCreateObjectTableNVX, sizeof(uint32_t));
20106 stream->write(&packetSize_vkCreateObjectTableNVX, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020107 uint64_t cgen_var_1289;
20108 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1289, 1);
20109 stream->write((uint64_t*)&cgen_var_1289, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020110 marshal_VkObjectTableCreateInfoNVX(stream, (VkObjectTableCreateInfoNVX*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080020111 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040020112 uint64_t cgen_var_1290 = (uint64_t)(uintptr_t)local_pAllocator;
20113 stream->putBe64(cgen_var_1290);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020114 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020115 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020116 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020117 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080020118 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040020119 uint64_t cgen_var_1291;
20120 stream->handleMapping()->mapHandles_VkObjectTableNVX_u64(pObjectTable, &cgen_var_1291, 1);
20121 stream->write((uint64_t*)&cgen_var_1291, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080020122 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020123 AEMU_SCOPED_TRACE("vkCreateObjectTableNVX readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -080020124 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -040020125 uint64_t cgen_var_1292;
20126 stream->read((uint64_t*)&cgen_var_1292, 8);
20127 stream->handleMapping()->mapHandles_u64_VkObjectTableNVX(&cgen_var_1292, (VkObjectTableNVX*)pObjectTable, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -080020128 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020129 AEMU_SCOPED_TRACE("vkCreateObjectTableNVX returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020130 VkResult vkCreateObjectTableNVX_VkResult_return = (VkResult)0;
20131 stream->read(&vkCreateObjectTableNVX_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070020132 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080020133 countingStream->clearPool();
20134 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020135 mImpl->log("finish vkCreateObjectTableNVX");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020136 return vkCreateObjectTableNVX_VkResult_return;
20137}
20138
20139void VkEncoder::vkDestroyObjectTableNVX(
20140 VkDevice device,
20141 VkObjectTableNVX objectTable,
20142 const VkAllocationCallbacks* pAllocator)
20143{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020144 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020145 AEMU_SCOPED_TRACE("vkDestroyObjectTableNVX encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020146 mImpl->log("start vkDestroyObjectTableNVX");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020147 auto stream = mImpl->stream();
20148 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020149 auto resources = mImpl->resources();
20150 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020151 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020152 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -080020153 VkObjectTableNVX local_objectTable;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020154 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020155 local_device = device;
20156 local_objectTable = objectTable;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020157 local_pAllocator = nullptr;
20158 if (pAllocator)
20159 {
20160 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
20161 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
20162 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080020163 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080020164 if (local_pAllocator)
20165 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080020166 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080020167 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020168 countingStream->rewind();
20169 {
David Reveman9875f2c2019-06-11 21:47:12 -040020170 uint64_t cgen_var_1293;
20171 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1293, 1);
20172 countingStream->write((uint64_t*)&cgen_var_1293, 1 * 8);
20173 uint64_t cgen_var_1294;
20174 countingStream->handleMapping()->mapHandles_VkObjectTableNVX_u64(&local_objectTable, &cgen_var_1294, 1);
20175 countingStream->write((uint64_t*)&cgen_var_1294, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080020176 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040020177 uint64_t cgen_var_1295 = (uint64_t)(uintptr_t)local_pAllocator;
20178 countingStream->putBe64(cgen_var_1295);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020179 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020180 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020181 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020182 }
20183 }
20184 uint32_t packetSize_vkDestroyObjectTableNVX = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20185 countingStream->rewind();
20186 uint32_t opcode_vkDestroyObjectTableNVX = OP_vkDestroyObjectTableNVX;
20187 stream->write(&opcode_vkDestroyObjectTableNVX, sizeof(uint32_t));
20188 stream->write(&packetSize_vkDestroyObjectTableNVX, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020189 uint64_t cgen_var_1296;
20190 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1296, 1);
20191 stream->write((uint64_t*)&cgen_var_1296, 1 * 8);
20192 uint64_t cgen_var_1297;
20193 stream->handleMapping()->mapHandles_VkObjectTableNVX_u64(&local_objectTable, &cgen_var_1297, 1);
20194 stream->write((uint64_t*)&cgen_var_1297, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080020195 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040020196 uint64_t cgen_var_1298 = (uint64_t)(uintptr_t)local_pAllocator;
20197 stream->putBe64(cgen_var_1298);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020198 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020199 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020200 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020201 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020202 AEMU_SCOPED_TRACE("vkDestroyObjectTableNVX readParams");
20203 AEMU_SCOPED_TRACE("vkDestroyObjectTableNVX returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020204 resources->destroyMapping()->mapHandles_VkObjectTableNVX((VkObjectTableNVX*)&objectTable);
Lingfeng Yang256f9252020-07-14 14:27:33 -070020205 pool->freeAll();
20206 countingStream->clearPool();
20207 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020208 mImpl->log("finish vkDestroyObjectTableNVX");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020209}
20210
20211VkResult VkEncoder::vkRegisterObjectsNVX(
20212 VkDevice device,
20213 VkObjectTableNVX objectTable,
20214 uint32_t objectCount,
20215 const VkObjectTableEntryNVX* const* ppObjectTableEntries,
20216 const uint32_t* pObjectIndices)
20217{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020218 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020219 AEMU_SCOPED_TRACE("vkRegisterObjectsNVX encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020220 mImpl->log("start vkRegisterObjectsNVX");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020221 auto stream = mImpl->stream();
20222 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020223 auto resources = mImpl->resources();
20224 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020225 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020226 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020227 VkObjectTableNVX local_objectTable;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020228 uint32_t local_objectCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020229 VkObjectTableEntryNVX** local_ppObjectTableEntries;
20230 uint32_t* local_pObjectIndices;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020231 local_device = device;
20232 local_objectTable = objectTable;
20233 local_objectCount = objectCount;
20234 (void)ppObjectTableEntries;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020235 local_pObjectIndices = nullptr;
20236 if (pObjectIndices)
20237 {
20238 local_pObjectIndices = (uint32_t*)pool->dupArray(pObjectIndices, ((objectCount)) * sizeof(const uint32_t));
20239 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080020240 (void)local_ppObjectTableEntries;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020241 countingStream->rewind();
20242 {
David Reveman9875f2c2019-06-11 21:47:12 -040020243 uint64_t cgen_var_1299;
20244 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1299, 1);
20245 countingStream->write((uint64_t*)&cgen_var_1299, 1 * 8);
20246 uint64_t cgen_var_1300;
20247 countingStream->handleMapping()->mapHandles_VkObjectTableNVX_u64(&local_objectTable, &cgen_var_1300, 1);
20248 countingStream->write((uint64_t*)&cgen_var_1300, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020249 countingStream->write((uint32_t*)&local_objectCount, sizeof(uint32_t));
Lingfeng Yang36891c52018-11-09 14:18:35 -080020250 (void)local_ppObjectTableEntries;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020251 countingStream->write((uint32_t*)local_pObjectIndices, ((objectCount)) * sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020252 }
20253 uint32_t packetSize_vkRegisterObjectsNVX = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20254 countingStream->rewind();
20255 uint32_t opcode_vkRegisterObjectsNVX = OP_vkRegisterObjectsNVX;
20256 stream->write(&opcode_vkRegisterObjectsNVX, sizeof(uint32_t));
20257 stream->write(&packetSize_vkRegisterObjectsNVX, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020258 uint64_t cgen_var_1301;
20259 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1301, 1);
20260 stream->write((uint64_t*)&cgen_var_1301, 1 * 8);
20261 uint64_t cgen_var_1302;
20262 stream->handleMapping()->mapHandles_VkObjectTableNVX_u64(&local_objectTable, &cgen_var_1302, 1);
20263 stream->write((uint64_t*)&cgen_var_1302, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020264 stream->write((uint32_t*)&local_objectCount, sizeof(uint32_t));
Lingfeng Yang36891c52018-11-09 14:18:35 -080020265 (void)local_ppObjectTableEntries;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020266 stream->write((uint32_t*)local_pObjectIndices, ((objectCount)) * sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020267 AEMU_SCOPED_TRACE("vkRegisterObjectsNVX readParams");
20268 AEMU_SCOPED_TRACE("vkRegisterObjectsNVX returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020269 VkResult vkRegisterObjectsNVX_VkResult_return = (VkResult)0;
20270 stream->read(&vkRegisterObjectsNVX_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070020271 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080020272 countingStream->clearPool();
20273 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020274 mImpl->log("finish vkRegisterObjectsNVX");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020275 return vkRegisterObjectsNVX_VkResult_return;
20276}
20277
20278VkResult VkEncoder::vkUnregisterObjectsNVX(
20279 VkDevice device,
20280 VkObjectTableNVX objectTable,
20281 uint32_t objectCount,
20282 const VkObjectEntryTypeNVX* pObjectEntryTypes,
20283 const uint32_t* pObjectIndices)
20284{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020285 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020286 AEMU_SCOPED_TRACE("vkUnregisterObjectsNVX encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020287 mImpl->log("start vkUnregisterObjectsNVX");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020288 auto stream = mImpl->stream();
20289 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020290 auto resources = mImpl->resources();
20291 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020292 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020293 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020294 VkObjectTableNVX local_objectTable;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020295 uint32_t local_objectCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020296 VkObjectEntryTypeNVX* local_pObjectEntryTypes;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020297 uint32_t* local_pObjectIndices;
20298 local_device = device;
20299 local_objectTable = objectTable;
20300 local_objectCount = objectCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020301 local_pObjectEntryTypes = nullptr;
20302 if (pObjectEntryTypes)
20303 {
20304 local_pObjectEntryTypes = (VkObjectEntryTypeNVX*)pool->dupArray(pObjectEntryTypes, ((objectCount)) * sizeof(const VkObjectEntryTypeNVX));
20305 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020306 local_pObjectIndices = nullptr;
20307 if (pObjectIndices)
20308 {
20309 local_pObjectIndices = (uint32_t*)pool->dupArray(pObjectIndices, ((objectCount)) * sizeof(const uint32_t));
20310 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020311 countingStream->rewind();
20312 {
David Reveman9875f2c2019-06-11 21:47:12 -040020313 uint64_t cgen_var_1303;
20314 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1303, 1);
20315 countingStream->write((uint64_t*)&cgen_var_1303, 1 * 8);
20316 uint64_t cgen_var_1304;
20317 countingStream->handleMapping()->mapHandles_VkObjectTableNVX_u64(&local_objectTable, &cgen_var_1304, 1);
20318 countingStream->write((uint64_t*)&cgen_var_1304, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020319 countingStream->write((uint32_t*)&local_objectCount, sizeof(uint32_t));
20320 countingStream->write((VkObjectEntryTypeNVX*)local_pObjectEntryTypes, ((objectCount)) * sizeof(VkObjectEntryTypeNVX));
20321 countingStream->write((uint32_t*)local_pObjectIndices, ((objectCount)) * sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020322 }
20323 uint32_t packetSize_vkUnregisterObjectsNVX = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20324 countingStream->rewind();
20325 uint32_t opcode_vkUnregisterObjectsNVX = OP_vkUnregisterObjectsNVX;
20326 stream->write(&opcode_vkUnregisterObjectsNVX, sizeof(uint32_t));
20327 stream->write(&packetSize_vkUnregisterObjectsNVX, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020328 uint64_t cgen_var_1305;
20329 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1305, 1);
20330 stream->write((uint64_t*)&cgen_var_1305, 1 * 8);
20331 uint64_t cgen_var_1306;
20332 stream->handleMapping()->mapHandles_VkObjectTableNVX_u64(&local_objectTable, &cgen_var_1306, 1);
20333 stream->write((uint64_t*)&cgen_var_1306, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020334 stream->write((uint32_t*)&local_objectCount, sizeof(uint32_t));
20335 stream->write((VkObjectEntryTypeNVX*)local_pObjectEntryTypes, ((objectCount)) * sizeof(VkObjectEntryTypeNVX));
20336 stream->write((uint32_t*)local_pObjectIndices, ((objectCount)) * sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020337 AEMU_SCOPED_TRACE("vkUnregisterObjectsNVX readParams");
20338 AEMU_SCOPED_TRACE("vkUnregisterObjectsNVX returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020339 VkResult vkUnregisterObjectsNVX_VkResult_return = (VkResult)0;
20340 stream->read(&vkUnregisterObjectsNVX_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070020341 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080020342 countingStream->clearPool();
20343 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020344 mImpl->log("finish vkUnregisterObjectsNVX");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020345 return vkUnregisterObjectsNVX_VkResult_return;
20346}
20347
20348void VkEncoder::vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
20349 VkPhysicalDevice physicalDevice,
20350 VkDeviceGeneratedCommandsFeaturesNVX* pFeatures,
20351 VkDeviceGeneratedCommandsLimitsNVX* pLimits)
20352{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020353 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020354 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020355 mImpl->log("start vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020356 auto stream = mImpl->stream();
20357 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020358 auto resources = mImpl->resources();
20359 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020360 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020361 VkPhysicalDevice local_physicalDevice;
20362 local_physicalDevice = physicalDevice;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020363 countingStream->rewind();
20364 {
David Reveman9875f2c2019-06-11 21:47:12 -040020365 uint64_t cgen_var_1307;
20366 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1307, 1);
20367 countingStream->write((uint64_t*)&cgen_var_1307, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020368 marshal_VkDeviceGeneratedCommandsFeaturesNVX(countingStream, (VkDeviceGeneratedCommandsFeaturesNVX*)(pFeatures));
20369 marshal_VkDeviceGeneratedCommandsLimitsNVX(countingStream, (VkDeviceGeneratedCommandsLimitsNVX*)(pLimits));
20370 }
20371 uint32_t packetSize_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20372 countingStream->rewind();
20373 uint32_t opcode_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX = OP_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX;
20374 stream->write(&opcode_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX, sizeof(uint32_t));
20375 stream->write(&packetSize_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020376 uint64_t cgen_var_1308;
20377 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1308, 1);
20378 stream->write((uint64_t*)&cgen_var_1308, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020379 marshal_VkDeviceGeneratedCommandsFeaturesNVX(stream, (VkDeviceGeneratedCommandsFeaturesNVX*)(pFeatures));
20380 marshal_VkDeviceGeneratedCommandsLimitsNVX(stream, (VkDeviceGeneratedCommandsLimitsNVX*)(pLimits));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020381 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020382 unmarshal_VkDeviceGeneratedCommandsFeaturesNVX(stream, (VkDeviceGeneratedCommandsFeaturesNVX*)(pFeatures));
Lingfeng Yang97a06702018-12-24 17:02:43 -080020383 if (pFeatures)
20384 {
20385 transform_fromhost_VkDeviceGeneratedCommandsFeaturesNVX(mImpl->resources(), (VkDeviceGeneratedCommandsFeaturesNVX*)(pFeatures));
20386 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020387 unmarshal_VkDeviceGeneratedCommandsLimitsNVX(stream, (VkDeviceGeneratedCommandsLimitsNVX*)(pLimits));
Lingfeng Yang97a06702018-12-24 17:02:43 -080020388 if (pLimits)
20389 {
20390 transform_fromhost_VkDeviceGeneratedCommandsLimitsNVX(mImpl->resources(), (VkDeviceGeneratedCommandsLimitsNVX*)(pLimits));
20391 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020392 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070020393 pool->freeAll();
20394 countingStream->clearPool();
20395 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020396 mImpl->log("finish vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020397}
20398
20399#endif
20400#ifdef VK_NV_clip_space_w_scaling
20401void VkEncoder::vkCmdSetViewportWScalingNV(
20402 VkCommandBuffer commandBuffer,
20403 uint32_t firstViewport,
20404 uint32_t viewportCount,
20405 const VkViewportWScalingNV* pViewportWScalings)
20406{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020407 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020408 AEMU_SCOPED_TRACE("vkCmdSetViewportWScalingNV encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020409 mImpl->log("start vkCmdSetViewportWScalingNV");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020410 auto stream = mImpl->stream();
20411 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020412 auto resources = mImpl->resources();
20413 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020414 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020415 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020416 uint32_t local_firstViewport;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020417 uint32_t local_viewportCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020418 VkViewportWScalingNV* local_pViewportWScalings;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020419 local_commandBuffer = commandBuffer;
20420 local_firstViewport = firstViewport;
20421 local_viewportCount = viewportCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020422 local_pViewportWScalings = nullptr;
20423 if (pViewportWScalings)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020424 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020425 local_pViewportWScalings = (VkViewportWScalingNV*)pool->alloc(((viewportCount)) * sizeof(const VkViewportWScalingNV));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020426 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
20427 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020428 deepcopy_VkViewportWScalingNV(pool, pViewportWScalings + i, (VkViewportWScalingNV*)(local_pViewportWScalings + i));
20429 }
20430 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080020431 if (local_pViewportWScalings)
20432 {
20433 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
20434 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080020435 transform_tohost_VkViewportWScalingNV(mImpl->resources(), (VkViewportWScalingNV*)(local_pViewportWScalings + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -080020436 }
20437 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020438 countingStream->rewind();
20439 {
David Reveman9875f2c2019-06-11 21:47:12 -040020440 uint64_t cgen_var_1309;
20441 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1309, 1);
20442 countingStream->write((uint64_t*)&cgen_var_1309, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020443 countingStream->write((uint32_t*)&local_firstViewport, sizeof(uint32_t));
20444 countingStream->write((uint32_t*)&local_viewportCount, sizeof(uint32_t));
20445 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
20446 {
20447 marshal_VkViewportWScalingNV(countingStream, (VkViewportWScalingNV*)(local_pViewportWScalings + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020448 }
20449 }
20450 uint32_t packetSize_vkCmdSetViewportWScalingNV = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20451 countingStream->rewind();
20452 uint32_t opcode_vkCmdSetViewportWScalingNV = OP_vkCmdSetViewportWScalingNV;
20453 stream->write(&opcode_vkCmdSetViewportWScalingNV, sizeof(uint32_t));
20454 stream->write(&packetSize_vkCmdSetViewportWScalingNV, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020455 uint64_t cgen_var_1310;
20456 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1310, 1);
20457 stream->write((uint64_t*)&cgen_var_1310, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020458 stream->write((uint32_t*)&local_firstViewport, sizeof(uint32_t));
20459 stream->write((uint32_t*)&local_viewportCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020460 for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
20461 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020462 marshal_VkViewportWScalingNV(stream, (VkViewportWScalingNV*)(local_pViewportWScalings + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020463 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020464 AEMU_SCOPED_TRACE("vkCmdSetViewportWScalingNV readParams");
20465 AEMU_SCOPED_TRACE("vkCmdSetViewportWScalingNV returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070020466 pool->freeAll();
20467 countingStream->clearPool();
20468 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020469 mImpl->log("finish vkCmdSetViewportWScalingNV");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020470}
20471
20472#endif
20473#ifdef VK_EXT_direct_mode_display
20474VkResult VkEncoder::vkReleaseDisplayEXT(
20475 VkPhysicalDevice physicalDevice,
20476 VkDisplayKHR display)
20477{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020478 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020479 AEMU_SCOPED_TRACE("vkReleaseDisplayEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020480 mImpl->log("start vkReleaseDisplayEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020481 auto stream = mImpl->stream();
20482 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020483 auto resources = mImpl->resources();
20484 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020485 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020486 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020487 VkDisplayKHR local_display;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020488 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020489 local_display = display;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020490 countingStream->rewind();
20491 {
David Reveman9875f2c2019-06-11 21:47:12 -040020492 uint64_t cgen_var_1311;
20493 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1311, 1);
20494 countingStream->write((uint64_t*)&cgen_var_1311, 1 * 8);
20495 uint64_t cgen_var_1312;
20496 countingStream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1312, 1);
20497 countingStream->write((uint64_t*)&cgen_var_1312, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020498 }
20499 uint32_t packetSize_vkReleaseDisplayEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20500 countingStream->rewind();
20501 uint32_t opcode_vkReleaseDisplayEXT = OP_vkReleaseDisplayEXT;
20502 stream->write(&opcode_vkReleaseDisplayEXT, sizeof(uint32_t));
20503 stream->write(&packetSize_vkReleaseDisplayEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020504 uint64_t cgen_var_1313;
20505 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1313, 1);
20506 stream->write((uint64_t*)&cgen_var_1313, 1 * 8);
20507 uint64_t cgen_var_1314;
20508 stream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1314, 1);
20509 stream->write((uint64_t*)&cgen_var_1314, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020510 AEMU_SCOPED_TRACE("vkReleaseDisplayEXT readParams");
20511 AEMU_SCOPED_TRACE("vkReleaseDisplayEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020512 VkResult vkReleaseDisplayEXT_VkResult_return = (VkResult)0;
20513 stream->read(&vkReleaseDisplayEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070020514 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080020515 countingStream->clearPool();
20516 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020517 mImpl->log("finish vkReleaseDisplayEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020518 return vkReleaseDisplayEXT_VkResult_return;
20519}
20520
20521#endif
20522#ifdef VK_EXT_acquire_xlib_display
20523VkResult VkEncoder::vkAcquireXlibDisplayEXT(
20524 VkPhysicalDevice physicalDevice,
20525 Display* dpy,
20526 VkDisplayKHR display)
20527{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020528 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020529 AEMU_SCOPED_TRACE("vkAcquireXlibDisplayEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020530 mImpl->log("start vkAcquireXlibDisplayEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020531 auto stream = mImpl->stream();
20532 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020533 auto resources = mImpl->resources();
20534 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020535 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020536 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020537 VkDisplayKHR local_display;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020538 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020539 local_display = display;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020540 countingStream->rewind();
20541 {
David Reveman9875f2c2019-06-11 21:47:12 -040020542 uint64_t cgen_var_1315;
20543 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1315, 1);
20544 countingStream->write((uint64_t*)&cgen_var_1315, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020545 countingStream->write((Display*)dpy, sizeof(Display));
David Reveman9875f2c2019-06-11 21:47:12 -040020546 uint64_t cgen_var_1316;
20547 countingStream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1316, 1);
20548 countingStream->write((uint64_t*)&cgen_var_1316, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020549 }
20550 uint32_t packetSize_vkAcquireXlibDisplayEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20551 countingStream->rewind();
20552 uint32_t opcode_vkAcquireXlibDisplayEXT = OP_vkAcquireXlibDisplayEXT;
20553 stream->write(&opcode_vkAcquireXlibDisplayEXT, sizeof(uint32_t));
20554 stream->write(&packetSize_vkAcquireXlibDisplayEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020555 uint64_t cgen_var_1317;
20556 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1317, 1);
20557 stream->write((uint64_t*)&cgen_var_1317, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020558 stream->write((Display*)dpy, sizeof(Display));
David Reveman9875f2c2019-06-11 21:47:12 -040020559 uint64_t cgen_var_1318;
20560 stream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1318, 1);
20561 stream->write((uint64_t*)&cgen_var_1318, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020562 AEMU_SCOPED_TRACE("vkAcquireXlibDisplayEXT readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020563 stream->read((Display*)dpy, sizeof(Display));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020564 AEMU_SCOPED_TRACE("vkAcquireXlibDisplayEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020565 VkResult vkAcquireXlibDisplayEXT_VkResult_return = (VkResult)0;
20566 stream->read(&vkAcquireXlibDisplayEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070020567 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080020568 countingStream->clearPool();
20569 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020570 mImpl->log("finish vkAcquireXlibDisplayEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020571 return vkAcquireXlibDisplayEXT_VkResult_return;
20572}
20573
20574VkResult VkEncoder::vkGetRandROutputDisplayEXT(
20575 VkPhysicalDevice physicalDevice,
20576 Display* dpy,
20577 RROutput rrOutput,
20578 VkDisplayKHR* pDisplay)
20579{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020580 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020581 AEMU_SCOPED_TRACE("vkGetRandROutputDisplayEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020582 mImpl->log("start vkGetRandROutputDisplayEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020583 auto stream = mImpl->stream();
20584 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020585 auto resources = mImpl->resources();
20586 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020587 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020588 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020589 RROutput local_rrOutput;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020590 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020591 local_rrOutput = rrOutput;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020592 countingStream->rewind();
20593 {
David Reveman9875f2c2019-06-11 21:47:12 -040020594 uint64_t cgen_var_1319;
20595 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1319, 1);
20596 countingStream->write((uint64_t*)&cgen_var_1319, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020597 countingStream->write((Display*)dpy, sizeof(Display));
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020598 countingStream->write((RROutput*)&local_rrOutput, sizeof(RROutput));
David Reveman9875f2c2019-06-11 21:47:12 -040020599 uint64_t cgen_var_1320;
20600 countingStream->handleMapping()->mapHandles_VkDisplayKHR_u64(pDisplay, &cgen_var_1320, 1);
20601 countingStream->write((uint64_t*)&cgen_var_1320, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020602 }
20603 uint32_t packetSize_vkGetRandROutputDisplayEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20604 countingStream->rewind();
20605 uint32_t opcode_vkGetRandROutputDisplayEXT = OP_vkGetRandROutputDisplayEXT;
20606 stream->write(&opcode_vkGetRandROutputDisplayEXT, sizeof(uint32_t));
20607 stream->write(&packetSize_vkGetRandROutputDisplayEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020608 uint64_t cgen_var_1321;
20609 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1321, 1);
20610 stream->write((uint64_t*)&cgen_var_1321, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020611 stream->write((Display*)dpy, sizeof(Display));
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020612 stream->write((RROutput*)&local_rrOutput, sizeof(RROutput));
Lingfeng Yange4008a02018-11-18 12:22:48 -080020613 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040020614 uint64_t cgen_var_1322;
20615 stream->handleMapping()->mapHandles_VkDisplayKHR_u64(pDisplay, &cgen_var_1322, 1);
20616 stream->write((uint64_t*)&cgen_var_1322, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080020617 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020618 AEMU_SCOPED_TRACE("vkGetRandROutputDisplayEXT readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020619 stream->read((Display*)dpy, sizeof(Display));
David Reveman9875f2c2019-06-11 21:47:12 -040020620 uint64_t cgen_var_1323;
20621 stream->read((uint64_t*)&cgen_var_1323, 8);
20622 stream->handleMapping()->mapHandles_u64_VkDisplayKHR(&cgen_var_1323, (VkDisplayKHR*)pDisplay, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020623 AEMU_SCOPED_TRACE("vkGetRandROutputDisplayEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020624 VkResult vkGetRandROutputDisplayEXT_VkResult_return = (VkResult)0;
20625 stream->read(&vkGetRandROutputDisplayEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070020626 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080020627 countingStream->clearPool();
20628 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020629 mImpl->log("finish vkGetRandROutputDisplayEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020630 return vkGetRandROutputDisplayEXT_VkResult_return;
20631}
20632
20633#endif
20634#ifdef VK_EXT_display_surface_counter
20635VkResult VkEncoder::vkGetPhysicalDeviceSurfaceCapabilities2EXT(
20636 VkPhysicalDevice physicalDevice,
20637 VkSurfaceKHR surface,
20638 VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
20639{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020640 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020641 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2EXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020642 mImpl->log("start vkGetPhysicalDeviceSurfaceCapabilities2EXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020643 auto stream = mImpl->stream();
20644 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020645 auto resources = mImpl->resources();
20646 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020647 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020648 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020649 VkSurfaceKHR local_surface;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020650 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020651 local_surface = surface;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020652 countingStream->rewind();
20653 {
David Reveman9875f2c2019-06-11 21:47:12 -040020654 uint64_t cgen_var_1324;
20655 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1324, 1);
20656 countingStream->write((uint64_t*)&cgen_var_1324, 1 * 8);
20657 uint64_t cgen_var_1325;
20658 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_1325, 1);
20659 countingStream->write((uint64_t*)&cgen_var_1325, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020660 marshal_VkSurfaceCapabilities2EXT(countingStream, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
20661 }
20662 uint32_t packetSize_vkGetPhysicalDeviceSurfaceCapabilities2EXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20663 countingStream->rewind();
20664 uint32_t opcode_vkGetPhysicalDeviceSurfaceCapabilities2EXT = OP_vkGetPhysicalDeviceSurfaceCapabilities2EXT;
20665 stream->write(&opcode_vkGetPhysicalDeviceSurfaceCapabilities2EXT, sizeof(uint32_t));
20666 stream->write(&packetSize_vkGetPhysicalDeviceSurfaceCapabilities2EXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020667 uint64_t cgen_var_1326;
20668 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1326, 1);
20669 stream->write((uint64_t*)&cgen_var_1326, 1 * 8);
20670 uint64_t cgen_var_1327;
20671 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_1327, 1);
20672 stream->write((uint64_t*)&cgen_var_1327, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020673 marshal_VkSurfaceCapabilities2EXT(stream, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020674 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2EXT readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020675 unmarshal_VkSurfaceCapabilities2EXT(stream, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
Lingfeng Yang97a06702018-12-24 17:02:43 -080020676 if (pSurfaceCapabilities)
20677 {
20678 transform_fromhost_VkSurfaceCapabilities2EXT(mImpl->resources(), (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
20679 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020680 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2EXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020681 VkResult vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return = (VkResult)0;
20682 stream->read(&vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070020683 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080020684 countingStream->clearPool();
20685 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020686 mImpl->log("finish vkGetPhysicalDeviceSurfaceCapabilities2EXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020687 return vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return;
20688}
20689
20690#endif
20691#ifdef VK_EXT_display_control
20692VkResult VkEncoder::vkDisplayPowerControlEXT(
20693 VkDevice device,
20694 VkDisplayKHR display,
20695 const VkDisplayPowerInfoEXT* pDisplayPowerInfo)
20696{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020697 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020698 AEMU_SCOPED_TRACE("vkDisplayPowerControlEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020699 mImpl->log("start vkDisplayPowerControlEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020700 auto stream = mImpl->stream();
20701 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020702 auto resources = mImpl->resources();
20703 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020704 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020705 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020706 VkDisplayKHR local_display;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020707 VkDisplayPowerInfoEXT* local_pDisplayPowerInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020708 local_device = device;
20709 local_display = display;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020710 local_pDisplayPowerInfo = nullptr;
20711 if (pDisplayPowerInfo)
20712 {
20713 local_pDisplayPowerInfo = (VkDisplayPowerInfoEXT*)pool->alloc(sizeof(const VkDisplayPowerInfoEXT));
20714 deepcopy_VkDisplayPowerInfoEXT(pool, pDisplayPowerInfo, (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo));
20715 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080020716 if (local_pDisplayPowerInfo)
20717 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080020718 transform_tohost_VkDisplayPowerInfoEXT(mImpl->resources(), (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080020719 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020720 countingStream->rewind();
20721 {
David Reveman9875f2c2019-06-11 21:47:12 -040020722 uint64_t cgen_var_1328;
20723 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1328, 1);
20724 countingStream->write((uint64_t*)&cgen_var_1328, 1 * 8);
20725 uint64_t cgen_var_1329;
20726 countingStream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1329, 1);
20727 countingStream->write((uint64_t*)&cgen_var_1329, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020728 marshal_VkDisplayPowerInfoEXT(countingStream, (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020729 }
20730 uint32_t packetSize_vkDisplayPowerControlEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20731 countingStream->rewind();
20732 uint32_t opcode_vkDisplayPowerControlEXT = OP_vkDisplayPowerControlEXT;
20733 stream->write(&opcode_vkDisplayPowerControlEXT, sizeof(uint32_t));
20734 stream->write(&packetSize_vkDisplayPowerControlEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020735 uint64_t cgen_var_1330;
20736 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1330, 1);
20737 stream->write((uint64_t*)&cgen_var_1330, 1 * 8);
20738 uint64_t cgen_var_1331;
20739 stream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1331, 1);
20740 stream->write((uint64_t*)&cgen_var_1331, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020741 marshal_VkDisplayPowerInfoEXT(stream, (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020742 AEMU_SCOPED_TRACE("vkDisplayPowerControlEXT readParams");
20743 AEMU_SCOPED_TRACE("vkDisplayPowerControlEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020744 VkResult vkDisplayPowerControlEXT_VkResult_return = (VkResult)0;
20745 stream->read(&vkDisplayPowerControlEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070020746 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080020747 countingStream->clearPool();
20748 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020749 mImpl->log("finish vkDisplayPowerControlEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020750 return vkDisplayPowerControlEXT_VkResult_return;
20751}
20752
20753VkResult VkEncoder::vkRegisterDeviceEventEXT(
20754 VkDevice device,
20755 const VkDeviceEventInfoEXT* pDeviceEventInfo,
20756 const VkAllocationCallbacks* pAllocator,
20757 VkFence* pFence)
20758{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020759 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020760 AEMU_SCOPED_TRACE("vkRegisterDeviceEventEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020761 mImpl->log("start vkRegisterDeviceEventEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020762 auto stream = mImpl->stream();
20763 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020764 auto resources = mImpl->resources();
20765 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020766 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020767 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020768 VkDeviceEventInfoEXT* local_pDeviceEventInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020769 VkAllocationCallbacks* local_pAllocator;
20770 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020771 local_pDeviceEventInfo = nullptr;
20772 if (pDeviceEventInfo)
20773 {
20774 local_pDeviceEventInfo = (VkDeviceEventInfoEXT*)pool->alloc(sizeof(const VkDeviceEventInfoEXT));
20775 deepcopy_VkDeviceEventInfoEXT(pool, pDeviceEventInfo, (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo));
20776 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020777 local_pAllocator = nullptr;
20778 if (pAllocator)
20779 {
20780 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
20781 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
20782 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080020783 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080020784 if (local_pDeviceEventInfo)
20785 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080020786 transform_tohost_VkDeviceEventInfoEXT(mImpl->resources(), (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080020787 }
20788 if (local_pAllocator)
20789 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080020790 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080020791 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020792 countingStream->rewind();
20793 {
David Reveman9875f2c2019-06-11 21:47:12 -040020794 uint64_t cgen_var_1332;
20795 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1332, 1);
20796 countingStream->write((uint64_t*)&cgen_var_1332, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020797 marshal_VkDeviceEventInfoEXT(countingStream, (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080020798 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040020799 uint64_t cgen_var_1333 = (uint64_t)(uintptr_t)local_pAllocator;
20800 countingStream->putBe64(cgen_var_1333);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020801 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020802 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020803 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020804 }
David Reveman9875f2c2019-06-11 21:47:12 -040020805 uint64_t cgen_var_1334;
20806 countingStream->handleMapping()->mapHandles_VkFence_u64(pFence, &cgen_var_1334, 1);
20807 countingStream->write((uint64_t*)&cgen_var_1334, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020808 }
20809 uint32_t packetSize_vkRegisterDeviceEventEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20810 countingStream->rewind();
20811 uint32_t opcode_vkRegisterDeviceEventEXT = OP_vkRegisterDeviceEventEXT;
20812 stream->write(&opcode_vkRegisterDeviceEventEXT, sizeof(uint32_t));
20813 stream->write(&packetSize_vkRegisterDeviceEventEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020814 uint64_t cgen_var_1335;
20815 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1335, 1);
20816 stream->write((uint64_t*)&cgen_var_1335, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020817 marshal_VkDeviceEventInfoEXT(stream, (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080020818 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040020819 uint64_t cgen_var_1336 = (uint64_t)(uintptr_t)local_pAllocator;
20820 stream->putBe64(cgen_var_1336);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020821 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020822 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020823 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020824 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080020825 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040020826 uint64_t cgen_var_1337;
20827 stream->handleMapping()->mapHandles_VkFence_u64(pFence, &cgen_var_1337, 1);
20828 stream->write((uint64_t*)&cgen_var_1337, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080020829 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020830 AEMU_SCOPED_TRACE("vkRegisterDeviceEventEXT readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040020831 uint64_t cgen_var_1338;
20832 stream->read((uint64_t*)&cgen_var_1338, 8);
20833 stream->handleMapping()->mapHandles_u64_VkFence(&cgen_var_1338, (VkFence*)pFence, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020834 AEMU_SCOPED_TRACE("vkRegisterDeviceEventEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020835 VkResult vkRegisterDeviceEventEXT_VkResult_return = (VkResult)0;
20836 stream->read(&vkRegisterDeviceEventEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070020837 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080020838 countingStream->clearPool();
20839 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020840 mImpl->log("finish vkRegisterDeviceEventEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020841 return vkRegisterDeviceEventEXT_VkResult_return;
20842}
20843
20844VkResult VkEncoder::vkRegisterDisplayEventEXT(
20845 VkDevice device,
20846 VkDisplayKHR display,
20847 const VkDisplayEventInfoEXT* pDisplayEventInfo,
20848 const VkAllocationCallbacks* pAllocator,
20849 VkFence* pFence)
20850{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020851 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020852 AEMU_SCOPED_TRACE("vkRegisterDisplayEventEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020853 mImpl->log("start vkRegisterDisplayEventEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020854 auto stream = mImpl->stream();
20855 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020856 auto resources = mImpl->resources();
20857 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020858 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020859 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020860 VkDisplayKHR local_display;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020861 VkDisplayEventInfoEXT* local_pDisplayEventInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020862 VkAllocationCallbacks* local_pAllocator;
20863 local_device = device;
20864 local_display = display;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020865 local_pDisplayEventInfo = nullptr;
20866 if (pDisplayEventInfo)
20867 {
20868 local_pDisplayEventInfo = (VkDisplayEventInfoEXT*)pool->alloc(sizeof(const VkDisplayEventInfoEXT));
20869 deepcopy_VkDisplayEventInfoEXT(pool, pDisplayEventInfo, (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo));
20870 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020871 local_pAllocator = nullptr;
20872 if (pAllocator)
20873 {
20874 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
20875 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
20876 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080020877 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080020878 if (local_pDisplayEventInfo)
20879 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080020880 transform_tohost_VkDisplayEventInfoEXT(mImpl->resources(), (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080020881 }
20882 if (local_pAllocator)
20883 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080020884 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080020885 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020886 countingStream->rewind();
20887 {
David Reveman9875f2c2019-06-11 21:47:12 -040020888 uint64_t cgen_var_1339;
20889 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1339, 1);
20890 countingStream->write((uint64_t*)&cgen_var_1339, 1 * 8);
20891 uint64_t cgen_var_1340;
20892 countingStream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1340, 1);
20893 countingStream->write((uint64_t*)&cgen_var_1340, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020894 marshal_VkDisplayEventInfoEXT(countingStream, (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080020895 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040020896 uint64_t cgen_var_1341 = (uint64_t)(uintptr_t)local_pAllocator;
20897 countingStream->putBe64(cgen_var_1341);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020898 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020899 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020900 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020901 }
David Reveman9875f2c2019-06-11 21:47:12 -040020902 uint64_t cgen_var_1342;
20903 countingStream->handleMapping()->mapHandles_VkFence_u64(pFence, &cgen_var_1342, 1);
20904 countingStream->write((uint64_t*)&cgen_var_1342, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020905 }
20906 uint32_t packetSize_vkRegisterDisplayEventEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20907 countingStream->rewind();
20908 uint32_t opcode_vkRegisterDisplayEventEXT = OP_vkRegisterDisplayEventEXT;
20909 stream->write(&opcode_vkRegisterDisplayEventEXT, sizeof(uint32_t));
20910 stream->write(&packetSize_vkRegisterDisplayEventEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020911 uint64_t cgen_var_1343;
20912 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1343, 1);
20913 stream->write((uint64_t*)&cgen_var_1343, 1 * 8);
20914 uint64_t cgen_var_1344;
20915 stream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1344, 1);
20916 stream->write((uint64_t*)&cgen_var_1344, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020917 marshal_VkDisplayEventInfoEXT(stream, (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080020918 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040020919 uint64_t cgen_var_1345 = (uint64_t)(uintptr_t)local_pAllocator;
20920 stream->putBe64(cgen_var_1345);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020921 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020922 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020923 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020924 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080020925 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040020926 uint64_t cgen_var_1346;
20927 stream->handleMapping()->mapHandles_VkFence_u64(pFence, &cgen_var_1346, 1);
20928 stream->write((uint64_t*)&cgen_var_1346, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080020929 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020930 AEMU_SCOPED_TRACE("vkRegisterDisplayEventEXT readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040020931 uint64_t cgen_var_1347;
20932 stream->read((uint64_t*)&cgen_var_1347, 8);
20933 stream->handleMapping()->mapHandles_u64_VkFence(&cgen_var_1347, (VkFence*)pFence, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020934 AEMU_SCOPED_TRACE("vkRegisterDisplayEventEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020935 VkResult vkRegisterDisplayEventEXT_VkResult_return = (VkResult)0;
20936 stream->read(&vkRegisterDisplayEventEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070020937 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080020938 countingStream->clearPool();
20939 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020940 mImpl->log("finish vkRegisterDisplayEventEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020941 return vkRegisterDisplayEventEXT_VkResult_return;
20942}
20943
20944VkResult VkEncoder::vkGetSwapchainCounterEXT(
20945 VkDevice device,
20946 VkSwapchainKHR swapchain,
20947 VkSurfaceCounterFlagBitsEXT counter,
20948 uint64_t* pCounterValue)
20949{
Lingfeng Yang256f9252020-07-14 14:27:33 -070020950 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020951 AEMU_SCOPED_TRACE("vkGetSwapchainCounterEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020952 mImpl->log("start vkGetSwapchainCounterEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020953 auto stream = mImpl->stream();
20954 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020955 auto resources = mImpl->resources();
20956 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080020957 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020958 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020959 VkSwapchainKHR local_swapchain;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020960 VkSurfaceCounterFlagBitsEXT local_counter;
Lingfeng Yang9666b852018-11-13 23:09:59 -080020961 local_device = device;
20962 local_swapchain = swapchain;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020963 local_counter = counter;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020964 countingStream->rewind();
20965 {
David Reveman9875f2c2019-06-11 21:47:12 -040020966 uint64_t cgen_var_1348;
20967 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1348, 1);
20968 countingStream->write((uint64_t*)&cgen_var_1348, 1 * 8);
20969 uint64_t cgen_var_1349;
20970 countingStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_1349, 1);
20971 countingStream->write((uint64_t*)&cgen_var_1349, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020972 countingStream->write((VkSurfaceCounterFlagBitsEXT*)&local_counter, sizeof(VkSurfaceCounterFlagBitsEXT));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020973 countingStream->write((uint64_t*)pCounterValue, sizeof(uint64_t));
20974 }
20975 uint32_t packetSize_vkGetSwapchainCounterEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
20976 countingStream->rewind();
20977 uint32_t opcode_vkGetSwapchainCounterEXT = OP_vkGetSwapchainCounterEXT;
20978 stream->write(&opcode_vkGetSwapchainCounterEXT, sizeof(uint32_t));
20979 stream->write(&packetSize_vkGetSwapchainCounterEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040020980 uint64_t cgen_var_1350;
20981 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1350, 1);
20982 stream->write((uint64_t*)&cgen_var_1350, 1 * 8);
20983 uint64_t cgen_var_1351;
20984 stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_1351, 1);
20985 stream->write((uint64_t*)&cgen_var_1351, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080020986 stream->write((VkSurfaceCounterFlagBitsEXT*)&local_counter, sizeof(VkSurfaceCounterFlagBitsEXT));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020987 stream->write((uint64_t*)pCounterValue, sizeof(uint64_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020988 AEMU_SCOPED_TRACE("vkGetSwapchainCounterEXT readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020989 stream->read((uint64_t*)pCounterValue, sizeof(uint64_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080020990 AEMU_SCOPED_TRACE("vkGetSwapchainCounterEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020991 VkResult vkGetSwapchainCounterEXT_VkResult_return = (VkResult)0;
20992 stream->read(&vkGetSwapchainCounterEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070020993 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080020994 countingStream->clearPool();
20995 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080020996 mImpl->log("finish vkGetSwapchainCounterEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070020997 return vkGetSwapchainCounterEXT_VkResult_return;
20998}
20999
21000#endif
21001#ifdef VK_GOOGLE_display_timing
21002VkResult VkEncoder::vkGetRefreshCycleDurationGOOGLE(
21003 VkDevice device,
21004 VkSwapchainKHR swapchain,
21005 VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties)
21006{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021007 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021008 AEMU_SCOPED_TRACE("vkGetRefreshCycleDurationGOOGLE encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021009 mImpl->log("start vkGetRefreshCycleDurationGOOGLE");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021010 auto stream = mImpl->stream();
21011 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021012 auto resources = mImpl->resources();
21013 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021014 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021015 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021016 VkSwapchainKHR local_swapchain;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021017 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021018 local_swapchain = swapchain;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021019 countingStream->rewind();
21020 {
David Reveman9875f2c2019-06-11 21:47:12 -040021021 uint64_t cgen_var_1352;
21022 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1352, 1);
21023 countingStream->write((uint64_t*)&cgen_var_1352, 1 * 8);
21024 uint64_t cgen_var_1353;
21025 countingStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_1353, 1);
21026 countingStream->write((uint64_t*)&cgen_var_1353, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021027 marshal_VkRefreshCycleDurationGOOGLE(countingStream, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
21028 }
21029 uint32_t packetSize_vkGetRefreshCycleDurationGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21030 countingStream->rewind();
21031 uint32_t opcode_vkGetRefreshCycleDurationGOOGLE = OP_vkGetRefreshCycleDurationGOOGLE;
21032 stream->write(&opcode_vkGetRefreshCycleDurationGOOGLE, sizeof(uint32_t));
21033 stream->write(&packetSize_vkGetRefreshCycleDurationGOOGLE, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021034 uint64_t cgen_var_1354;
21035 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1354, 1);
21036 stream->write((uint64_t*)&cgen_var_1354, 1 * 8);
21037 uint64_t cgen_var_1355;
21038 stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_1355, 1);
21039 stream->write((uint64_t*)&cgen_var_1355, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021040 marshal_VkRefreshCycleDurationGOOGLE(stream, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021041 AEMU_SCOPED_TRACE("vkGetRefreshCycleDurationGOOGLE readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021042 unmarshal_VkRefreshCycleDurationGOOGLE(stream, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080021043 if (pDisplayTimingProperties)
21044 {
21045 transform_fromhost_VkRefreshCycleDurationGOOGLE(mImpl->resources(), (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
21046 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021047 AEMU_SCOPED_TRACE("vkGetRefreshCycleDurationGOOGLE returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021048 VkResult vkGetRefreshCycleDurationGOOGLE_VkResult_return = (VkResult)0;
21049 stream->read(&vkGetRefreshCycleDurationGOOGLE_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070021050 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080021051 countingStream->clearPool();
21052 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021053 mImpl->log("finish vkGetRefreshCycleDurationGOOGLE");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021054 return vkGetRefreshCycleDurationGOOGLE_VkResult_return;
21055}
21056
21057VkResult VkEncoder::vkGetPastPresentationTimingGOOGLE(
21058 VkDevice device,
21059 VkSwapchainKHR swapchain,
21060 uint32_t* pPresentationTimingCount,
21061 VkPastPresentationTimingGOOGLE* pPresentationTimings)
21062{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021063 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021064 AEMU_SCOPED_TRACE("vkGetPastPresentationTimingGOOGLE encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021065 mImpl->log("start vkGetPastPresentationTimingGOOGLE");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021066 auto stream = mImpl->stream();
21067 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021068 auto resources = mImpl->resources();
21069 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021070 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021071 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021072 VkSwapchainKHR local_swapchain;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021073 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021074 local_swapchain = swapchain;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021075 countingStream->rewind();
21076 {
David Reveman9875f2c2019-06-11 21:47:12 -040021077 uint64_t cgen_var_1356;
21078 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1356, 1);
21079 countingStream->write((uint64_t*)&cgen_var_1356, 1 * 8);
21080 uint64_t cgen_var_1357;
21081 countingStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_1357, 1);
21082 countingStream->write((uint64_t*)&cgen_var_1357, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021083 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040021084 uint64_t cgen_var_1358 = (uint64_t)(uintptr_t)pPresentationTimingCount;
21085 countingStream->putBe64(cgen_var_1358);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021086 if (pPresentationTimingCount)
21087 {
21088 countingStream->write((uint32_t*)pPresentationTimingCount, sizeof(uint32_t));
21089 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021090 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040021091 uint64_t cgen_var_1359 = (uint64_t)(uintptr_t)pPresentationTimings;
21092 countingStream->putBe64(cgen_var_1359);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021093 if (pPresentationTimings)
21094 {
21095 for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i)
21096 {
21097 marshal_VkPastPresentationTimingGOOGLE(countingStream, (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
21098 }
21099 }
21100 }
21101 uint32_t packetSize_vkGetPastPresentationTimingGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21102 countingStream->rewind();
21103 uint32_t opcode_vkGetPastPresentationTimingGOOGLE = OP_vkGetPastPresentationTimingGOOGLE;
21104 stream->write(&opcode_vkGetPastPresentationTimingGOOGLE, sizeof(uint32_t));
21105 stream->write(&packetSize_vkGetPastPresentationTimingGOOGLE, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021106 uint64_t cgen_var_1360;
21107 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1360, 1);
21108 stream->write((uint64_t*)&cgen_var_1360, 1 * 8);
21109 uint64_t cgen_var_1361;
21110 stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_1361, 1);
21111 stream->write((uint64_t*)&cgen_var_1361, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021112 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040021113 uint64_t cgen_var_1362 = (uint64_t)(uintptr_t)pPresentationTimingCount;
21114 stream->putBe64(cgen_var_1362);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021115 if (pPresentationTimingCount)
21116 {
21117 stream->write((uint32_t*)pPresentationTimingCount, sizeof(uint32_t));
21118 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021119 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040021120 uint64_t cgen_var_1363 = (uint64_t)(uintptr_t)pPresentationTimings;
21121 stream->putBe64(cgen_var_1363);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021122 if (pPresentationTimings)
21123 {
21124 for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i)
21125 {
21126 marshal_VkPastPresentationTimingGOOGLE(stream, (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
21127 }
21128 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021129 AEMU_SCOPED_TRACE("vkGetPastPresentationTimingGOOGLE readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021130 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021131 uint32_t* check_pPresentationTimingCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021132 check_pPresentationTimingCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021133 if (pPresentationTimingCount)
21134 {
21135 if (!(check_pPresentationTimingCount))
21136 {
21137 fprintf(stderr, "fatal: pPresentationTimingCount inconsistent between guest and host\n");
21138 }
21139 stream->read((uint32_t*)pPresentationTimingCount, sizeof(uint32_t));
21140 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021141 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021142 VkPastPresentationTimingGOOGLE* check_pPresentationTimings;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021143 check_pPresentationTimings = (VkPastPresentationTimingGOOGLE*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021144 if (pPresentationTimings)
21145 {
21146 if (!(check_pPresentationTimings))
21147 {
21148 fprintf(stderr, "fatal: pPresentationTimings inconsistent between guest and host\n");
21149 }
21150 for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i)
21151 {
21152 unmarshal_VkPastPresentationTimingGOOGLE(stream, (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
21153 }
21154 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080021155 if (pPresentationTimings)
21156 {
21157 for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i)
21158 {
21159 transform_fromhost_VkPastPresentationTimingGOOGLE(mImpl->resources(), (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
21160 }
21161 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021162 AEMU_SCOPED_TRACE("vkGetPastPresentationTimingGOOGLE returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021163 VkResult vkGetPastPresentationTimingGOOGLE_VkResult_return = (VkResult)0;
21164 stream->read(&vkGetPastPresentationTimingGOOGLE_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070021165 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080021166 countingStream->clearPool();
21167 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021168 mImpl->log("finish vkGetPastPresentationTimingGOOGLE");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021169 return vkGetPastPresentationTimingGOOGLE_VkResult_return;
21170}
21171
21172#endif
21173#ifdef VK_NV_sample_mask_override_coverage
21174#endif
21175#ifdef VK_NV_geometry_shader_passthrough
21176#endif
21177#ifdef VK_NV_viewport_array2
21178#endif
21179#ifdef VK_NVX_multiview_per_view_attributes
21180#endif
21181#ifdef VK_NV_viewport_swizzle
21182#endif
21183#ifdef VK_EXT_discard_rectangles
21184void VkEncoder::vkCmdSetDiscardRectangleEXT(
21185 VkCommandBuffer commandBuffer,
21186 uint32_t firstDiscardRectangle,
21187 uint32_t discardRectangleCount,
21188 const VkRect2D* pDiscardRectangles)
21189{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021190 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021191 AEMU_SCOPED_TRACE("vkCmdSetDiscardRectangleEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021192 mImpl->log("start vkCmdSetDiscardRectangleEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021193 auto stream = mImpl->stream();
21194 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021195 auto resources = mImpl->resources();
21196 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021197 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021198 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021199 uint32_t local_firstDiscardRectangle;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021200 uint32_t local_discardRectangleCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021201 VkRect2D* local_pDiscardRectangles;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021202 local_commandBuffer = commandBuffer;
21203 local_firstDiscardRectangle = firstDiscardRectangle;
21204 local_discardRectangleCount = discardRectangleCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021205 local_pDiscardRectangles = nullptr;
21206 if (pDiscardRectangles)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021207 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021208 local_pDiscardRectangles = (VkRect2D*)pool->alloc(((discardRectangleCount)) * sizeof(const VkRect2D));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021209 for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i)
21210 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021211 deepcopy_VkRect2D(pool, pDiscardRectangles + i, (VkRect2D*)(local_pDiscardRectangles + i));
21212 }
21213 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080021214 if (local_pDiscardRectangles)
21215 {
21216 for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i)
21217 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021218 transform_tohost_VkRect2D(mImpl->resources(), (VkRect2D*)(local_pDiscardRectangles + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021219 }
21220 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021221 countingStream->rewind();
21222 {
David Reveman9875f2c2019-06-11 21:47:12 -040021223 uint64_t cgen_var_1366;
21224 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1366, 1);
21225 countingStream->write((uint64_t*)&cgen_var_1366, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021226 countingStream->write((uint32_t*)&local_firstDiscardRectangle, sizeof(uint32_t));
21227 countingStream->write((uint32_t*)&local_discardRectangleCount, sizeof(uint32_t));
21228 for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i)
21229 {
21230 marshal_VkRect2D(countingStream, (VkRect2D*)(local_pDiscardRectangles + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021231 }
21232 }
21233 uint32_t packetSize_vkCmdSetDiscardRectangleEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21234 countingStream->rewind();
21235 uint32_t opcode_vkCmdSetDiscardRectangleEXT = OP_vkCmdSetDiscardRectangleEXT;
21236 stream->write(&opcode_vkCmdSetDiscardRectangleEXT, sizeof(uint32_t));
21237 stream->write(&packetSize_vkCmdSetDiscardRectangleEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021238 uint64_t cgen_var_1367;
21239 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1367, 1);
21240 stream->write((uint64_t*)&cgen_var_1367, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021241 stream->write((uint32_t*)&local_firstDiscardRectangle, sizeof(uint32_t));
21242 stream->write((uint32_t*)&local_discardRectangleCount, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021243 for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i)
21244 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021245 marshal_VkRect2D(stream, (VkRect2D*)(local_pDiscardRectangles + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021246 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021247 AEMU_SCOPED_TRACE("vkCmdSetDiscardRectangleEXT readParams");
21248 AEMU_SCOPED_TRACE("vkCmdSetDiscardRectangleEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070021249 pool->freeAll();
21250 countingStream->clearPool();
21251 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021252 mImpl->log("finish vkCmdSetDiscardRectangleEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021253}
21254
21255#endif
21256#ifdef VK_EXT_conservative_rasterization
21257#endif
21258#ifdef VK_EXT_swapchain_colorspace
21259#endif
21260#ifdef VK_EXT_hdr_metadata
21261void VkEncoder::vkSetHdrMetadataEXT(
21262 VkDevice device,
21263 uint32_t swapchainCount,
21264 const VkSwapchainKHR* pSwapchains,
21265 const VkHdrMetadataEXT* pMetadata)
21266{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021267 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021268 AEMU_SCOPED_TRACE("vkSetHdrMetadataEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021269 mImpl->log("start vkSetHdrMetadataEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021270 auto stream = mImpl->stream();
21271 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021272 auto resources = mImpl->resources();
21273 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021274 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021275 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021276 uint32_t local_swapchainCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021277 VkSwapchainKHR* local_pSwapchains;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021278 VkHdrMetadataEXT* local_pMetadata;
21279 local_device = device;
21280 local_swapchainCount = swapchainCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021281 local_pSwapchains = nullptr;
21282 if (pSwapchains)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021283 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021284 local_pSwapchains = (VkSwapchainKHR*)pool->dupArray(pSwapchains, ((swapchainCount)) * sizeof(const VkSwapchainKHR));
21285 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021286 local_pMetadata = nullptr;
21287 if (pMetadata)
21288 {
21289 local_pMetadata = (VkHdrMetadataEXT*)pool->alloc(((swapchainCount)) * sizeof(const VkHdrMetadataEXT));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021290 for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
21291 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021292 deepcopy_VkHdrMetadataEXT(pool, pMetadata + i, (VkHdrMetadataEXT*)(local_pMetadata + i));
21293 }
21294 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080021295 if (local_pMetadata)
21296 {
21297 for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
21298 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021299 transform_tohost_VkHdrMetadataEXT(mImpl->resources(), (VkHdrMetadataEXT*)(local_pMetadata + i));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021300 }
21301 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021302 countingStream->rewind();
21303 {
David Reveman9875f2c2019-06-11 21:47:12 -040021304 uint64_t cgen_var_1368;
21305 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1368, 1);
21306 countingStream->write((uint64_t*)&cgen_var_1368, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021307 countingStream->write((uint32_t*)&local_swapchainCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -080021308 if (((swapchainCount)))
21309 {
David Reveman9875f2c2019-06-11 21:47:12 -040021310 uint64_t* cgen_var_1369;
21311 countingStream->alloc((void**)&cgen_var_1369, ((swapchainCount)) * 8);
21312 countingStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(local_pSwapchains, cgen_var_1369, ((swapchainCount)));
21313 countingStream->write((uint64_t*)cgen_var_1369, ((swapchainCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080021314 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021315 for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
21316 {
21317 marshal_VkHdrMetadataEXT(countingStream, (VkHdrMetadataEXT*)(local_pMetadata + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021318 }
21319 }
21320 uint32_t packetSize_vkSetHdrMetadataEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21321 countingStream->rewind();
21322 uint32_t opcode_vkSetHdrMetadataEXT = OP_vkSetHdrMetadataEXT;
21323 stream->write(&opcode_vkSetHdrMetadataEXT, sizeof(uint32_t));
21324 stream->write(&packetSize_vkSetHdrMetadataEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021325 uint64_t cgen_var_1370;
21326 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1370, 1);
21327 stream->write((uint64_t*)&cgen_var_1370, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021328 stream->write((uint32_t*)&local_swapchainCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -080021329 if (((swapchainCount)))
21330 {
David Reveman9875f2c2019-06-11 21:47:12 -040021331 uint64_t* cgen_var_1371;
21332 stream->alloc((void**)&cgen_var_1371, ((swapchainCount)) * 8);
21333 stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(local_pSwapchains, cgen_var_1371, ((swapchainCount)));
21334 stream->write((uint64_t*)cgen_var_1371, ((swapchainCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080021335 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021336 for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
21337 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021338 marshal_VkHdrMetadataEXT(stream, (VkHdrMetadataEXT*)(local_pMetadata + i));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021339 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021340 AEMU_SCOPED_TRACE("vkSetHdrMetadataEXT readParams");
21341 AEMU_SCOPED_TRACE("vkSetHdrMetadataEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070021342 pool->freeAll();
21343 countingStream->clearPool();
21344 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021345 mImpl->log("finish vkSetHdrMetadataEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021346}
21347
21348#endif
21349#ifdef VK_MVK_ios_surface
21350VkResult VkEncoder::vkCreateIOSSurfaceMVK(
21351 VkInstance instance,
21352 const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
21353 const VkAllocationCallbacks* pAllocator,
21354 VkSurfaceKHR* pSurface)
21355{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021356 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021357 AEMU_SCOPED_TRACE("vkCreateIOSSurfaceMVK encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021358 mImpl->log("start vkCreateIOSSurfaceMVK");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021359 auto stream = mImpl->stream();
21360 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021361 auto resources = mImpl->resources();
21362 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021363 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021364 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021365 VkIOSSurfaceCreateInfoMVK* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021366 VkAllocationCallbacks* local_pAllocator;
21367 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021368 local_pCreateInfo = nullptr;
21369 if (pCreateInfo)
21370 {
21371 local_pCreateInfo = (VkIOSSurfaceCreateInfoMVK*)pool->alloc(sizeof(const VkIOSSurfaceCreateInfoMVK));
21372 deepcopy_VkIOSSurfaceCreateInfoMVK(pool, pCreateInfo, (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
21373 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021374 local_pAllocator = nullptr;
21375 if (pAllocator)
21376 {
21377 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
21378 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
21379 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080021380 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080021381 if (local_pCreateInfo)
21382 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021383 transform_tohost_VkIOSSurfaceCreateInfoMVK(mImpl->resources(), (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021384 }
21385 if (local_pAllocator)
21386 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021387 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021388 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021389 countingStream->rewind();
21390 {
David Reveman9875f2c2019-06-11 21:47:12 -040021391 uint64_t cgen_var_1372;
21392 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1372, 1);
21393 countingStream->write((uint64_t*)&cgen_var_1372, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021394 marshal_VkIOSSurfaceCreateInfoMVK(countingStream, (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021395 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040021396 uint64_t cgen_var_1373 = (uint64_t)(uintptr_t)local_pAllocator;
21397 countingStream->putBe64(cgen_var_1373);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021398 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021399 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021400 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021401 }
David Reveman9875f2c2019-06-11 21:47:12 -040021402 uint64_t cgen_var_1374;
21403 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_1374, 1);
21404 countingStream->write((uint64_t*)&cgen_var_1374, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021405 }
21406 uint32_t packetSize_vkCreateIOSSurfaceMVK = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21407 countingStream->rewind();
21408 uint32_t opcode_vkCreateIOSSurfaceMVK = OP_vkCreateIOSSurfaceMVK;
21409 stream->write(&opcode_vkCreateIOSSurfaceMVK, sizeof(uint32_t));
21410 stream->write(&packetSize_vkCreateIOSSurfaceMVK, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021411 uint64_t cgen_var_1375;
21412 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1375, 1);
21413 stream->write((uint64_t*)&cgen_var_1375, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021414 marshal_VkIOSSurfaceCreateInfoMVK(stream, (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021415 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040021416 uint64_t cgen_var_1376 = (uint64_t)(uintptr_t)local_pAllocator;
21417 stream->putBe64(cgen_var_1376);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021418 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021419 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021420 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021421 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080021422 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040021423 uint64_t cgen_var_1377;
21424 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_1377, 1);
21425 stream->write((uint64_t*)&cgen_var_1377, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080021426 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021427 AEMU_SCOPED_TRACE("vkCreateIOSSurfaceMVK readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040021428 uint64_t cgen_var_1378;
21429 stream->read((uint64_t*)&cgen_var_1378, 8);
21430 stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_1378, (VkSurfaceKHR*)pSurface, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021431 AEMU_SCOPED_TRACE("vkCreateIOSSurfaceMVK returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021432 VkResult vkCreateIOSSurfaceMVK_VkResult_return = (VkResult)0;
21433 stream->read(&vkCreateIOSSurfaceMVK_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070021434 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080021435 countingStream->clearPool();
21436 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021437 mImpl->log("finish vkCreateIOSSurfaceMVK");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021438 return vkCreateIOSSurfaceMVK_VkResult_return;
21439}
21440
21441#endif
21442#ifdef VK_MVK_macos_surface
21443VkResult VkEncoder::vkCreateMacOSSurfaceMVK(
21444 VkInstance instance,
21445 const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
21446 const VkAllocationCallbacks* pAllocator,
21447 VkSurfaceKHR* pSurface)
21448{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021449 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021450 AEMU_SCOPED_TRACE("vkCreateMacOSSurfaceMVK encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021451 mImpl->log("start vkCreateMacOSSurfaceMVK");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021452 auto stream = mImpl->stream();
21453 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021454 auto resources = mImpl->resources();
21455 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021456 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021457 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021458 VkMacOSSurfaceCreateInfoMVK* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021459 VkAllocationCallbacks* local_pAllocator;
21460 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021461 local_pCreateInfo = nullptr;
21462 if (pCreateInfo)
21463 {
21464 local_pCreateInfo = (VkMacOSSurfaceCreateInfoMVK*)pool->alloc(sizeof(const VkMacOSSurfaceCreateInfoMVK));
21465 deepcopy_VkMacOSSurfaceCreateInfoMVK(pool, pCreateInfo, (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
21466 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021467 local_pAllocator = nullptr;
21468 if (pAllocator)
21469 {
21470 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
21471 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
21472 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080021473 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080021474 if (local_pCreateInfo)
21475 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021476 transform_tohost_VkMacOSSurfaceCreateInfoMVK(mImpl->resources(), (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021477 }
21478 if (local_pAllocator)
21479 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021480 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021481 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021482 countingStream->rewind();
21483 {
David Reveman9875f2c2019-06-11 21:47:12 -040021484 uint64_t cgen_var_1379;
21485 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1379, 1);
21486 countingStream->write((uint64_t*)&cgen_var_1379, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021487 marshal_VkMacOSSurfaceCreateInfoMVK(countingStream, (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021488 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040021489 uint64_t cgen_var_1380 = (uint64_t)(uintptr_t)local_pAllocator;
21490 countingStream->putBe64(cgen_var_1380);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021491 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021492 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021493 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021494 }
David Reveman9875f2c2019-06-11 21:47:12 -040021495 uint64_t cgen_var_1381;
21496 countingStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_1381, 1);
21497 countingStream->write((uint64_t*)&cgen_var_1381, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021498 }
21499 uint32_t packetSize_vkCreateMacOSSurfaceMVK = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21500 countingStream->rewind();
21501 uint32_t opcode_vkCreateMacOSSurfaceMVK = OP_vkCreateMacOSSurfaceMVK;
21502 stream->write(&opcode_vkCreateMacOSSurfaceMVK, sizeof(uint32_t));
21503 stream->write(&packetSize_vkCreateMacOSSurfaceMVK, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021504 uint64_t cgen_var_1382;
21505 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1382, 1);
21506 stream->write((uint64_t*)&cgen_var_1382, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021507 marshal_VkMacOSSurfaceCreateInfoMVK(stream, (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021508 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040021509 uint64_t cgen_var_1383 = (uint64_t)(uintptr_t)local_pAllocator;
21510 stream->putBe64(cgen_var_1383);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021511 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021512 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021513 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021514 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080021515 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040021516 uint64_t cgen_var_1384;
21517 stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_1384, 1);
21518 stream->write((uint64_t*)&cgen_var_1384, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080021519 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021520 AEMU_SCOPED_TRACE("vkCreateMacOSSurfaceMVK readParams");
David Reveman9875f2c2019-06-11 21:47:12 -040021521 uint64_t cgen_var_1385;
21522 stream->read((uint64_t*)&cgen_var_1385, 8);
21523 stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_1385, (VkSurfaceKHR*)pSurface, 1);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021524 AEMU_SCOPED_TRACE("vkCreateMacOSSurfaceMVK returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021525 VkResult vkCreateMacOSSurfaceMVK_VkResult_return = (VkResult)0;
21526 stream->read(&vkCreateMacOSSurfaceMVK_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070021527 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080021528 countingStream->clearPool();
21529 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021530 mImpl->log("finish vkCreateMacOSSurfaceMVK");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021531 return vkCreateMacOSSurfaceMVK_VkResult_return;
21532}
21533
21534#endif
21535#ifdef VK_EXT_external_memory_dma_buf
21536#endif
21537#ifdef VK_EXT_queue_family_foreign
21538#endif
21539#ifdef VK_EXT_debug_utils
21540VkResult VkEncoder::vkSetDebugUtilsObjectNameEXT(
21541 VkDevice device,
21542 const VkDebugUtilsObjectNameInfoEXT* pNameInfo)
21543{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021544 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021545 AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectNameEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021546 mImpl->log("start vkSetDebugUtilsObjectNameEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021547 auto stream = mImpl->stream();
21548 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021549 auto resources = mImpl->resources();
21550 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021551 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021552 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021553 VkDebugUtilsObjectNameInfoEXT* local_pNameInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021554 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021555 local_pNameInfo = nullptr;
21556 if (pNameInfo)
21557 {
21558 local_pNameInfo = (VkDebugUtilsObjectNameInfoEXT*)pool->alloc(sizeof(const VkDebugUtilsObjectNameInfoEXT));
21559 deepcopy_VkDebugUtilsObjectNameInfoEXT(pool, pNameInfo, (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo));
21560 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080021561 if (local_pNameInfo)
21562 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021563 transform_tohost_VkDebugUtilsObjectNameInfoEXT(mImpl->resources(), (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021564 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021565 countingStream->rewind();
21566 {
David Reveman9875f2c2019-06-11 21:47:12 -040021567 uint64_t cgen_var_1386;
21568 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1386, 1);
21569 countingStream->write((uint64_t*)&cgen_var_1386, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021570 marshal_VkDebugUtilsObjectNameInfoEXT(countingStream, (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021571 }
21572 uint32_t packetSize_vkSetDebugUtilsObjectNameEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21573 countingStream->rewind();
21574 uint32_t opcode_vkSetDebugUtilsObjectNameEXT = OP_vkSetDebugUtilsObjectNameEXT;
21575 stream->write(&opcode_vkSetDebugUtilsObjectNameEXT, sizeof(uint32_t));
21576 stream->write(&packetSize_vkSetDebugUtilsObjectNameEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021577 uint64_t cgen_var_1387;
21578 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1387, 1);
21579 stream->write((uint64_t*)&cgen_var_1387, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021580 marshal_VkDebugUtilsObjectNameInfoEXT(stream, (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021581 AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectNameEXT readParams");
21582 AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectNameEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021583 VkResult vkSetDebugUtilsObjectNameEXT_VkResult_return = (VkResult)0;
21584 stream->read(&vkSetDebugUtilsObjectNameEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070021585 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080021586 countingStream->clearPool();
21587 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021588 mImpl->log("finish vkSetDebugUtilsObjectNameEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021589 return vkSetDebugUtilsObjectNameEXT_VkResult_return;
21590}
21591
21592VkResult VkEncoder::vkSetDebugUtilsObjectTagEXT(
21593 VkDevice device,
21594 const VkDebugUtilsObjectTagInfoEXT* pTagInfo)
21595{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021596 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021597 AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectTagEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021598 mImpl->log("start vkSetDebugUtilsObjectTagEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021599 auto stream = mImpl->stream();
21600 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021601 auto resources = mImpl->resources();
21602 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021603 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021604 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021605 VkDebugUtilsObjectTagInfoEXT* local_pTagInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021606 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021607 local_pTagInfo = nullptr;
21608 if (pTagInfo)
21609 {
21610 local_pTagInfo = (VkDebugUtilsObjectTagInfoEXT*)pool->alloc(sizeof(const VkDebugUtilsObjectTagInfoEXT));
21611 deepcopy_VkDebugUtilsObjectTagInfoEXT(pool, pTagInfo, (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo));
21612 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080021613 if (local_pTagInfo)
21614 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021615 transform_tohost_VkDebugUtilsObjectTagInfoEXT(mImpl->resources(), (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021616 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021617 countingStream->rewind();
21618 {
David Reveman9875f2c2019-06-11 21:47:12 -040021619 uint64_t cgen_var_1388;
21620 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1388, 1);
21621 countingStream->write((uint64_t*)&cgen_var_1388, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021622 marshal_VkDebugUtilsObjectTagInfoEXT(countingStream, (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021623 }
21624 uint32_t packetSize_vkSetDebugUtilsObjectTagEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21625 countingStream->rewind();
21626 uint32_t opcode_vkSetDebugUtilsObjectTagEXT = OP_vkSetDebugUtilsObjectTagEXT;
21627 stream->write(&opcode_vkSetDebugUtilsObjectTagEXT, sizeof(uint32_t));
21628 stream->write(&packetSize_vkSetDebugUtilsObjectTagEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021629 uint64_t cgen_var_1389;
21630 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1389, 1);
21631 stream->write((uint64_t*)&cgen_var_1389, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021632 marshal_VkDebugUtilsObjectTagInfoEXT(stream, (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021633 AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectTagEXT readParams");
21634 AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectTagEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021635 VkResult vkSetDebugUtilsObjectTagEXT_VkResult_return = (VkResult)0;
21636 stream->read(&vkSetDebugUtilsObjectTagEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070021637 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080021638 countingStream->clearPool();
21639 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021640 mImpl->log("finish vkSetDebugUtilsObjectTagEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021641 return vkSetDebugUtilsObjectTagEXT_VkResult_return;
21642}
21643
21644void VkEncoder::vkQueueBeginDebugUtilsLabelEXT(
21645 VkQueue queue,
21646 const VkDebugUtilsLabelEXT* pLabelInfo)
21647{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021648 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021649 AEMU_SCOPED_TRACE("vkQueueBeginDebugUtilsLabelEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021650 mImpl->log("start vkQueueBeginDebugUtilsLabelEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021651 auto stream = mImpl->stream();
21652 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021653 auto resources = mImpl->resources();
21654 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021655 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021656 VkQueue local_queue;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021657 VkDebugUtilsLabelEXT* local_pLabelInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021658 local_queue = queue;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021659 local_pLabelInfo = nullptr;
21660 if (pLabelInfo)
21661 {
21662 local_pLabelInfo = (VkDebugUtilsLabelEXT*)pool->alloc(sizeof(const VkDebugUtilsLabelEXT));
21663 deepcopy_VkDebugUtilsLabelEXT(pool, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
21664 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080021665 if (local_pLabelInfo)
21666 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021667 transform_tohost_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021668 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021669 countingStream->rewind();
21670 {
David Reveman9875f2c2019-06-11 21:47:12 -040021671 uint64_t cgen_var_1390;
21672 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1390, 1);
21673 countingStream->write((uint64_t*)&cgen_var_1390, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021674 marshal_VkDebugUtilsLabelEXT(countingStream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021675 }
21676 uint32_t packetSize_vkQueueBeginDebugUtilsLabelEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21677 countingStream->rewind();
21678 uint32_t opcode_vkQueueBeginDebugUtilsLabelEXT = OP_vkQueueBeginDebugUtilsLabelEXT;
21679 stream->write(&opcode_vkQueueBeginDebugUtilsLabelEXT, sizeof(uint32_t));
21680 stream->write(&packetSize_vkQueueBeginDebugUtilsLabelEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021681 uint64_t cgen_var_1391;
21682 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1391, 1);
21683 stream->write((uint64_t*)&cgen_var_1391, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021684 marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021685 AEMU_SCOPED_TRACE("vkQueueBeginDebugUtilsLabelEXT readParams");
21686 AEMU_SCOPED_TRACE("vkQueueBeginDebugUtilsLabelEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070021687 pool->freeAll();
21688 countingStream->clearPool();
21689 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021690 mImpl->log("finish vkQueueBeginDebugUtilsLabelEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021691}
21692
21693void VkEncoder::vkQueueEndDebugUtilsLabelEXT(
21694 VkQueue queue)
21695{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021696 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021697 AEMU_SCOPED_TRACE("vkQueueEndDebugUtilsLabelEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021698 mImpl->log("start vkQueueEndDebugUtilsLabelEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021699 auto stream = mImpl->stream();
21700 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021701 auto resources = mImpl->resources();
21702 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021703 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021704 VkQueue local_queue;
21705 local_queue = queue;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021706 countingStream->rewind();
21707 {
David Reveman9875f2c2019-06-11 21:47:12 -040021708 uint64_t cgen_var_1392;
21709 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1392, 1);
21710 countingStream->write((uint64_t*)&cgen_var_1392, 1 * 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021711 }
21712 uint32_t packetSize_vkQueueEndDebugUtilsLabelEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21713 countingStream->rewind();
21714 uint32_t opcode_vkQueueEndDebugUtilsLabelEXT = OP_vkQueueEndDebugUtilsLabelEXT;
21715 stream->write(&opcode_vkQueueEndDebugUtilsLabelEXT, sizeof(uint32_t));
21716 stream->write(&packetSize_vkQueueEndDebugUtilsLabelEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021717 uint64_t cgen_var_1393;
21718 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1393, 1);
21719 stream->write((uint64_t*)&cgen_var_1393, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021720 AEMU_SCOPED_TRACE("vkQueueEndDebugUtilsLabelEXT readParams");
21721 AEMU_SCOPED_TRACE("vkQueueEndDebugUtilsLabelEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070021722 pool->freeAll();
21723 countingStream->clearPool();
21724 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021725 mImpl->log("finish vkQueueEndDebugUtilsLabelEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021726}
21727
21728void VkEncoder::vkQueueInsertDebugUtilsLabelEXT(
21729 VkQueue queue,
21730 const VkDebugUtilsLabelEXT* pLabelInfo)
21731{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021732 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021733 AEMU_SCOPED_TRACE("vkQueueInsertDebugUtilsLabelEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021734 mImpl->log("start vkQueueInsertDebugUtilsLabelEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021735 auto stream = mImpl->stream();
21736 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021737 auto resources = mImpl->resources();
21738 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021739 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021740 VkQueue local_queue;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021741 VkDebugUtilsLabelEXT* local_pLabelInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021742 local_queue = queue;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021743 local_pLabelInfo = nullptr;
21744 if (pLabelInfo)
21745 {
21746 local_pLabelInfo = (VkDebugUtilsLabelEXT*)pool->alloc(sizeof(const VkDebugUtilsLabelEXT));
21747 deepcopy_VkDebugUtilsLabelEXT(pool, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
21748 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080021749 if (local_pLabelInfo)
21750 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021751 transform_tohost_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021752 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021753 countingStream->rewind();
21754 {
David Reveman9875f2c2019-06-11 21:47:12 -040021755 uint64_t cgen_var_1394;
21756 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1394, 1);
21757 countingStream->write((uint64_t*)&cgen_var_1394, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021758 marshal_VkDebugUtilsLabelEXT(countingStream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021759 }
21760 uint32_t packetSize_vkQueueInsertDebugUtilsLabelEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21761 countingStream->rewind();
21762 uint32_t opcode_vkQueueInsertDebugUtilsLabelEXT = OP_vkQueueInsertDebugUtilsLabelEXT;
21763 stream->write(&opcode_vkQueueInsertDebugUtilsLabelEXT, sizeof(uint32_t));
21764 stream->write(&packetSize_vkQueueInsertDebugUtilsLabelEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021765 uint64_t cgen_var_1395;
21766 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1395, 1);
21767 stream->write((uint64_t*)&cgen_var_1395, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021768 marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021769 AEMU_SCOPED_TRACE("vkQueueInsertDebugUtilsLabelEXT readParams");
21770 AEMU_SCOPED_TRACE("vkQueueInsertDebugUtilsLabelEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070021771 pool->freeAll();
21772 countingStream->clearPool();
21773 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021774 mImpl->log("finish vkQueueInsertDebugUtilsLabelEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021775}
21776
21777void VkEncoder::vkCmdBeginDebugUtilsLabelEXT(
21778 VkCommandBuffer commandBuffer,
21779 const VkDebugUtilsLabelEXT* pLabelInfo)
21780{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021781 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021782 AEMU_SCOPED_TRACE("vkCmdBeginDebugUtilsLabelEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021783 mImpl->log("start vkCmdBeginDebugUtilsLabelEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021784 auto stream = mImpl->stream();
21785 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021786 auto resources = mImpl->resources();
21787 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021788 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021789 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021790 VkDebugUtilsLabelEXT* local_pLabelInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021791 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021792 local_pLabelInfo = nullptr;
21793 if (pLabelInfo)
21794 {
21795 local_pLabelInfo = (VkDebugUtilsLabelEXT*)pool->alloc(sizeof(const VkDebugUtilsLabelEXT));
21796 deepcopy_VkDebugUtilsLabelEXT(pool, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
21797 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080021798 if (local_pLabelInfo)
21799 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021800 transform_tohost_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021801 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021802 countingStream->rewind();
21803 {
David Reveman9875f2c2019-06-11 21:47:12 -040021804 uint64_t cgen_var_1396;
21805 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1396, 1);
21806 countingStream->write((uint64_t*)&cgen_var_1396, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021807 marshal_VkDebugUtilsLabelEXT(countingStream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021808 }
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080021809 uint32_t packetSize_vkCmdBeginDebugUtilsLabelEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21810 countingStream->rewind();
21811 uint32_t opcode_vkCmdBeginDebugUtilsLabelEXT = OP_vkCmdBeginDebugUtilsLabelEXT;
21812 stream->write(&opcode_vkCmdBeginDebugUtilsLabelEXT, sizeof(uint32_t));
21813 stream->write(&packetSize_vkCmdBeginDebugUtilsLabelEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021814 uint64_t cgen_var_1397;
21815 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1397, 1);
21816 stream->write((uint64_t*)&cgen_var_1397, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080021817 marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021818 AEMU_SCOPED_TRACE("vkCmdBeginDebugUtilsLabelEXT readParams");
21819 AEMU_SCOPED_TRACE("vkCmdBeginDebugUtilsLabelEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070021820 pool->freeAll();
21821 countingStream->clearPool();
21822 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021823 mImpl->log("finish vkCmdBeginDebugUtilsLabelEXT");;
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080021824}
21825
21826void VkEncoder::vkCmdEndDebugUtilsLabelEXT(
21827 VkCommandBuffer commandBuffer)
21828{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021829 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021830 AEMU_SCOPED_TRACE("vkCmdEndDebugUtilsLabelEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021831 mImpl->log("start vkCmdEndDebugUtilsLabelEXT");
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080021832 auto stream = mImpl->stream();
21833 auto countingStream = mImpl->countingStream();
21834 auto resources = mImpl->resources();
21835 auto pool = mImpl->pool();
21836 stream->setHandleMapping(resources->unwrapMapping());
21837 VkCommandBuffer local_commandBuffer;
21838 local_commandBuffer = commandBuffer;
21839 countingStream->rewind();
21840 {
David Reveman9875f2c2019-06-11 21:47:12 -040021841 uint64_t cgen_var_1398;
21842 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1398, 1);
21843 countingStream->write((uint64_t*)&cgen_var_1398, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080021844 }
21845 uint32_t packetSize_vkCmdEndDebugUtilsLabelEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21846 countingStream->rewind();
21847 uint32_t opcode_vkCmdEndDebugUtilsLabelEXT = OP_vkCmdEndDebugUtilsLabelEXT;
21848 stream->write(&opcode_vkCmdEndDebugUtilsLabelEXT, sizeof(uint32_t));
21849 stream->write(&packetSize_vkCmdEndDebugUtilsLabelEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021850 uint64_t cgen_var_1399;
21851 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1399, 1);
21852 stream->write((uint64_t*)&cgen_var_1399, 1 * 8);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021853 AEMU_SCOPED_TRACE("vkCmdEndDebugUtilsLabelEXT readParams");
21854 AEMU_SCOPED_TRACE("vkCmdEndDebugUtilsLabelEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070021855 pool->freeAll();
21856 countingStream->clearPool();
21857 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021858 mImpl->log("finish vkCmdEndDebugUtilsLabelEXT");;
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080021859}
21860
21861void VkEncoder::vkCmdInsertDebugUtilsLabelEXT(
21862 VkCommandBuffer commandBuffer,
21863 const VkDebugUtilsLabelEXT* pLabelInfo)
21864{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021865 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021866 AEMU_SCOPED_TRACE("vkCmdInsertDebugUtilsLabelEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021867 mImpl->log("start vkCmdInsertDebugUtilsLabelEXT");
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080021868 auto stream = mImpl->stream();
21869 auto countingStream = mImpl->countingStream();
21870 auto resources = mImpl->resources();
21871 auto pool = mImpl->pool();
21872 stream->setHandleMapping(resources->unwrapMapping());
21873 VkCommandBuffer local_commandBuffer;
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080021874 VkDebugUtilsLabelEXT* local_pLabelInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021875 local_commandBuffer = commandBuffer;
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080021876 local_pLabelInfo = nullptr;
21877 if (pLabelInfo)
21878 {
21879 local_pLabelInfo = (VkDebugUtilsLabelEXT*)pool->alloc(sizeof(const VkDebugUtilsLabelEXT));
21880 deepcopy_VkDebugUtilsLabelEXT(pool, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
21881 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080021882 if (local_pLabelInfo)
21883 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021884 transform_tohost_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021885 }
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080021886 countingStream->rewind();
21887 {
David Reveman9875f2c2019-06-11 21:47:12 -040021888 uint64_t cgen_var_1400;
21889 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1400, 1);
21890 countingStream->write((uint64_t*)&cgen_var_1400, 1 * 8);
Lingfeng Yangb92df0c2018-11-19 01:57:25 -080021891 marshal_VkDebugUtilsLabelEXT(countingStream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
21892 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021893 uint32_t packetSize_vkCmdInsertDebugUtilsLabelEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21894 countingStream->rewind();
21895 uint32_t opcode_vkCmdInsertDebugUtilsLabelEXT = OP_vkCmdInsertDebugUtilsLabelEXT;
21896 stream->write(&opcode_vkCmdInsertDebugUtilsLabelEXT, sizeof(uint32_t));
21897 stream->write(&packetSize_vkCmdInsertDebugUtilsLabelEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021898 uint64_t cgen_var_1401;
21899 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1401, 1);
21900 stream->write((uint64_t*)&cgen_var_1401, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021901 marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021902 AEMU_SCOPED_TRACE("vkCmdInsertDebugUtilsLabelEXT readParams");
21903 AEMU_SCOPED_TRACE("vkCmdInsertDebugUtilsLabelEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070021904 pool->freeAll();
21905 countingStream->clearPool();
21906 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021907 mImpl->log("finish vkCmdInsertDebugUtilsLabelEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021908}
21909
21910VkResult VkEncoder::vkCreateDebugUtilsMessengerEXT(
21911 VkInstance instance,
21912 const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
21913 const VkAllocationCallbacks* pAllocator,
21914 VkDebugUtilsMessengerEXT* pMessenger)
21915{
Lingfeng Yang256f9252020-07-14 14:27:33 -070021916 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021917 AEMU_SCOPED_TRACE("vkCreateDebugUtilsMessengerEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021918 mImpl->log("start vkCreateDebugUtilsMessengerEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021919 auto stream = mImpl->stream();
21920 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021921 auto resources = mImpl->resources();
21922 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080021923 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021924 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021925 VkDebugUtilsMessengerCreateInfoEXT* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080021926 VkAllocationCallbacks* local_pAllocator;
21927 local_instance = instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021928 local_pCreateInfo = nullptr;
21929 if (pCreateInfo)
21930 {
21931 local_pCreateInfo = (VkDebugUtilsMessengerCreateInfoEXT*)pool->alloc(sizeof(const VkDebugUtilsMessengerCreateInfoEXT));
21932 deepcopy_VkDebugUtilsMessengerCreateInfoEXT(pool, pCreateInfo, (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo));
21933 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021934 local_pAllocator = nullptr;
21935 if (pAllocator)
21936 {
21937 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
21938 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
21939 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080021940 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080021941 if (local_pCreateInfo)
21942 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021943 transform_tohost_VkDebugUtilsMessengerCreateInfoEXT(mImpl->resources(), (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021944 }
21945 if (local_pAllocator)
21946 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080021947 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080021948 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021949 countingStream->rewind();
21950 {
David Reveman9875f2c2019-06-11 21:47:12 -040021951 uint64_t cgen_var_1402;
21952 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1402, 1);
21953 countingStream->write((uint64_t*)&cgen_var_1402, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021954 marshal_VkDebugUtilsMessengerCreateInfoEXT(countingStream, (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021955 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040021956 uint64_t cgen_var_1403 = (uint64_t)(uintptr_t)local_pAllocator;
21957 countingStream->putBe64(cgen_var_1403);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021958 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021959 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021960 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021961 }
David Reveman9875f2c2019-06-11 21:47:12 -040021962 uint64_t cgen_var_1404;
21963 countingStream->handleMapping()->mapHandles_VkDebugUtilsMessengerEXT_u64(pMessenger, &cgen_var_1404, 1);
21964 countingStream->write((uint64_t*)&cgen_var_1404, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021965 }
21966 uint32_t packetSize_vkCreateDebugUtilsMessengerEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
21967 countingStream->rewind();
21968 uint32_t opcode_vkCreateDebugUtilsMessengerEXT = OP_vkCreateDebugUtilsMessengerEXT;
21969 stream->write(&opcode_vkCreateDebugUtilsMessengerEXT, sizeof(uint32_t));
21970 stream->write(&packetSize_vkCreateDebugUtilsMessengerEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040021971 uint64_t cgen_var_1405;
21972 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1405, 1);
21973 stream->write((uint64_t*)&cgen_var_1405, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021974 marshal_VkDebugUtilsMessengerCreateInfoEXT(stream, (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080021975 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040021976 uint64_t cgen_var_1406 = (uint64_t)(uintptr_t)local_pAllocator;
21977 stream->putBe64(cgen_var_1406);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021978 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021979 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080021980 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021981 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080021982 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040021983 uint64_t cgen_var_1407;
21984 stream->handleMapping()->mapHandles_VkDebugUtilsMessengerEXT_u64(pMessenger, &cgen_var_1407, 1);
21985 stream->write((uint64_t*)&cgen_var_1407, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080021986 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021987 AEMU_SCOPED_TRACE("vkCreateDebugUtilsMessengerEXT readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -080021988 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -040021989 uint64_t cgen_var_1408;
21990 stream->read((uint64_t*)&cgen_var_1408, 8);
21991 stream->handleMapping()->mapHandles_u64_VkDebugUtilsMessengerEXT(&cgen_var_1408, (VkDebugUtilsMessengerEXT*)pMessenger, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -080021992 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -080021993 AEMU_SCOPED_TRACE("vkCreateDebugUtilsMessengerEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070021994 VkResult vkCreateDebugUtilsMessengerEXT_VkResult_return = (VkResult)0;
21995 stream->read(&vkCreateDebugUtilsMessengerEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070021996 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080021997 countingStream->clearPool();
21998 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080021999 mImpl->log("finish vkCreateDebugUtilsMessengerEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022000 return vkCreateDebugUtilsMessengerEXT_VkResult_return;
22001}
22002
22003void VkEncoder::vkDestroyDebugUtilsMessengerEXT(
22004 VkInstance instance,
22005 VkDebugUtilsMessengerEXT messenger,
22006 const VkAllocationCallbacks* pAllocator)
22007{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022008 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022009 AEMU_SCOPED_TRACE("vkDestroyDebugUtilsMessengerEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022010 mImpl->log("start vkDestroyDebugUtilsMessengerEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022011 auto stream = mImpl->stream();
22012 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022013 auto resources = mImpl->resources();
22014 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022015 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022016 VkInstance local_instance;
Lingfeng Yang9d02e102018-11-10 01:51:46 -080022017 VkDebugUtilsMessengerEXT local_messenger;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022018 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022019 local_instance = instance;
22020 local_messenger = messenger;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022021 local_pAllocator = nullptr;
22022 if (pAllocator)
22023 {
22024 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
22025 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
22026 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080022027 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080022028 if (local_pAllocator)
22029 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080022030 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080022031 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022032 countingStream->rewind();
22033 {
David Reveman9875f2c2019-06-11 21:47:12 -040022034 uint64_t cgen_var_1409;
22035 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1409, 1);
22036 countingStream->write((uint64_t*)&cgen_var_1409, 1 * 8);
22037 uint64_t cgen_var_1410;
22038 countingStream->handleMapping()->mapHandles_VkDebugUtilsMessengerEXT_u64(&local_messenger, &cgen_var_1410, 1);
22039 countingStream->write((uint64_t*)&cgen_var_1410, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022040 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022041 uint64_t cgen_var_1411 = (uint64_t)(uintptr_t)local_pAllocator;
22042 countingStream->putBe64(cgen_var_1411);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022043 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022044 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022045 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022046 }
22047 }
22048 uint32_t packetSize_vkDestroyDebugUtilsMessengerEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22049 countingStream->rewind();
22050 uint32_t opcode_vkDestroyDebugUtilsMessengerEXT = OP_vkDestroyDebugUtilsMessengerEXT;
22051 stream->write(&opcode_vkDestroyDebugUtilsMessengerEXT, sizeof(uint32_t));
22052 stream->write(&packetSize_vkDestroyDebugUtilsMessengerEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022053 uint64_t cgen_var_1412;
22054 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1412, 1);
22055 stream->write((uint64_t*)&cgen_var_1412, 1 * 8);
22056 uint64_t cgen_var_1413;
22057 stream->handleMapping()->mapHandles_VkDebugUtilsMessengerEXT_u64(&local_messenger, &cgen_var_1413, 1);
22058 stream->write((uint64_t*)&cgen_var_1413, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022059 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022060 uint64_t cgen_var_1414 = (uint64_t)(uintptr_t)local_pAllocator;
22061 stream->putBe64(cgen_var_1414);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022062 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022063 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022064 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022065 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022066 AEMU_SCOPED_TRACE("vkDestroyDebugUtilsMessengerEXT readParams");
22067 AEMU_SCOPED_TRACE("vkDestroyDebugUtilsMessengerEXT returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022068 resources->destroyMapping()->mapHandles_VkDebugUtilsMessengerEXT((VkDebugUtilsMessengerEXT*)&messenger);
Lingfeng Yang256f9252020-07-14 14:27:33 -070022069 pool->freeAll();
22070 countingStream->clearPool();
22071 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022072 mImpl->log("finish vkDestroyDebugUtilsMessengerEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022073}
22074
22075void VkEncoder::vkSubmitDebugUtilsMessageEXT(
22076 VkInstance instance,
22077 VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
22078 VkDebugUtilsMessageTypeFlagsEXT messageTypes,
22079 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData)
22080{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022081 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022082 AEMU_SCOPED_TRACE("vkSubmitDebugUtilsMessageEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022083 mImpl->log("start vkSubmitDebugUtilsMessageEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022084 auto stream = mImpl->stream();
22085 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022086 auto resources = mImpl->resources();
22087 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022088 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022089 VkInstance local_instance;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022090 VkDebugUtilsMessageSeverityFlagBitsEXT local_messageSeverity;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022091 VkDebugUtilsMessageTypeFlagsEXT local_messageTypes;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022092 VkDebugUtilsMessengerCallbackDataEXT* local_pCallbackData;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022093 local_instance = instance;
22094 local_messageSeverity = messageSeverity;
22095 local_messageTypes = messageTypes;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022096 local_pCallbackData = nullptr;
22097 if (pCallbackData)
22098 {
22099 local_pCallbackData = (VkDebugUtilsMessengerCallbackDataEXT*)pool->alloc(sizeof(const VkDebugUtilsMessengerCallbackDataEXT));
22100 deepcopy_VkDebugUtilsMessengerCallbackDataEXT(pool, pCallbackData, (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData));
22101 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080022102 if (local_pCallbackData)
22103 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080022104 transform_tohost_VkDebugUtilsMessengerCallbackDataEXT(mImpl->resources(), (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData));
Lingfeng Yang62b23322018-12-24 12:45:47 -080022105 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022106 countingStream->rewind();
22107 {
David Reveman9875f2c2019-06-11 21:47:12 -040022108 uint64_t cgen_var_1415;
22109 countingStream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1415, 1);
22110 countingStream->write((uint64_t*)&cgen_var_1415, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022111 countingStream->write((VkDebugUtilsMessageSeverityFlagBitsEXT*)&local_messageSeverity, sizeof(VkDebugUtilsMessageSeverityFlagBitsEXT));
22112 countingStream->write((VkDebugUtilsMessageTypeFlagsEXT*)&local_messageTypes, sizeof(VkDebugUtilsMessageTypeFlagsEXT));
22113 marshal_VkDebugUtilsMessengerCallbackDataEXT(countingStream, (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022114 }
22115 uint32_t packetSize_vkSubmitDebugUtilsMessageEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22116 countingStream->rewind();
22117 uint32_t opcode_vkSubmitDebugUtilsMessageEXT = OP_vkSubmitDebugUtilsMessageEXT;
22118 stream->write(&opcode_vkSubmitDebugUtilsMessageEXT, sizeof(uint32_t));
22119 stream->write(&packetSize_vkSubmitDebugUtilsMessageEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022120 uint64_t cgen_var_1416;
22121 stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_1416, 1);
22122 stream->write((uint64_t*)&cgen_var_1416, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022123 stream->write((VkDebugUtilsMessageSeverityFlagBitsEXT*)&local_messageSeverity, sizeof(VkDebugUtilsMessageSeverityFlagBitsEXT));
22124 stream->write((VkDebugUtilsMessageTypeFlagsEXT*)&local_messageTypes, sizeof(VkDebugUtilsMessageTypeFlagsEXT));
22125 marshal_VkDebugUtilsMessengerCallbackDataEXT(stream, (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022126 AEMU_SCOPED_TRACE("vkSubmitDebugUtilsMessageEXT readParams");
22127 AEMU_SCOPED_TRACE("vkSubmitDebugUtilsMessageEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070022128 pool->freeAll();
22129 countingStream->clearPool();
22130 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022131 mImpl->log("finish vkSubmitDebugUtilsMessageEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022132}
22133
22134#endif
22135#ifdef VK_ANDROID_external_memory_android_hardware_buffer
22136VkResult VkEncoder::vkGetAndroidHardwareBufferPropertiesANDROID(
22137 VkDevice device,
22138 const AHardwareBuffer* buffer,
22139 VkAndroidHardwareBufferPropertiesANDROID* pProperties)
22140{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022141 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022142 AEMU_SCOPED_TRACE("vkGetAndroidHardwareBufferPropertiesANDROID encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022143 mImpl->log("start vkGetAndroidHardwareBufferPropertiesANDROID");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022144 auto stream = mImpl->stream();
22145 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022146 auto resources = mImpl->resources();
22147 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022148 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022149 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022150 AHardwareBuffer* local_buffer;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022151 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022152 local_buffer = nullptr;
22153 if (buffer)
22154 {
22155 local_buffer = (AHardwareBuffer*)pool->dupArray(buffer, sizeof(const AHardwareBuffer));
22156 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022157 countingStream->rewind();
22158 {
David Reveman9875f2c2019-06-11 21:47:12 -040022159 uint64_t cgen_var_1417;
22160 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1417, 1);
22161 countingStream->write((uint64_t*)&cgen_var_1417, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022162 countingStream->write((AHardwareBuffer*)local_buffer, sizeof(AHardwareBuffer));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022163 marshal_VkAndroidHardwareBufferPropertiesANDROID(countingStream, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
22164 }
22165 uint32_t packetSize_vkGetAndroidHardwareBufferPropertiesANDROID = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22166 countingStream->rewind();
22167 uint32_t opcode_vkGetAndroidHardwareBufferPropertiesANDROID = OP_vkGetAndroidHardwareBufferPropertiesANDROID;
22168 stream->write(&opcode_vkGetAndroidHardwareBufferPropertiesANDROID, sizeof(uint32_t));
22169 stream->write(&packetSize_vkGetAndroidHardwareBufferPropertiesANDROID, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022170 uint64_t cgen_var_1418;
22171 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1418, 1);
22172 stream->write((uint64_t*)&cgen_var_1418, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022173 stream->write((AHardwareBuffer*)local_buffer, sizeof(AHardwareBuffer));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022174 marshal_VkAndroidHardwareBufferPropertiesANDROID(stream, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022175 AEMU_SCOPED_TRACE("vkGetAndroidHardwareBufferPropertiesANDROID readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022176 unmarshal_VkAndroidHardwareBufferPropertiesANDROID(stream, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080022177 if (pProperties)
22178 {
22179 transform_fromhost_VkAndroidHardwareBufferPropertiesANDROID(mImpl->resources(), (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
22180 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022181 AEMU_SCOPED_TRACE("vkGetAndroidHardwareBufferPropertiesANDROID returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022182 VkResult vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return = (VkResult)0;
22183 stream->read(&vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070022184 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080022185 countingStream->clearPool();
22186 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022187 mImpl->log("finish vkGetAndroidHardwareBufferPropertiesANDROID");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022188 return vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return;
22189}
22190
22191VkResult VkEncoder::vkGetMemoryAndroidHardwareBufferANDROID(
22192 VkDevice device,
22193 const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
22194 AHardwareBuffer** pBuffer)
22195{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022196 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022197 AEMU_SCOPED_TRACE("vkGetMemoryAndroidHardwareBufferANDROID encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022198 mImpl->log("start vkGetMemoryAndroidHardwareBufferANDROID");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022199 auto stream = mImpl->stream();
22200 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022201 auto resources = mImpl->resources();
22202 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022203 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022204 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022205 VkMemoryGetAndroidHardwareBufferInfoANDROID* local_pInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022206 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022207 local_pInfo = nullptr;
22208 if (pInfo)
22209 {
22210 local_pInfo = (VkMemoryGetAndroidHardwareBufferInfoANDROID*)pool->alloc(sizeof(const VkMemoryGetAndroidHardwareBufferInfoANDROID));
22211 deepcopy_VkMemoryGetAndroidHardwareBufferInfoANDROID(pool, pInfo, (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo));
22212 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080022213 if (local_pInfo)
22214 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080022215 transform_tohost_VkMemoryGetAndroidHardwareBufferInfoANDROID(mImpl->resources(), (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080022216 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022217 countingStream->rewind();
22218 {
David Reveman9875f2c2019-06-11 21:47:12 -040022219 uint64_t cgen_var_1419;
22220 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1419, 1);
22221 countingStream->write((uint64_t*)&cgen_var_1419, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022222 marshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(countingStream, (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022223 countingStream->write((AHardwareBuffer**)pBuffer, sizeof(AHardwareBuffer*));
22224 }
22225 uint32_t packetSize_vkGetMemoryAndroidHardwareBufferANDROID = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22226 countingStream->rewind();
22227 uint32_t opcode_vkGetMemoryAndroidHardwareBufferANDROID = OP_vkGetMemoryAndroidHardwareBufferANDROID;
22228 stream->write(&opcode_vkGetMemoryAndroidHardwareBufferANDROID, sizeof(uint32_t));
22229 stream->write(&packetSize_vkGetMemoryAndroidHardwareBufferANDROID, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022230 uint64_t cgen_var_1420;
22231 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1420, 1);
22232 stream->write((uint64_t*)&cgen_var_1420, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022233 marshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(stream, (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022234 stream->write((AHardwareBuffer**)pBuffer, sizeof(AHardwareBuffer*));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022235 AEMU_SCOPED_TRACE("vkGetMemoryAndroidHardwareBufferANDROID readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022236 stream->read((AHardwareBuffer**)pBuffer, sizeof(AHardwareBuffer*));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022237 AEMU_SCOPED_TRACE("vkGetMemoryAndroidHardwareBufferANDROID returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022238 VkResult vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return = (VkResult)0;
22239 stream->read(&vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070022240 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080022241 countingStream->clearPool();
22242 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022243 mImpl->log("finish vkGetMemoryAndroidHardwareBufferANDROID");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022244 return vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return;
22245}
22246
22247#endif
22248#ifdef VK_EXT_sampler_filter_minmax
22249#endif
22250#ifdef VK_AMD_gpu_shader_int16
22251#endif
22252#ifdef VK_AMD_mixed_attachment_samples
22253#endif
22254#ifdef VK_AMD_shader_fragment_mask
22255#endif
22256#ifdef VK_EXT_shader_stencil_export
22257#endif
22258#ifdef VK_EXT_sample_locations
22259void VkEncoder::vkCmdSetSampleLocationsEXT(
22260 VkCommandBuffer commandBuffer,
22261 const VkSampleLocationsInfoEXT* pSampleLocationsInfo)
22262{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022263 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022264 AEMU_SCOPED_TRACE("vkCmdSetSampleLocationsEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022265 mImpl->log("start vkCmdSetSampleLocationsEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022266 auto stream = mImpl->stream();
22267 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022268 auto resources = mImpl->resources();
22269 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022270 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022271 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022272 VkSampleLocationsInfoEXT* local_pSampleLocationsInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022273 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022274 local_pSampleLocationsInfo = nullptr;
22275 if (pSampleLocationsInfo)
22276 {
22277 local_pSampleLocationsInfo = (VkSampleLocationsInfoEXT*)pool->alloc(sizeof(const VkSampleLocationsInfoEXT));
22278 deepcopy_VkSampleLocationsInfoEXT(pool, pSampleLocationsInfo, (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo));
22279 }
Lingfeng Yang62b23322018-12-24 12:45:47 -080022280 if (local_pSampleLocationsInfo)
22281 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080022282 transform_tohost_VkSampleLocationsInfoEXT(mImpl->resources(), (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080022283 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022284 countingStream->rewind();
22285 {
David Reveman9875f2c2019-06-11 21:47:12 -040022286 uint64_t cgen_var_1421;
22287 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1421, 1);
22288 countingStream->write((uint64_t*)&cgen_var_1421, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022289 marshal_VkSampleLocationsInfoEXT(countingStream, (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022290 }
22291 uint32_t packetSize_vkCmdSetSampleLocationsEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22292 countingStream->rewind();
22293 uint32_t opcode_vkCmdSetSampleLocationsEXT = OP_vkCmdSetSampleLocationsEXT;
22294 stream->write(&opcode_vkCmdSetSampleLocationsEXT, sizeof(uint32_t));
22295 stream->write(&packetSize_vkCmdSetSampleLocationsEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022296 uint64_t cgen_var_1422;
22297 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1422, 1);
22298 stream->write((uint64_t*)&cgen_var_1422, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022299 marshal_VkSampleLocationsInfoEXT(stream, (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022300 AEMU_SCOPED_TRACE("vkCmdSetSampleLocationsEXT readParams");
22301 AEMU_SCOPED_TRACE("vkCmdSetSampleLocationsEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070022302 pool->freeAll();
22303 countingStream->clearPool();
22304 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022305 mImpl->log("finish vkCmdSetSampleLocationsEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022306}
22307
22308void VkEncoder::vkGetPhysicalDeviceMultisamplePropertiesEXT(
22309 VkPhysicalDevice physicalDevice,
22310 VkSampleCountFlagBits samples,
22311 VkMultisamplePropertiesEXT* pMultisampleProperties)
22312{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022313 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022314 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMultisamplePropertiesEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022315 mImpl->log("start vkGetPhysicalDeviceMultisamplePropertiesEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022316 auto stream = mImpl->stream();
22317 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022318 auto resources = mImpl->resources();
22319 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022320 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022321 VkPhysicalDevice local_physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022322 VkSampleCountFlagBits local_samples;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022323 local_physicalDevice = physicalDevice;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022324 local_samples = samples;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022325 countingStream->rewind();
22326 {
David Reveman9875f2c2019-06-11 21:47:12 -040022327 uint64_t cgen_var_1423;
22328 countingStream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1423, 1);
22329 countingStream->write((uint64_t*)&cgen_var_1423, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022330 countingStream->write((VkSampleCountFlagBits*)&local_samples, sizeof(VkSampleCountFlagBits));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022331 marshal_VkMultisamplePropertiesEXT(countingStream, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
22332 }
22333 uint32_t packetSize_vkGetPhysicalDeviceMultisamplePropertiesEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22334 countingStream->rewind();
22335 uint32_t opcode_vkGetPhysicalDeviceMultisamplePropertiesEXT = OP_vkGetPhysicalDeviceMultisamplePropertiesEXT;
22336 stream->write(&opcode_vkGetPhysicalDeviceMultisamplePropertiesEXT, sizeof(uint32_t));
22337 stream->write(&packetSize_vkGetPhysicalDeviceMultisamplePropertiesEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022338 uint64_t cgen_var_1424;
22339 stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_1424, 1);
22340 stream->write((uint64_t*)&cgen_var_1424, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022341 stream->write((VkSampleCountFlagBits*)&local_samples, sizeof(VkSampleCountFlagBits));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022342 marshal_VkMultisamplePropertiesEXT(stream, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022343 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMultisamplePropertiesEXT readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022344 unmarshal_VkMultisamplePropertiesEXT(stream, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080022345 if (pMultisampleProperties)
22346 {
22347 transform_fromhost_VkMultisamplePropertiesEXT(mImpl->resources(), (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
22348 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022349 AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMultisamplePropertiesEXT returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070022350 pool->freeAll();
22351 countingStream->clearPool();
22352 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022353 mImpl->log("finish vkGetPhysicalDeviceMultisamplePropertiesEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022354}
22355
22356#endif
22357#ifdef VK_EXT_blend_operation_advanced
22358#endif
22359#ifdef VK_NV_fragment_coverage_to_color
22360#endif
22361#ifdef VK_NV_framebuffer_mixed_samples
22362#endif
22363#ifdef VK_NV_fill_rectangle
22364#endif
22365#ifdef VK_EXT_post_depth_coverage
22366#endif
22367#ifdef VK_EXT_validation_cache
22368VkResult VkEncoder::vkCreateValidationCacheEXT(
22369 VkDevice device,
22370 const VkValidationCacheCreateInfoEXT* pCreateInfo,
22371 const VkAllocationCallbacks* pAllocator,
22372 VkValidationCacheEXT* pValidationCache)
22373{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022374 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022375 AEMU_SCOPED_TRACE("vkCreateValidationCacheEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022376 mImpl->log("start vkCreateValidationCacheEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022377 auto stream = mImpl->stream();
22378 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022379 auto resources = mImpl->resources();
22380 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022381 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022382 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022383 VkValidationCacheCreateInfoEXT* local_pCreateInfo;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022384 VkAllocationCallbacks* local_pAllocator;
22385 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022386 local_pCreateInfo = nullptr;
22387 if (pCreateInfo)
22388 {
22389 local_pCreateInfo = (VkValidationCacheCreateInfoEXT*)pool->alloc(sizeof(const VkValidationCacheCreateInfoEXT));
22390 deepcopy_VkValidationCacheCreateInfoEXT(pool, pCreateInfo, (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo));
22391 }
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022392 local_pAllocator = nullptr;
22393 if (pAllocator)
22394 {
22395 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
22396 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
22397 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080022398 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080022399 if (local_pCreateInfo)
22400 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080022401 transform_tohost_VkValidationCacheCreateInfoEXT(mImpl->resources(), (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo));
Lingfeng Yang62b23322018-12-24 12:45:47 -080022402 }
22403 if (local_pAllocator)
22404 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080022405 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080022406 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022407 countingStream->rewind();
22408 {
David Reveman9875f2c2019-06-11 21:47:12 -040022409 uint64_t cgen_var_1425;
22410 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1425, 1);
22411 countingStream->write((uint64_t*)&cgen_var_1425, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022412 marshal_VkValidationCacheCreateInfoEXT(countingStream, (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022413 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022414 uint64_t cgen_var_1426 = (uint64_t)(uintptr_t)local_pAllocator;
22415 countingStream->putBe64(cgen_var_1426);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022416 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022417 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022418 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022419 }
David Reveman9875f2c2019-06-11 21:47:12 -040022420 uint64_t cgen_var_1427;
22421 countingStream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(pValidationCache, &cgen_var_1427, 1);
22422 countingStream->write((uint64_t*)&cgen_var_1427, 8);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022423 }
22424 uint32_t packetSize_vkCreateValidationCacheEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22425 countingStream->rewind();
22426 uint32_t opcode_vkCreateValidationCacheEXT = OP_vkCreateValidationCacheEXT;
22427 stream->write(&opcode_vkCreateValidationCacheEXT, sizeof(uint32_t));
22428 stream->write(&packetSize_vkCreateValidationCacheEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022429 uint64_t cgen_var_1428;
22430 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1428, 1);
22431 stream->write((uint64_t*)&cgen_var_1428, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022432 marshal_VkValidationCacheCreateInfoEXT(stream, (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022433 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022434 uint64_t cgen_var_1429 = (uint64_t)(uintptr_t)local_pAllocator;
22435 stream->putBe64(cgen_var_1429);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022436 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022437 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022438 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022439 }
Lingfeng Yange4008a02018-11-18 12:22:48 -080022440 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
David Reveman9875f2c2019-06-11 21:47:12 -040022441 uint64_t cgen_var_1430;
22442 stream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(pValidationCache, &cgen_var_1430, 1);
22443 stream->write((uint64_t*)&cgen_var_1430, 8);
Lingfeng Yange4008a02018-11-18 12:22:48 -080022444 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022445 AEMU_SCOPED_TRACE("vkCreateValidationCacheEXT readParams");
Lingfeng Yange4008a02018-11-18 12:22:48 -080022446 stream->setHandleMapping(resources->createMapping());
David Reveman9875f2c2019-06-11 21:47:12 -040022447 uint64_t cgen_var_1431;
22448 stream->read((uint64_t*)&cgen_var_1431, 8);
22449 stream->handleMapping()->mapHandles_u64_VkValidationCacheEXT(&cgen_var_1431, (VkValidationCacheEXT*)pValidationCache, 1);
Lingfeng Yange4008a02018-11-18 12:22:48 -080022450 stream->unsetHandleMapping();
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022451 AEMU_SCOPED_TRACE("vkCreateValidationCacheEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022452 VkResult vkCreateValidationCacheEXT_VkResult_return = (VkResult)0;
22453 stream->read(&vkCreateValidationCacheEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070022454 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080022455 countingStream->clearPool();
22456 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022457 mImpl->log("finish vkCreateValidationCacheEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022458 return vkCreateValidationCacheEXT_VkResult_return;
22459}
22460
22461void VkEncoder::vkDestroyValidationCacheEXT(
22462 VkDevice device,
22463 VkValidationCacheEXT validationCache,
22464 const VkAllocationCallbacks* pAllocator)
22465{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022466 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022467 AEMU_SCOPED_TRACE("vkDestroyValidationCacheEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022468 mImpl->log("start vkDestroyValidationCacheEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022469 auto stream = mImpl->stream();
22470 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022471 auto resources = mImpl->resources();
22472 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022473 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022474 VkDevice local_device;
Lingfeng Yang9d02e102018-11-10 01:51:46 -080022475 VkValidationCacheEXT local_validationCache;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022476 VkAllocationCallbacks* local_pAllocator;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022477 local_device = device;
22478 local_validationCache = validationCache;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022479 local_pAllocator = nullptr;
22480 if (pAllocator)
22481 {
22482 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
22483 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
22484 }
Lingfeng Yang9d02e102018-11-10 01:51:46 -080022485 local_pAllocator = nullptr;
Lingfeng Yang62b23322018-12-24 12:45:47 -080022486 if (local_pAllocator)
22487 {
Lingfeng Yang97a06702018-12-24 17:02:43 -080022488 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yang62b23322018-12-24 12:45:47 -080022489 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022490 countingStream->rewind();
22491 {
David Reveman9875f2c2019-06-11 21:47:12 -040022492 uint64_t cgen_var_1432;
22493 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1432, 1);
22494 countingStream->write((uint64_t*)&cgen_var_1432, 1 * 8);
22495 uint64_t cgen_var_1433;
22496 countingStream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(&local_validationCache, &cgen_var_1433, 1);
22497 countingStream->write((uint64_t*)&cgen_var_1433, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022498 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022499 uint64_t cgen_var_1434 = (uint64_t)(uintptr_t)local_pAllocator;
22500 countingStream->putBe64(cgen_var_1434);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022501 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022502 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022503 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022504 }
22505 }
22506 uint32_t packetSize_vkDestroyValidationCacheEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22507 countingStream->rewind();
22508 uint32_t opcode_vkDestroyValidationCacheEXT = OP_vkDestroyValidationCacheEXT;
22509 stream->write(&opcode_vkDestroyValidationCacheEXT, sizeof(uint32_t));
22510 stream->write(&packetSize_vkDestroyValidationCacheEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022511 uint64_t cgen_var_1435;
22512 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1435, 1);
22513 stream->write((uint64_t*)&cgen_var_1435, 1 * 8);
22514 uint64_t cgen_var_1436;
22515 stream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(&local_validationCache, &cgen_var_1436, 1);
22516 stream->write((uint64_t*)&cgen_var_1436, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022517 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022518 uint64_t cgen_var_1437 = (uint64_t)(uintptr_t)local_pAllocator;
22519 stream->putBe64(cgen_var_1437);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022520 if (local_pAllocator)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022521 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022522 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022523 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022524 AEMU_SCOPED_TRACE("vkDestroyValidationCacheEXT readParams");
22525 AEMU_SCOPED_TRACE("vkDestroyValidationCacheEXT returnUnmarshal");
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022526 resources->destroyMapping()->mapHandles_VkValidationCacheEXT((VkValidationCacheEXT*)&validationCache);
Lingfeng Yang256f9252020-07-14 14:27:33 -070022527 pool->freeAll();
22528 countingStream->clearPool();
22529 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022530 mImpl->log("finish vkDestroyValidationCacheEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022531}
22532
22533VkResult VkEncoder::vkMergeValidationCachesEXT(
22534 VkDevice device,
22535 VkValidationCacheEXT dstCache,
22536 uint32_t srcCacheCount,
22537 const VkValidationCacheEXT* pSrcCaches)
22538{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022539 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022540 AEMU_SCOPED_TRACE("vkMergeValidationCachesEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022541 mImpl->log("start vkMergeValidationCachesEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022542 auto stream = mImpl->stream();
22543 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022544 auto resources = mImpl->resources();
22545 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022546 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022547 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022548 VkValidationCacheEXT local_dstCache;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022549 uint32_t local_srcCacheCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022550 VkValidationCacheEXT* local_pSrcCaches;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022551 local_device = device;
22552 local_dstCache = dstCache;
22553 local_srcCacheCount = srcCacheCount;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022554 local_pSrcCaches = nullptr;
22555 if (pSrcCaches)
22556 {
22557 local_pSrcCaches = (VkValidationCacheEXT*)pool->dupArray(pSrcCaches, ((srcCacheCount)) * sizeof(const VkValidationCacheEXT));
22558 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022559 countingStream->rewind();
22560 {
David Reveman9875f2c2019-06-11 21:47:12 -040022561 uint64_t cgen_var_1438;
22562 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1438, 1);
22563 countingStream->write((uint64_t*)&cgen_var_1438, 1 * 8);
22564 uint64_t cgen_var_1439;
22565 countingStream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(&local_dstCache, &cgen_var_1439, 1);
22566 countingStream->write((uint64_t*)&cgen_var_1439, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022567 countingStream->write((uint32_t*)&local_srcCacheCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -080022568 if (((srcCacheCount)))
22569 {
David Reveman9875f2c2019-06-11 21:47:12 -040022570 uint64_t* cgen_var_1440;
22571 countingStream->alloc((void**)&cgen_var_1440, ((srcCacheCount)) * 8);
22572 countingStream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(local_pSrcCaches, cgen_var_1440, ((srcCacheCount)));
22573 countingStream->write((uint64_t*)cgen_var_1440, ((srcCacheCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080022574 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022575 }
22576 uint32_t packetSize_vkMergeValidationCachesEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22577 countingStream->rewind();
22578 uint32_t opcode_vkMergeValidationCachesEXT = OP_vkMergeValidationCachesEXT;
22579 stream->write(&opcode_vkMergeValidationCachesEXT, sizeof(uint32_t));
22580 stream->write(&packetSize_vkMergeValidationCachesEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022581 uint64_t cgen_var_1441;
22582 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1441, 1);
22583 stream->write((uint64_t*)&cgen_var_1441, 1 * 8);
22584 uint64_t cgen_var_1442;
22585 stream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(&local_dstCache, &cgen_var_1442, 1);
22586 stream->write((uint64_t*)&cgen_var_1442, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022587 stream->write((uint32_t*)&local_srcCacheCount, sizeof(uint32_t));
Lingfeng Yang2285df12018-11-17 16:25:11 -080022588 if (((srcCacheCount)))
22589 {
David Reveman9875f2c2019-06-11 21:47:12 -040022590 uint64_t* cgen_var_1443;
22591 stream->alloc((void**)&cgen_var_1443, ((srcCacheCount)) * 8);
22592 stream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(local_pSrcCaches, cgen_var_1443, ((srcCacheCount)));
22593 stream->write((uint64_t*)cgen_var_1443, ((srcCacheCount)) * 8);
Lingfeng Yang2285df12018-11-17 16:25:11 -080022594 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022595 AEMU_SCOPED_TRACE("vkMergeValidationCachesEXT readParams");
22596 AEMU_SCOPED_TRACE("vkMergeValidationCachesEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022597 VkResult vkMergeValidationCachesEXT_VkResult_return = (VkResult)0;
22598 stream->read(&vkMergeValidationCachesEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070022599 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080022600 countingStream->clearPool();
22601 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022602 mImpl->log("finish vkMergeValidationCachesEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022603 return vkMergeValidationCachesEXT_VkResult_return;
22604}
22605
22606VkResult VkEncoder::vkGetValidationCacheDataEXT(
22607 VkDevice device,
22608 VkValidationCacheEXT validationCache,
22609 size_t* pDataSize,
22610 void* pData)
22611{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022612 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022613 AEMU_SCOPED_TRACE("vkGetValidationCacheDataEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022614 mImpl->log("start vkGetValidationCacheDataEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022615 auto stream = mImpl->stream();
22616 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022617 auto resources = mImpl->resources();
22618 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022619 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022620 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022621 VkValidationCacheEXT local_validationCache;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022622 local_device = device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022623 local_validationCache = validationCache;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022624 countingStream->rewind();
22625 {
David Reveman9875f2c2019-06-11 21:47:12 -040022626 uint64_t cgen_var_1444;
22627 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1444, 1);
22628 countingStream->write((uint64_t*)&cgen_var_1444, 1 * 8);
22629 uint64_t cgen_var_1445;
22630 countingStream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(&local_validationCache, &cgen_var_1445, 1);
22631 countingStream->write((uint64_t*)&cgen_var_1445, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022632 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022633 uint64_t cgen_var_1446 = (uint64_t)(uintptr_t)pDataSize;
22634 countingStream->putBe64(cgen_var_1446);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022635 if (pDataSize)
22636 {
David Reveman9875f2c2019-06-11 21:47:12 -040022637 uint64_t cgen_var_1447 = (uint64_t)(*pDataSize);
22638 countingStream->putBe64(cgen_var_1447);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022639 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022640 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022641 uint64_t cgen_var_1448 = (uint64_t)(uintptr_t)pData;
22642 countingStream->putBe64(cgen_var_1448);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022643 if (pData)
22644 {
22645 countingStream->write((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
22646 }
22647 }
22648 uint32_t packetSize_vkGetValidationCacheDataEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22649 countingStream->rewind();
22650 uint32_t opcode_vkGetValidationCacheDataEXT = OP_vkGetValidationCacheDataEXT;
22651 stream->write(&opcode_vkGetValidationCacheDataEXT, sizeof(uint32_t));
22652 stream->write(&packetSize_vkGetValidationCacheDataEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022653 uint64_t cgen_var_1449;
22654 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1449, 1);
22655 stream->write((uint64_t*)&cgen_var_1449, 1 * 8);
22656 uint64_t cgen_var_1450;
22657 stream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(&local_validationCache, &cgen_var_1450, 1);
22658 stream->write((uint64_t*)&cgen_var_1450, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022659 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022660 uint64_t cgen_var_1451 = (uint64_t)(uintptr_t)pDataSize;
22661 stream->putBe64(cgen_var_1451);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022662 if (pDataSize)
22663 {
David Reveman9875f2c2019-06-11 21:47:12 -040022664 uint64_t cgen_var_1452 = (uint64_t)(*pDataSize);
22665 stream->putBe64(cgen_var_1452);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022666 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022667 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022668 uint64_t cgen_var_1453 = (uint64_t)(uintptr_t)pData;
22669 stream->putBe64(cgen_var_1453);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022670 if (pData)
22671 {
22672 stream->write((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
22673 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022674 AEMU_SCOPED_TRACE("vkGetValidationCacheDataEXT readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022675 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022676 size_t* check_pDataSize;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022677 check_pDataSize = (size_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022678 if (pDataSize)
22679 {
22680 if (!(check_pDataSize))
22681 {
22682 fprintf(stderr, "fatal: pDataSize inconsistent between guest and host\n");
22683 }
Lingfeng Yangfddc0de2018-11-27 22:26:51 -080022684 (*pDataSize) = (size_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022685 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022686 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022687 void* check_pData;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022688 check_pData = (void*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022689 if (pData)
22690 {
22691 if (!(check_pData))
22692 {
22693 fprintf(stderr, "fatal: pData inconsistent between guest and host\n");
22694 }
22695 stream->read((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
22696 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022697 AEMU_SCOPED_TRACE("vkGetValidationCacheDataEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022698 VkResult vkGetValidationCacheDataEXT_VkResult_return = (VkResult)0;
22699 stream->read(&vkGetValidationCacheDataEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070022700 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080022701 countingStream->clearPool();
22702 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022703 mImpl->log("finish vkGetValidationCacheDataEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022704 return vkGetValidationCacheDataEXT_VkResult_return;
22705}
22706
22707#endif
22708#ifdef VK_EXT_descriptor_indexing
22709#endif
22710#ifdef VK_EXT_shader_viewport_index_layer
22711#endif
22712#ifdef VK_EXT_global_priority
22713#endif
22714#ifdef VK_EXT_external_memory_host
22715VkResult VkEncoder::vkGetMemoryHostPointerPropertiesEXT(
22716 VkDevice device,
22717 VkExternalMemoryHandleTypeFlagBits handleType,
22718 const void* pHostPointer,
22719 VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties)
22720{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022721 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022722 AEMU_SCOPED_TRACE("vkGetMemoryHostPointerPropertiesEXT encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022723 mImpl->log("start vkGetMemoryHostPointerPropertiesEXT");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022724 auto stream = mImpl->stream();
22725 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022726 auto resources = mImpl->resources();
22727 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022728 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022729 VkDevice local_device;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022730 VkExternalMemoryHandleTypeFlagBits local_handleType;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022731 void* local_pHostPointer;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022732 local_device = device;
22733 local_handleType = handleType;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022734 local_pHostPointer = nullptr;
22735 if (pHostPointer)
22736 {
22737 local_pHostPointer = (void*)pool->dupArray(pHostPointer, sizeof(const uint8_t));
22738 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022739 countingStream->rewind();
22740 {
David Reveman9875f2c2019-06-11 21:47:12 -040022741 uint64_t cgen_var_1457;
22742 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1457, 1);
22743 countingStream->write((uint64_t*)&cgen_var_1457, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022744 countingStream->write((VkExternalMemoryHandleTypeFlagBits*)&local_handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022745 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022746 uint64_t cgen_var_1458 = (uint64_t)(uintptr_t)local_pHostPointer;
22747 countingStream->putBe64(cgen_var_1458);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022748 if (local_pHostPointer)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022749 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022750 countingStream->write((void*)local_pHostPointer, sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022751 }
22752 marshal_VkMemoryHostPointerPropertiesEXT(countingStream, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
22753 }
22754 uint32_t packetSize_vkGetMemoryHostPointerPropertiesEXT = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22755 countingStream->rewind();
22756 uint32_t opcode_vkGetMemoryHostPointerPropertiesEXT = OP_vkGetMemoryHostPointerPropertiesEXT;
22757 stream->write(&opcode_vkGetMemoryHostPointerPropertiesEXT, sizeof(uint32_t));
22758 stream->write(&packetSize_vkGetMemoryHostPointerPropertiesEXT, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022759 uint64_t cgen_var_1459;
22760 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1459, 1);
22761 stream->write((uint64_t*)&cgen_var_1459, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022762 stream->write((VkExternalMemoryHandleTypeFlagBits*)&local_handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022763 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022764 uint64_t cgen_var_1460 = (uint64_t)(uintptr_t)local_pHostPointer;
22765 stream->putBe64(cgen_var_1460);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022766 if (local_pHostPointer)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022767 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022768 stream->write((void*)local_pHostPointer, sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022769 }
22770 marshal_VkMemoryHostPointerPropertiesEXT(stream, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022771 AEMU_SCOPED_TRACE("vkGetMemoryHostPointerPropertiesEXT readParams");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022772 unmarshal_VkMemoryHostPointerPropertiesEXT(stream, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
Lingfeng Yang97a06702018-12-24 17:02:43 -080022773 if (pMemoryHostPointerProperties)
22774 {
22775 transform_fromhost_VkMemoryHostPointerPropertiesEXT(mImpl->resources(), (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
22776 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022777 AEMU_SCOPED_TRACE("vkGetMemoryHostPointerPropertiesEXT returnUnmarshal");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022778 VkResult vkGetMemoryHostPointerPropertiesEXT_VkResult_return = (VkResult)0;
22779 stream->read(&vkGetMemoryHostPointerPropertiesEXT_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070022780 pool->freeAll();
Lingfeng Yang2285df12018-11-17 16:25:11 -080022781 countingStream->clearPool();
22782 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022783 mImpl->log("finish vkGetMemoryHostPointerPropertiesEXT");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022784 return vkGetMemoryHostPointerPropertiesEXT_VkResult_return;
22785}
22786
22787#endif
22788#ifdef VK_AMD_buffer_marker
22789void VkEncoder::vkCmdWriteBufferMarkerAMD(
22790 VkCommandBuffer commandBuffer,
22791 VkPipelineStageFlagBits pipelineStage,
22792 VkBuffer dstBuffer,
22793 VkDeviceSize dstOffset,
22794 uint32_t marker)
22795{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022796 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022797 AEMU_SCOPED_TRACE("vkCmdWriteBufferMarkerAMD encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022798 mImpl->log("start vkCmdWriteBufferMarkerAMD");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022799 auto stream = mImpl->stream();
22800 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022801 auto resources = mImpl->resources();
22802 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022803 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022804 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022805 VkPipelineStageFlagBits local_pipelineStage;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022806 VkBuffer local_dstBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022807 VkDeviceSize local_dstOffset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022808 uint32_t local_marker;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022809 local_commandBuffer = commandBuffer;
22810 local_pipelineStage = pipelineStage;
22811 local_dstBuffer = dstBuffer;
22812 local_dstOffset = dstOffset;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022813 local_marker = marker;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022814 countingStream->rewind();
22815 {
David Reveman9875f2c2019-06-11 21:47:12 -040022816 uint64_t cgen_var_1461;
22817 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1461, 1);
22818 countingStream->write((uint64_t*)&cgen_var_1461, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022819 countingStream->write((VkPipelineStageFlagBits*)&local_pipelineStage, sizeof(VkPipelineStageFlagBits));
David Reveman9875f2c2019-06-11 21:47:12 -040022820 uint64_t cgen_var_1462;
22821 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_1462, 1);
22822 countingStream->write((uint64_t*)&cgen_var_1462, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022823 countingStream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
22824 countingStream->write((uint32_t*)&local_marker, sizeof(uint32_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022825 }
22826 uint32_t packetSize_vkCmdWriteBufferMarkerAMD = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22827 countingStream->rewind();
22828 uint32_t opcode_vkCmdWriteBufferMarkerAMD = OP_vkCmdWriteBufferMarkerAMD;
22829 stream->write(&opcode_vkCmdWriteBufferMarkerAMD, sizeof(uint32_t));
22830 stream->write(&packetSize_vkCmdWriteBufferMarkerAMD, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022831 uint64_t cgen_var_1463;
22832 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1463, 1);
22833 stream->write((uint64_t*)&cgen_var_1463, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022834 stream->write((VkPipelineStageFlagBits*)&local_pipelineStage, sizeof(VkPipelineStageFlagBits));
David Reveman9875f2c2019-06-11 21:47:12 -040022835 uint64_t cgen_var_1464;
22836 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_dstBuffer, &cgen_var_1464, 1);
22837 stream->write((uint64_t*)&cgen_var_1464, 1 * 8);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022838 stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
22839 stream->write((uint32_t*)&local_marker, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022840 AEMU_SCOPED_TRACE("vkCmdWriteBufferMarkerAMD readParams");
22841 AEMU_SCOPED_TRACE("vkCmdWriteBufferMarkerAMD returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070022842 pool->freeAll();
22843 countingStream->clearPool();
22844 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022845 mImpl->log("finish vkCmdWriteBufferMarkerAMD");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022846}
22847
22848#endif
22849#ifdef VK_AMD_shader_core_properties
22850#endif
22851#ifdef VK_EXT_vertex_attribute_divisor
22852#endif
22853#ifdef VK_NV_shader_subgroup_partitioned
22854#endif
22855#ifdef VK_NV_device_diagnostic_checkpoints
22856void VkEncoder::vkCmdSetCheckpointNV(
22857 VkCommandBuffer commandBuffer,
22858 const void* pCheckpointMarker)
22859{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022860 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022861 AEMU_SCOPED_TRACE("vkCmdSetCheckpointNV encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022862 mImpl->log("start vkCmdSetCheckpointNV");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022863 auto stream = mImpl->stream();
22864 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022865 auto resources = mImpl->resources();
22866 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022867 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022868 VkCommandBuffer local_commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022869 void* local_pCheckpointMarker;
Lingfeng Yang9666b852018-11-13 23:09:59 -080022870 local_commandBuffer = commandBuffer;
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022871 local_pCheckpointMarker = nullptr;
22872 if (pCheckpointMarker)
22873 {
22874 local_pCheckpointMarker = (void*)pool->dupArray(pCheckpointMarker, sizeof(const uint8_t));
22875 }
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022876 countingStream->rewind();
22877 {
David Reveman9875f2c2019-06-11 21:47:12 -040022878 uint64_t cgen_var_1465;
22879 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1465, 1);
22880 countingStream->write((uint64_t*)&cgen_var_1465, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022881 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022882 uint64_t cgen_var_1466 = (uint64_t)(uintptr_t)local_pCheckpointMarker;
22883 countingStream->putBe64(cgen_var_1466);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022884 if (local_pCheckpointMarker)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022885 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022886 countingStream->write((void*)local_pCheckpointMarker, sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022887 }
22888 }
22889 uint32_t packetSize_vkCmdSetCheckpointNV = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22890 countingStream->rewind();
22891 uint32_t opcode_vkCmdSetCheckpointNV = OP_vkCmdSetCheckpointNV;
22892 stream->write(&opcode_vkCmdSetCheckpointNV, sizeof(uint32_t));
22893 stream->write(&packetSize_vkCmdSetCheckpointNV, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022894 uint64_t cgen_var_1467;
22895 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1467, 1);
22896 stream->write((uint64_t*)&cgen_var_1467, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022897 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022898 uint64_t cgen_var_1468 = (uint64_t)(uintptr_t)local_pCheckpointMarker;
22899 stream->putBe64(cgen_var_1468);
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022900 if (local_pCheckpointMarker)
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022901 {
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022902 stream->write((void*)local_pCheckpointMarker, sizeof(uint8_t));
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022903 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022904 AEMU_SCOPED_TRACE("vkCmdSetCheckpointNV readParams");
22905 AEMU_SCOPED_TRACE("vkCmdSetCheckpointNV returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070022906 pool->freeAll();
22907 countingStream->clearPool();
22908 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022909 mImpl->log("finish vkCmdSetCheckpointNV");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022910}
22911
22912void VkEncoder::vkGetQueueCheckpointDataNV(
22913 VkQueue queue,
22914 uint32_t* pCheckpointDataCount,
22915 VkCheckpointDataNV* pCheckpointData)
22916{
Lingfeng Yang256f9252020-07-14 14:27:33 -070022917 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022918 AEMU_SCOPED_TRACE("vkGetQueueCheckpointDataNV encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080022919 mImpl->log("start vkGetQueueCheckpointDataNV");
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022920 auto stream = mImpl->stream();
22921 auto countingStream = mImpl->countingStream();
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022922 auto resources = mImpl->resources();
22923 auto pool = mImpl->pool();
Lingfeng Yange4008a02018-11-18 12:22:48 -080022924 stream->setHandleMapping(resources->unwrapMapping());
Lingfeng Yang71b596b2018-11-07 18:03:25 -080022925 VkQueue local_queue;
22926 local_queue = queue;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022927 countingStream->rewind();
22928 {
David Reveman9875f2c2019-06-11 21:47:12 -040022929 uint64_t cgen_var_1469;
22930 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1469, 1);
22931 countingStream->write((uint64_t*)&cgen_var_1469, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022932 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022933 uint64_t cgen_var_1470 = (uint64_t)(uintptr_t)pCheckpointDataCount;
22934 countingStream->putBe64(cgen_var_1470);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022935 if (pCheckpointDataCount)
22936 {
22937 countingStream->write((uint32_t*)pCheckpointDataCount, sizeof(uint32_t));
22938 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022939 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022940 uint64_t cgen_var_1471 = (uint64_t)(uintptr_t)pCheckpointData;
22941 countingStream->putBe64(cgen_var_1471);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022942 if (pCheckpointData)
22943 {
22944 for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i)
22945 {
22946 marshal_VkCheckpointDataNV(countingStream, (VkCheckpointDataNV*)(pCheckpointData + i));
22947 }
22948 }
22949 }
22950 uint32_t packetSize_vkGetQueueCheckpointDataNV = 4 + 4 + (uint32_t)countingStream->bytesWritten();
22951 countingStream->rewind();
22952 uint32_t opcode_vkGetQueueCheckpointDataNV = OP_vkGetQueueCheckpointDataNV;
22953 stream->write(&opcode_vkGetQueueCheckpointDataNV, sizeof(uint32_t));
22954 stream->write(&packetSize_vkGetQueueCheckpointDataNV, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040022955 uint64_t cgen_var_1472;
22956 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1472, 1);
22957 stream->write((uint64_t*)&cgen_var_1472, 1 * 8);
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022958 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022959 uint64_t cgen_var_1473 = (uint64_t)(uintptr_t)pCheckpointDataCount;
22960 stream->putBe64(cgen_var_1473);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022961 if (pCheckpointDataCount)
22962 {
22963 stream->write((uint32_t*)pCheckpointDataCount, sizeof(uint32_t));
22964 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022965 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040022966 uint64_t cgen_var_1474 = (uint64_t)(uintptr_t)pCheckpointData;
22967 stream->putBe64(cgen_var_1474);
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022968 if (pCheckpointData)
22969 {
22970 for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i)
22971 {
22972 marshal_VkCheckpointDataNV(stream, (VkCheckpointDataNV*)(pCheckpointData + i));
22973 }
22974 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080022975 AEMU_SCOPED_TRACE("vkGetQueueCheckpointDataNV readParams");
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022976 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022977 uint32_t* check_pCheckpointDataCount;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022978 check_pCheckpointDataCount = (uint32_t*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022979 if (pCheckpointDataCount)
22980 {
22981 if (!(check_pCheckpointDataCount))
22982 {
22983 fprintf(stderr, "fatal: pCheckpointDataCount inconsistent between guest and host\n");
22984 }
22985 stream->read((uint32_t*)pCheckpointDataCount, sizeof(uint32_t));
22986 }
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022987 // WARNING PTR CHECK
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022988 VkCheckpointDataNV* check_pCheckpointData;
Lingfeng Yang77dc2512018-11-17 12:48:37 -080022989 check_pCheckpointData = (VkCheckpointDataNV*)(uintptr_t)stream->getBe64();
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070022990 if (pCheckpointData)
22991 {
22992 if (!(check_pCheckpointData))
22993 {
22994 fprintf(stderr, "fatal: pCheckpointData inconsistent between guest and host\n");
22995 }
22996 for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i)
22997 {
22998 unmarshal_VkCheckpointDataNV(stream, (VkCheckpointDataNV*)(pCheckpointData + i));
22999 }
23000 }
Lingfeng Yang97a06702018-12-24 17:02:43 -080023001 if (pCheckpointData)
23002 {
23003 for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i)
23004 {
23005 transform_fromhost_VkCheckpointDataNV(mImpl->resources(), (VkCheckpointDataNV*)(pCheckpointData + i));
23006 }
23007 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080023008 AEMU_SCOPED_TRACE("vkGetQueueCheckpointDataNV returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070023009 pool->freeAll();
23010 countingStream->clearPool();
23011 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080023012 mImpl->log("finish vkGetQueueCheckpointDataNV");;
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070023013}
23014
23015#endif
Lingfeng Yang5c63afd2018-12-22 01:21:14 -080023016#ifdef VK_GOOGLE_address_space
23017VkResult VkEncoder::vkMapMemoryIntoAddressSpaceGOOGLE(
23018 VkDevice device,
23019 VkDeviceMemory memory,
23020 uint64_t* pAddress)
23021{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023022 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080023023 AEMU_SCOPED_TRACE("vkMapMemoryIntoAddressSpaceGOOGLE encode");
Lingfeng Yang858ebe22019-01-22 15:53:52 -080023024 mImpl->log("start vkMapMemoryIntoAddressSpaceGOOGLE");
Lingfeng Yang5c63afd2018-12-22 01:21:14 -080023025 mImpl->resources()->on_vkMapMemoryIntoAddressSpaceGOOGLE_pre(this, VK_SUCCESS, device, memory, pAddress);
23026 auto stream = mImpl->stream();
23027 auto countingStream = mImpl->countingStream();
23028 auto resources = mImpl->resources();
23029 auto pool = mImpl->pool();
23030 stream->setHandleMapping(resources->unwrapMapping());
23031 VkDevice local_device;
23032 VkDeviceMemory local_memory;
23033 local_device = device;
23034 local_memory = memory;
Lingfeng Yang2b1b8cf2019-02-08 09:53:36 -080023035 mImpl->resources()->deviceMemoryTransform_tohost((VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
Lingfeng Yang5c63afd2018-12-22 01:21:14 -080023036 countingStream->rewind();
23037 {
David Reveman9875f2c2019-06-11 21:47:12 -040023038 uint64_t cgen_var_1477;
23039 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1477, 1);
23040 countingStream->write((uint64_t*)&cgen_var_1477, 1 * 8);
23041 uint64_t cgen_var_1478;
23042 countingStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_1478, 1);
23043 countingStream->write((uint64_t*)&cgen_var_1478, 1 * 8);
Lingfeng Yang5c63afd2018-12-22 01:21:14 -080023044 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023045 uint64_t cgen_var_1479 = (uint64_t)(uintptr_t)pAddress;
23046 countingStream->putBe64(cgen_var_1479);
Lingfeng Yang5c63afd2018-12-22 01:21:14 -080023047 if (pAddress)
23048 {
23049 countingStream->write((uint64_t*)pAddress, sizeof(uint64_t));
23050 }
23051 }
23052 uint32_t packetSize_vkMapMemoryIntoAddressSpaceGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23053 countingStream->rewind();
23054 uint32_t opcode_vkMapMemoryIntoAddressSpaceGOOGLE = OP_vkMapMemoryIntoAddressSpaceGOOGLE;
23055 stream->write(&opcode_vkMapMemoryIntoAddressSpaceGOOGLE, sizeof(uint32_t));
23056 stream->write(&packetSize_vkMapMemoryIntoAddressSpaceGOOGLE, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040023057 uint64_t cgen_var_1480;
23058 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1480, 1);
23059 stream->write((uint64_t*)&cgen_var_1480, 1 * 8);
23060 uint64_t cgen_var_1481;
23061 stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_1481, 1);
23062 stream->write((uint64_t*)&cgen_var_1481, 1 * 8);
Lingfeng Yang5c63afd2018-12-22 01:21:14 -080023063 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023064 uint64_t cgen_var_1482 = (uint64_t)(uintptr_t)pAddress;
23065 stream->putBe64(cgen_var_1482);
Lingfeng Yang5c63afd2018-12-22 01:21:14 -080023066 if (pAddress)
23067 {
23068 stream->write((uint64_t*)pAddress, sizeof(uint64_t));
23069 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080023070 AEMU_SCOPED_TRACE("vkMapMemoryIntoAddressSpaceGOOGLE readParams");
Lingfeng Yang5c63afd2018-12-22 01:21:14 -080023071 // WARNING PTR CHECK
23072 uint64_t* check_pAddress;
23073 check_pAddress = (uint64_t*)(uintptr_t)stream->getBe64();
23074 if (pAddress)
23075 {
23076 if (!(check_pAddress))
23077 {
23078 fprintf(stderr, "fatal: pAddress inconsistent between guest and host\n");
23079 }
23080 stream->read((uint64_t*)pAddress, sizeof(uint64_t));
23081 }
Lingfeng Yang42ac1792019-02-22 20:13:44 -080023082 AEMU_SCOPED_TRACE("vkMapMemoryIntoAddressSpaceGOOGLE returnUnmarshal");
Lingfeng Yang5c63afd2018-12-22 01:21:14 -080023083 VkResult vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return = (VkResult)0;
23084 stream->read(&vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070023085 mImpl->resources()->on_vkMapMemoryIntoAddressSpaceGOOGLE(this, vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return, device, memory, pAddress);
23086 pool->freeAll();
Lingfeng Yang5c63afd2018-12-22 01:21:14 -080023087 countingStream->clearPool();
23088 stream->clearPool();
Lingfeng Yang858ebe22019-01-22 15:53:52 -080023089 mImpl->log("finish vkMapMemoryIntoAddressSpaceGOOGLE");;
Lingfeng Yang5c63afd2018-12-22 01:21:14 -080023090 return vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return;
23091}
23092
23093#endif
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023094#ifdef VK_GOOGLE_color_buffer
23095VkResult VkEncoder::vkRegisterImageColorBufferGOOGLE(
23096 VkDevice device,
23097 VkImage image,
23098 uint32_t colorBuffer)
23099{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023100 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080023101 AEMU_SCOPED_TRACE("vkRegisterImageColorBufferGOOGLE encode");
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023102 mImpl->log("start vkRegisterImageColorBufferGOOGLE");
23103 auto stream = mImpl->stream();
23104 auto countingStream = mImpl->countingStream();
23105 auto resources = mImpl->resources();
23106 auto pool = mImpl->pool();
23107 stream->setHandleMapping(resources->unwrapMapping());
23108 VkDevice local_device;
23109 VkImage local_image;
23110 uint32_t local_colorBuffer;
23111 local_device = device;
23112 local_image = image;
23113 local_colorBuffer = colorBuffer;
23114 countingStream->rewind();
23115 {
David Reveman9875f2c2019-06-11 21:47:12 -040023116 uint64_t cgen_var_1484;
23117 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1484, 1);
23118 countingStream->write((uint64_t*)&cgen_var_1484, 1 * 8);
23119 uint64_t cgen_var_1485;
23120 countingStream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_1485, 1);
23121 countingStream->write((uint64_t*)&cgen_var_1485, 1 * 8);
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023122 countingStream->write((uint32_t*)&local_colorBuffer, sizeof(uint32_t));
23123 }
23124 uint32_t packetSize_vkRegisterImageColorBufferGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23125 countingStream->rewind();
23126 uint32_t opcode_vkRegisterImageColorBufferGOOGLE = OP_vkRegisterImageColorBufferGOOGLE;
23127 stream->write(&opcode_vkRegisterImageColorBufferGOOGLE, sizeof(uint32_t));
23128 stream->write(&packetSize_vkRegisterImageColorBufferGOOGLE, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040023129 uint64_t cgen_var_1486;
23130 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1486, 1);
23131 stream->write((uint64_t*)&cgen_var_1486, 1 * 8);
23132 uint64_t cgen_var_1487;
23133 stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_1487, 1);
23134 stream->write((uint64_t*)&cgen_var_1487, 1 * 8);
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023135 stream->write((uint32_t*)&local_colorBuffer, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080023136 AEMU_SCOPED_TRACE("vkRegisterImageColorBufferGOOGLE readParams");
23137 AEMU_SCOPED_TRACE("vkRegisterImageColorBufferGOOGLE returnUnmarshal");
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023138 VkResult vkRegisterImageColorBufferGOOGLE_VkResult_return = (VkResult)0;
23139 stream->read(&vkRegisterImageColorBufferGOOGLE_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070023140 pool->freeAll();
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023141 countingStream->clearPool();
23142 stream->clearPool();
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023143 mImpl->log("finish vkRegisterImageColorBufferGOOGLE");;
23144 return vkRegisterImageColorBufferGOOGLE_VkResult_return;
23145}
23146
23147VkResult VkEncoder::vkRegisterBufferColorBufferGOOGLE(
23148 VkDevice device,
23149 VkBuffer buffer,
23150 uint32_t colorBuffer)
23151{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023152 EncoderAutoLock encoderLock(this);
Lingfeng Yang42ac1792019-02-22 20:13:44 -080023153 AEMU_SCOPED_TRACE("vkRegisterBufferColorBufferGOOGLE encode");
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023154 mImpl->log("start vkRegisterBufferColorBufferGOOGLE");
23155 auto stream = mImpl->stream();
23156 auto countingStream = mImpl->countingStream();
23157 auto resources = mImpl->resources();
23158 auto pool = mImpl->pool();
23159 stream->setHandleMapping(resources->unwrapMapping());
23160 VkDevice local_device;
23161 VkBuffer local_buffer;
23162 uint32_t local_colorBuffer;
23163 local_device = device;
23164 local_buffer = buffer;
23165 local_colorBuffer = colorBuffer;
23166 countingStream->rewind();
23167 {
David Reveman9875f2c2019-06-11 21:47:12 -040023168 uint64_t cgen_var_1488;
23169 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1488, 1);
23170 countingStream->write((uint64_t*)&cgen_var_1488, 1 * 8);
23171 uint64_t cgen_var_1489;
23172 countingStream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_1489, 1);
23173 countingStream->write((uint64_t*)&cgen_var_1489, 1 * 8);
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023174 countingStream->write((uint32_t*)&local_colorBuffer, sizeof(uint32_t));
23175 }
23176 uint32_t packetSize_vkRegisterBufferColorBufferGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23177 countingStream->rewind();
23178 uint32_t opcode_vkRegisterBufferColorBufferGOOGLE = OP_vkRegisterBufferColorBufferGOOGLE;
23179 stream->write(&opcode_vkRegisterBufferColorBufferGOOGLE, sizeof(uint32_t));
23180 stream->write(&packetSize_vkRegisterBufferColorBufferGOOGLE, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040023181 uint64_t cgen_var_1490;
23182 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1490, 1);
23183 stream->write((uint64_t*)&cgen_var_1490, 1 * 8);
23184 uint64_t cgen_var_1491;
23185 stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_1491, 1);
23186 stream->write((uint64_t*)&cgen_var_1491, 1 * 8);
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023187 stream->write((uint32_t*)&local_colorBuffer, sizeof(uint32_t));
Lingfeng Yang42ac1792019-02-22 20:13:44 -080023188 AEMU_SCOPED_TRACE("vkRegisterBufferColorBufferGOOGLE readParams");
23189 AEMU_SCOPED_TRACE("vkRegisterBufferColorBufferGOOGLE returnUnmarshal");
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023190 VkResult vkRegisterBufferColorBufferGOOGLE_VkResult_return = (VkResult)0;
23191 stream->read(&vkRegisterBufferColorBufferGOOGLE_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070023192 pool->freeAll();
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023193 countingStream->clearPool();
23194 stream->clearPool();
Lingfeng Yangae7e1b32019-02-19 14:07:39 -080023195 mImpl->log("finish vkRegisterBufferColorBufferGOOGLE");;
23196 return vkRegisterBufferColorBufferGOOGLE_VkResult_return;
23197}
23198
23199#endif
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023200#ifdef VK_GOOGLE_sized_descriptor_update_template
23201void VkEncoder::vkUpdateDescriptorSetWithTemplateSizedGOOGLE(
23202 VkDevice device,
23203 VkDescriptorSet descriptorSet,
23204 VkDescriptorUpdateTemplate descriptorUpdateTemplate,
23205 uint32_t imageInfoCount,
23206 uint32_t bufferInfoCount,
23207 uint32_t bufferViewCount,
23208 const uint32_t* pImageInfoEntryIndices,
23209 const uint32_t* pBufferInfoEntryIndices,
23210 const uint32_t* pBufferViewEntryIndices,
23211 const VkDescriptorImageInfo* pImageInfos,
23212 const VkDescriptorBufferInfo* pBufferInfos,
23213 const VkBufferView* pBufferViews)
23214{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023215 EncoderAutoLock encoderLock(this);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023216 AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateSizedGOOGLE encode");
23217 mImpl->log("start vkUpdateDescriptorSetWithTemplateSizedGOOGLE");
23218 auto stream = mImpl->stream();
23219 auto countingStream = mImpl->countingStream();
23220 auto resources = mImpl->resources();
23221 auto pool = mImpl->pool();
23222 stream->setHandleMapping(resources->unwrapMapping());
23223 VkDevice local_device;
23224 VkDescriptorSet local_descriptorSet;
23225 VkDescriptorUpdateTemplate local_descriptorUpdateTemplate;
23226 uint32_t local_imageInfoCount;
23227 uint32_t local_bufferInfoCount;
23228 uint32_t local_bufferViewCount;
23229 uint32_t* local_pImageInfoEntryIndices;
23230 uint32_t* local_pBufferInfoEntryIndices;
23231 uint32_t* local_pBufferViewEntryIndices;
23232 VkDescriptorImageInfo* local_pImageInfos;
23233 VkDescriptorBufferInfo* local_pBufferInfos;
23234 VkBufferView* local_pBufferViews;
23235 local_device = device;
23236 local_descriptorSet = descriptorSet;
23237 local_descriptorUpdateTemplate = descriptorUpdateTemplate;
23238 local_imageInfoCount = imageInfoCount;
23239 local_bufferInfoCount = bufferInfoCount;
23240 local_bufferViewCount = bufferViewCount;
23241 local_pImageInfoEntryIndices = nullptr;
23242 if (pImageInfoEntryIndices)
23243 {
23244 local_pImageInfoEntryIndices = (uint32_t*)pool->dupArray(pImageInfoEntryIndices, ((imageInfoCount)) * sizeof(const uint32_t));
23245 }
23246 local_pBufferInfoEntryIndices = nullptr;
23247 if (pBufferInfoEntryIndices)
23248 {
23249 local_pBufferInfoEntryIndices = (uint32_t*)pool->dupArray(pBufferInfoEntryIndices, ((bufferInfoCount)) * sizeof(const uint32_t));
23250 }
23251 local_pBufferViewEntryIndices = nullptr;
23252 if (pBufferViewEntryIndices)
23253 {
23254 local_pBufferViewEntryIndices = (uint32_t*)pool->dupArray(pBufferViewEntryIndices, ((bufferViewCount)) * sizeof(const uint32_t));
23255 }
23256 local_pImageInfos = nullptr;
23257 if (pImageInfos)
23258 {
23259 local_pImageInfos = (VkDescriptorImageInfo*)pool->alloc(((imageInfoCount)) * sizeof(const VkDescriptorImageInfo));
23260 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i)
23261 {
23262 deepcopy_VkDescriptorImageInfo(pool, pImageInfos + i, (VkDescriptorImageInfo*)(local_pImageInfos + i));
23263 }
23264 }
23265 local_pBufferInfos = nullptr;
23266 if (pBufferInfos)
23267 {
23268 local_pBufferInfos = (VkDescriptorBufferInfo*)pool->alloc(((bufferInfoCount)) * sizeof(const VkDescriptorBufferInfo));
23269 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i)
23270 {
23271 deepcopy_VkDescriptorBufferInfo(pool, pBufferInfos + i, (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
23272 }
23273 }
23274 local_pBufferViews = nullptr;
23275 if (pBufferViews)
23276 {
23277 local_pBufferViews = (VkBufferView*)pool->dupArray(pBufferViews, ((bufferViewCount)) * sizeof(const VkBufferView));
23278 }
23279 if (local_pImageInfos)
23280 {
23281 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i)
23282 {
23283 transform_tohost_VkDescriptorImageInfo(mImpl->resources(), (VkDescriptorImageInfo*)(local_pImageInfos + i));
23284 }
23285 }
23286 if (local_pBufferInfos)
23287 {
23288 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i)
23289 {
23290 transform_tohost_VkDescriptorBufferInfo(mImpl->resources(), (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
23291 }
23292 }
23293 countingStream->rewind();
23294 {
David Reveman9875f2c2019-06-11 21:47:12 -040023295 uint64_t cgen_var_1492;
23296 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1492, 1);
23297 countingStream->write((uint64_t*)&cgen_var_1492, 1 * 8);
23298 uint64_t cgen_var_1493;
23299 countingStream->handleMapping()->mapHandles_VkDescriptorSet_u64(&local_descriptorSet, &cgen_var_1493, 1);
23300 countingStream->write((uint64_t*)&cgen_var_1493, 1 * 8);
23301 uint64_t cgen_var_1494;
23302 countingStream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_1494, 1);
23303 countingStream->write((uint64_t*)&cgen_var_1494, 1 * 8);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023304 countingStream->write((uint32_t*)&local_imageInfoCount, sizeof(uint32_t));
23305 countingStream->write((uint32_t*)&local_bufferInfoCount, sizeof(uint32_t));
23306 countingStream->write((uint32_t*)&local_bufferViewCount, sizeof(uint32_t));
23307 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023308 uint64_t cgen_var_1495 = (uint64_t)(uintptr_t)local_pImageInfoEntryIndices;
23309 countingStream->putBe64(cgen_var_1495);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023310 if (local_pImageInfoEntryIndices)
23311 {
23312 countingStream->write((uint32_t*)local_pImageInfoEntryIndices, ((imageInfoCount)) * sizeof(uint32_t));
23313 }
23314 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023315 uint64_t cgen_var_1496 = (uint64_t)(uintptr_t)local_pBufferInfoEntryIndices;
23316 countingStream->putBe64(cgen_var_1496);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023317 if (local_pBufferInfoEntryIndices)
23318 {
23319 countingStream->write((uint32_t*)local_pBufferInfoEntryIndices, ((bufferInfoCount)) * sizeof(uint32_t));
23320 }
23321 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023322 uint64_t cgen_var_1497 = (uint64_t)(uintptr_t)local_pBufferViewEntryIndices;
23323 countingStream->putBe64(cgen_var_1497);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023324 if (local_pBufferViewEntryIndices)
23325 {
23326 countingStream->write((uint32_t*)local_pBufferViewEntryIndices, ((bufferViewCount)) * sizeof(uint32_t));
23327 }
23328 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023329 uint64_t cgen_var_1498 = (uint64_t)(uintptr_t)local_pImageInfos;
23330 countingStream->putBe64(cgen_var_1498);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023331 if (local_pImageInfos)
23332 {
23333 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i)
23334 {
23335 marshal_VkDescriptorImageInfo(countingStream, (VkDescriptorImageInfo*)(local_pImageInfos + i));
23336 }
23337 }
23338 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023339 uint64_t cgen_var_1499 = (uint64_t)(uintptr_t)local_pBufferInfos;
23340 countingStream->putBe64(cgen_var_1499);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023341 if (local_pBufferInfos)
23342 {
23343 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i)
23344 {
23345 marshal_VkDescriptorBufferInfo(countingStream, (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
23346 }
23347 }
23348 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023349 uint64_t cgen_var_1500 = (uint64_t)(uintptr_t)local_pBufferViews;
23350 countingStream->putBe64(cgen_var_1500);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023351 if (local_pBufferViews)
23352 {
23353 if (((bufferViewCount)))
23354 {
David Reveman9875f2c2019-06-11 21:47:12 -040023355 uint64_t* cgen_var_1501;
23356 countingStream->alloc((void**)&cgen_var_1501, ((bufferViewCount)) * 8);
23357 countingStream->handleMapping()->mapHandles_VkBufferView_u64(local_pBufferViews, cgen_var_1501, ((bufferViewCount)));
23358 countingStream->write((uint64_t*)cgen_var_1501, ((bufferViewCount)) * 8);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023359 }
23360 }
23361 }
23362 uint32_t packetSize_vkUpdateDescriptorSetWithTemplateSizedGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23363 countingStream->rewind();
23364 uint32_t opcode_vkUpdateDescriptorSetWithTemplateSizedGOOGLE = OP_vkUpdateDescriptorSetWithTemplateSizedGOOGLE;
23365 stream->write(&opcode_vkUpdateDescriptorSetWithTemplateSizedGOOGLE, sizeof(uint32_t));
23366 stream->write(&packetSize_vkUpdateDescriptorSetWithTemplateSizedGOOGLE, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040023367 uint64_t cgen_var_1502;
23368 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1502, 1);
23369 stream->write((uint64_t*)&cgen_var_1502, 1 * 8);
23370 uint64_t cgen_var_1503;
23371 stream->handleMapping()->mapHandles_VkDescriptorSet_u64(&local_descriptorSet, &cgen_var_1503, 1);
23372 stream->write((uint64_t*)&cgen_var_1503, 1 * 8);
23373 uint64_t cgen_var_1504;
23374 stream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(&local_descriptorUpdateTemplate, &cgen_var_1504, 1);
23375 stream->write((uint64_t*)&cgen_var_1504, 1 * 8);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023376 stream->write((uint32_t*)&local_imageInfoCount, sizeof(uint32_t));
23377 stream->write((uint32_t*)&local_bufferInfoCount, sizeof(uint32_t));
23378 stream->write((uint32_t*)&local_bufferViewCount, sizeof(uint32_t));
23379 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023380 uint64_t cgen_var_1505 = (uint64_t)(uintptr_t)local_pImageInfoEntryIndices;
23381 stream->putBe64(cgen_var_1505);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023382 if (local_pImageInfoEntryIndices)
23383 {
23384 stream->write((uint32_t*)local_pImageInfoEntryIndices, ((imageInfoCount)) * sizeof(uint32_t));
23385 }
23386 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023387 uint64_t cgen_var_1506 = (uint64_t)(uintptr_t)local_pBufferInfoEntryIndices;
23388 stream->putBe64(cgen_var_1506);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023389 if (local_pBufferInfoEntryIndices)
23390 {
23391 stream->write((uint32_t*)local_pBufferInfoEntryIndices, ((bufferInfoCount)) * sizeof(uint32_t));
23392 }
23393 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023394 uint64_t cgen_var_1507 = (uint64_t)(uintptr_t)local_pBufferViewEntryIndices;
23395 stream->putBe64(cgen_var_1507);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023396 if (local_pBufferViewEntryIndices)
23397 {
23398 stream->write((uint32_t*)local_pBufferViewEntryIndices, ((bufferViewCount)) * sizeof(uint32_t));
23399 }
23400 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023401 uint64_t cgen_var_1508 = (uint64_t)(uintptr_t)local_pImageInfos;
23402 stream->putBe64(cgen_var_1508);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023403 if (local_pImageInfos)
23404 {
23405 for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i)
23406 {
23407 marshal_VkDescriptorImageInfo(stream, (VkDescriptorImageInfo*)(local_pImageInfos + i));
23408 }
23409 }
23410 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023411 uint64_t cgen_var_1509 = (uint64_t)(uintptr_t)local_pBufferInfos;
23412 stream->putBe64(cgen_var_1509);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023413 if (local_pBufferInfos)
23414 {
23415 for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i)
23416 {
23417 marshal_VkDescriptorBufferInfo(stream, (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
23418 }
23419 }
23420 // WARNING PTR CHECK
David Reveman9875f2c2019-06-11 21:47:12 -040023421 uint64_t cgen_var_1510 = (uint64_t)(uintptr_t)local_pBufferViews;
23422 stream->putBe64(cgen_var_1510);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023423 if (local_pBufferViews)
23424 {
23425 if (((bufferViewCount)))
23426 {
David Reveman9875f2c2019-06-11 21:47:12 -040023427 uint64_t* cgen_var_1511;
23428 stream->alloc((void**)&cgen_var_1511, ((bufferViewCount)) * 8);
23429 stream->handleMapping()->mapHandles_VkBufferView_u64(local_pBufferViews, cgen_var_1511, ((bufferViewCount)));
23430 stream->write((uint64_t*)cgen_var_1511, ((bufferViewCount)) * 8);
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023431 }
23432 }
23433 AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateSizedGOOGLE readParams");
23434 AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateSizedGOOGLE returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070023435 pool->freeAll();
23436 countingStream->clearPool();
23437 stream->clearPool();
Lingfeng Yang05d5ea32019-03-23 00:12:39 -070023438 mImpl->log("finish vkUpdateDescriptorSetWithTemplateSizedGOOGLE");;
23439}
23440
23441#endif
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023442#ifdef VK_GOOGLE_async_command_buffers
23443void VkEncoder::vkBeginCommandBufferAsyncGOOGLE(
23444 VkCommandBuffer commandBuffer,
23445 const VkCommandBufferBeginInfo* pBeginInfo)
23446{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023447 EncoderAutoLock encoderLock(this);
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023448 AEMU_SCOPED_TRACE("vkBeginCommandBufferAsyncGOOGLE encode");
23449 mImpl->log("start vkBeginCommandBufferAsyncGOOGLE");
23450 auto stream = mImpl->stream();
23451 auto countingStream = mImpl->countingStream();
23452 auto resources = mImpl->resources();
23453 auto pool = mImpl->pool();
23454 stream->setHandleMapping(resources->unwrapMapping());
23455 VkCommandBuffer local_commandBuffer;
23456 VkCommandBufferBeginInfo* local_pBeginInfo;
23457 local_commandBuffer = commandBuffer;
23458 local_pBeginInfo = nullptr;
23459 if (pBeginInfo)
23460 {
23461 local_pBeginInfo = (VkCommandBufferBeginInfo*)pool->alloc(sizeof(const VkCommandBufferBeginInfo));
23462 deepcopy_VkCommandBufferBeginInfo(pool, pBeginInfo, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
23463 }
23464 if (local_pBeginInfo)
23465 {
23466 transform_tohost_VkCommandBufferBeginInfo(mImpl->resources(), (VkCommandBufferBeginInfo*)(local_pBeginInfo));
23467 }
23468 countingStream->rewind();
23469 {
David Reveman9875f2c2019-06-11 21:47:12 -040023470 uint64_t cgen_var_1512;
23471 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1512, 1);
23472 countingStream->write((uint64_t*)&cgen_var_1512, 1 * 8);
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023473 marshal_VkCommandBufferBeginInfo(countingStream, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
23474 }
23475 uint32_t packetSize_vkBeginCommandBufferAsyncGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23476 countingStream->rewind();
23477 uint32_t opcode_vkBeginCommandBufferAsyncGOOGLE = OP_vkBeginCommandBufferAsyncGOOGLE;
23478 stream->write(&opcode_vkBeginCommandBufferAsyncGOOGLE, sizeof(uint32_t));
23479 stream->write(&packetSize_vkBeginCommandBufferAsyncGOOGLE, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040023480 uint64_t cgen_var_1513;
23481 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1513, 1);
23482 stream->write((uint64_t*)&cgen_var_1513, 1 * 8);
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023483 marshal_VkCommandBufferBeginInfo(stream, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
23484 AEMU_SCOPED_TRACE("vkBeginCommandBufferAsyncGOOGLE readParams");
23485 AEMU_SCOPED_TRACE("vkBeginCommandBufferAsyncGOOGLE returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070023486 pool->freeAll();
23487 countingStream->clearPool();
23488 stream->clearPool();
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023489 mImpl->log("finish vkBeginCommandBufferAsyncGOOGLE");;
23490}
23491
23492void VkEncoder::vkEndCommandBufferAsyncGOOGLE(
23493 VkCommandBuffer commandBuffer)
23494{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023495 EncoderAutoLock encoderLock(this);
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023496 AEMU_SCOPED_TRACE("vkEndCommandBufferAsyncGOOGLE encode");
23497 mImpl->log("start vkEndCommandBufferAsyncGOOGLE");
23498 auto stream = mImpl->stream();
23499 auto countingStream = mImpl->countingStream();
23500 auto resources = mImpl->resources();
23501 auto pool = mImpl->pool();
23502 stream->setHandleMapping(resources->unwrapMapping());
23503 VkCommandBuffer local_commandBuffer;
23504 local_commandBuffer = commandBuffer;
23505 countingStream->rewind();
23506 {
David Reveman9875f2c2019-06-11 21:47:12 -040023507 uint64_t cgen_var_1514;
23508 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1514, 1);
23509 countingStream->write((uint64_t*)&cgen_var_1514, 1 * 8);
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023510 }
23511 uint32_t packetSize_vkEndCommandBufferAsyncGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23512 countingStream->rewind();
23513 uint32_t opcode_vkEndCommandBufferAsyncGOOGLE = OP_vkEndCommandBufferAsyncGOOGLE;
23514 stream->write(&opcode_vkEndCommandBufferAsyncGOOGLE, sizeof(uint32_t));
23515 stream->write(&packetSize_vkEndCommandBufferAsyncGOOGLE, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040023516 uint64_t cgen_var_1515;
23517 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1515, 1);
23518 stream->write((uint64_t*)&cgen_var_1515, 1 * 8);
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023519 AEMU_SCOPED_TRACE("vkEndCommandBufferAsyncGOOGLE readParams");
23520 AEMU_SCOPED_TRACE("vkEndCommandBufferAsyncGOOGLE returnUnmarshal");
Lingfeng Yangf89f75d2020-07-09 17:42:33 -070023521 stream->flush();
Lingfeng Yang256f9252020-07-14 14:27:33 -070023522 pool->freeAll();
23523 countingStream->clearPool();
23524 stream->clearPool();
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023525 mImpl->log("finish vkEndCommandBufferAsyncGOOGLE");;
23526}
23527
23528void VkEncoder::vkResetCommandBufferAsyncGOOGLE(
23529 VkCommandBuffer commandBuffer,
23530 VkCommandBufferResetFlags flags)
23531{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023532 EncoderAutoLock encoderLock(this);
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023533 AEMU_SCOPED_TRACE("vkResetCommandBufferAsyncGOOGLE encode");
23534 mImpl->log("start vkResetCommandBufferAsyncGOOGLE");
23535 auto stream = mImpl->stream();
23536 auto countingStream = mImpl->countingStream();
23537 auto resources = mImpl->resources();
23538 auto pool = mImpl->pool();
23539 stream->setHandleMapping(resources->unwrapMapping());
23540 VkCommandBuffer local_commandBuffer;
23541 VkCommandBufferResetFlags local_flags;
23542 local_commandBuffer = commandBuffer;
23543 local_flags = flags;
23544 countingStream->rewind();
23545 {
David Reveman9875f2c2019-06-11 21:47:12 -040023546 uint64_t cgen_var_1516;
23547 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1516, 1);
23548 countingStream->write((uint64_t*)&cgen_var_1516, 1 * 8);
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023549 countingStream->write((VkCommandBufferResetFlags*)&local_flags, sizeof(VkCommandBufferResetFlags));
23550 }
23551 uint32_t packetSize_vkResetCommandBufferAsyncGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23552 countingStream->rewind();
23553 uint32_t opcode_vkResetCommandBufferAsyncGOOGLE = OP_vkResetCommandBufferAsyncGOOGLE;
23554 stream->write(&opcode_vkResetCommandBufferAsyncGOOGLE, sizeof(uint32_t));
23555 stream->write(&packetSize_vkResetCommandBufferAsyncGOOGLE, sizeof(uint32_t));
David Reveman9875f2c2019-06-11 21:47:12 -040023556 uint64_t cgen_var_1517;
23557 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1517, 1);
23558 stream->write((uint64_t*)&cgen_var_1517, 1 * 8);
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023559 stream->write((VkCommandBufferResetFlags*)&local_flags, sizeof(VkCommandBufferResetFlags));
23560 AEMU_SCOPED_TRACE("vkResetCommandBufferAsyncGOOGLE readParams");
23561 AEMU_SCOPED_TRACE("vkResetCommandBufferAsyncGOOGLE returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070023562 pool->freeAll();
23563 countingStream->clearPool();
23564 stream->clearPool();
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023565 mImpl->log("finish vkResetCommandBufferAsyncGOOGLE");;
23566}
23567
Lingfeng Yang39a276e2019-06-17 13:27:22 -070023568void VkEncoder::vkCommandBufferHostSyncGOOGLE(
23569 VkCommandBuffer commandBuffer,
23570 uint32_t needHostSync,
23571 uint32_t sequenceNumber)
23572{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023573 EncoderAutoLock encoderLock(this);
Lingfeng Yang39a276e2019-06-17 13:27:22 -070023574 AEMU_SCOPED_TRACE("vkCommandBufferHostSyncGOOGLE encode");
23575 mImpl->log("start vkCommandBufferHostSyncGOOGLE");
23576 auto stream = mImpl->stream();
23577 auto countingStream = mImpl->countingStream();
23578 auto resources = mImpl->resources();
23579 auto pool = mImpl->pool();
23580 stream->setHandleMapping(resources->unwrapMapping());
23581 VkCommandBuffer local_commandBuffer;
23582 uint32_t local_needHostSync;
23583 uint32_t local_sequenceNumber;
23584 local_commandBuffer = commandBuffer;
23585 local_needHostSync = needHostSync;
23586 local_sequenceNumber = sequenceNumber;
23587 countingStream->rewind();
23588 {
23589 uint64_t cgen_var_1518;
23590 countingStream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1518, 1);
23591 countingStream->write((uint64_t*)&cgen_var_1518, 1 * 8);
23592 countingStream->write((uint32_t*)&local_needHostSync, sizeof(uint32_t));
23593 countingStream->write((uint32_t*)&local_sequenceNumber, sizeof(uint32_t));
23594 }
23595 uint32_t packetSize_vkCommandBufferHostSyncGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23596 countingStream->rewind();
23597 uint32_t opcode_vkCommandBufferHostSyncGOOGLE = OP_vkCommandBufferHostSyncGOOGLE;
23598 stream->write(&opcode_vkCommandBufferHostSyncGOOGLE, sizeof(uint32_t));
23599 stream->write(&packetSize_vkCommandBufferHostSyncGOOGLE, sizeof(uint32_t));
23600 uint64_t cgen_var_1519;
23601 stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1519, 1);
23602 stream->write((uint64_t*)&cgen_var_1519, 1 * 8);
23603 stream->write((uint32_t*)&local_needHostSync, sizeof(uint32_t));
23604 stream->write((uint32_t*)&local_sequenceNumber, sizeof(uint32_t));
23605 AEMU_SCOPED_TRACE("vkCommandBufferHostSyncGOOGLE readParams");
23606 AEMU_SCOPED_TRACE("vkCommandBufferHostSyncGOOGLE returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070023607 pool->freeAll();
23608 countingStream->clearPool();
23609 stream->clearPool();
Lingfeng Yang39a276e2019-06-17 13:27:22 -070023610 mImpl->log("finish vkCommandBufferHostSyncGOOGLE");;
23611}
23612
Lingfeng Yangc53e7472019-03-27 08:50:55 -070023613#endif
Lingfeng Yang87f11962019-06-27 16:28:53 +000023614#ifdef VK_GOOGLE_create_resources_with_requirements
23615VkResult VkEncoder::vkCreateImageWithRequirementsGOOGLE(
23616 VkDevice device,
23617 const VkImageCreateInfo* pCreateInfo,
23618 const VkAllocationCallbacks* pAllocator,
23619 VkImage* pImage,
23620 VkMemoryRequirements* pMemoryRequirements)
23621{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023622 EncoderAutoLock encoderLock(this);
Lingfeng Yang87f11962019-06-27 16:28:53 +000023623 AEMU_SCOPED_TRACE("vkCreateImageWithRequirementsGOOGLE encode");
23624 mImpl->log("start vkCreateImageWithRequirementsGOOGLE");
23625 auto stream = mImpl->stream();
23626 auto countingStream = mImpl->countingStream();
23627 auto resources = mImpl->resources();
23628 auto pool = mImpl->pool();
23629 stream->setHandleMapping(resources->unwrapMapping());
23630 VkDevice local_device;
23631 VkImageCreateInfo* local_pCreateInfo;
23632 VkAllocationCallbacks* local_pAllocator;
23633 local_device = device;
23634 local_pCreateInfo = nullptr;
23635 if (pCreateInfo)
23636 {
23637 local_pCreateInfo = (VkImageCreateInfo*)pool->alloc(sizeof(const VkImageCreateInfo));
23638 deepcopy_VkImageCreateInfo(pool, pCreateInfo, (VkImageCreateInfo*)(local_pCreateInfo));
23639 }
23640 local_pAllocator = nullptr;
23641 if (pAllocator)
23642 {
23643 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
23644 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
23645 }
23646 mImpl->resources()->unwrap_VkNativeBufferANDROID(pCreateInfo, local_pCreateInfo);
23647 local_pAllocator = nullptr;
23648 if (local_pCreateInfo)
23649 {
23650 transform_tohost_VkImageCreateInfo(mImpl->resources(), (VkImageCreateInfo*)(local_pCreateInfo));
23651 }
23652 if (local_pAllocator)
23653 {
23654 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
23655 }
23656 countingStream->rewind();
23657 {
23658 uint64_t cgen_var_1520;
23659 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1520, 1);
23660 countingStream->write((uint64_t*)&cgen_var_1520, 1 * 8);
23661 marshal_VkImageCreateInfo(countingStream, (VkImageCreateInfo*)(local_pCreateInfo));
23662 // WARNING PTR CHECK
23663 uint64_t cgen_var_1521 = (uint64_t)(uintptr_t)local_pAllocator;
23664 countingStream->putBe64(cgen_var_1521);
23665 if (local_pAllocator)
23666 {
23667 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
23668 }
23669 uint64_t cgen_var_1522;
23670 countingStream->handleMapping()->mapHandles_VkImage_u64(pImage, &cgen_var_1522, 1);
23671 countingStream->write((uint64_t*)&cgen_var_1522, 8);
23672 marshal_VkMemoryRequirements(countingStream, (VkMemoryRequirements*)(pMemoryRequirements));
23673 }
23674 uint32_t packetSize_vkCreateImageWithRequirementsGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23675 countingStream->rewind();
23676 uint32_t opcode_vkCreateImageWithRequirementsGOOGLE = OP_vkCreateImageWithRequirementsGOOGLE;
23677 stream->write(&opcode_vkCreateImageWithRequirementsGOOGLE, sizeof(uint32_t));
23678 stream->write(&packetSize_vkCreateImageWithRequirementsGOOGLE, sizeof(uint32_t));
23679 uint64_t cgen_var_1523;
23680 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1523, 1);
23681 stream->write((uint64_t*)&cgen_var_1523, 1 * 8);
23682 marshal_VkImageCreateInfo(stream, (VkImageCreateInfo*)(local_pCreateInfo));
23683 // WARNING PTR CHECK
23684 uint64_t cgen_var_1524 = (uint64_t)(uintptr_t)local_pAllocator;
23685 stream->putBe64(cgen_var_1524);
23686 if (local_pAllocator)
23687 {
23688 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
23689 }
23690 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
23691 uint64_t cgen_var_1525;
23692 stream->handleMapping()->mapHandles_VkImage_u64(pImage, &cgen_var_1525, 1);
23693 stream->write((uint64_t*)&cgen_var_1525, 8);
23694 stream->setHandleMapping(resources->unwrapMapping());
23695 marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
23696 AEMU_SCOPED_TRACE("vkCreateImageWithRequirementsGOOGLE readParams");
23697 stream->setHandleMapping(resources->createMapping());
23698 uint64_t cgen_var_1526;
23699 stream->read((uint64_t*)&cgen_var_1526, 8);
23700 stream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_1526, (VkImage*)pImage, 1);
23701 stream->unsetHandleMapping();
23702 unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
23703 if (pMemoryRequirements)
23704 {
23705 transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
23706 }
23707 AEMU_SCOPED_TRACE("vkCreateImageWithRequirementsGOOGLE returnUnmarshal");
23708 VkResult vkCreateImageWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
23709 stream->read(&vkCreateImageWithRequirementsGOOGLE_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070023710 pool->freeAll();
Lingfeng Yang87f11962019-06-27 16:28:53 +000023711 countingStream->clearPool();
23712 stream->clearPool();
Lingfeng Yang87f11962019-06-27 16:28:53 +000023713 mImpl->log("finish vkCreateImageWithRequirementsGOOGLE");;
23714 return vkCreateImageWithRequirementsGOOGLE_VkResult_return;
23715}
23716
23717VkResult VkEncoder::vkCreateBufferWithRequirementsGOOGLE(
23718 VkDevice device,
23719 const VkBufferCreateInfo* pCreateInfo,
23720 const VkAllocationCallbacks* pAllocator,
23721 VkBuffer* pBuffer,
23722 VkMemoryRequirements* pMemoryRequirements)
23723{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023724 EncoderAutoLock encoderLock(this);
Lingfeng Yang87f11962019-06-27 16:28:53 +000023725 AEMU_SCOPED_TRACE("vkCreateBufferWithRequirementsGOOGLE encode");
23726 mImpl->log("start vkCreateBufferWithRequirementsGOOGLE");
23727 auto stream = mImpl->stream();
23728 auto countingStream = mImpl->countingStream();
23729 auto resources = mImpl->resources();
23730 auto pool = mImpl->pool();
23731 stream->setHandleMapping(resources->unwrapMapping());
23732 VkDevice local_device;
23733 VkBufferCreateInfo* local_pCreateInfo;
23734 VkAllocationCallbacks* local_pAllocator;
23735 local_device = device;
23736 local_pCreateInfo = nullptr;
23737 if (pCreateInfo)
23738 {
23739 local_pCreateInfo = (VkBufferCreateInfo*)pool->alloc(sizeof(const VkBufferCreateInfo));
23740 deepcopy_VkBufferCreateInfo(pool, pCreateInfo, (VkBufferCreateInfo*)(local_pCreateInfo));
23741 }
23742 local_pAllocator = nullptr;
23743 if (pAllocator)
23744 {
23745 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
23746 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
23747 }
23748 local_pAllocator = nullptr;
23749 if (local_pCreateInfo)
23750 {
23751 transform_tohost_VkBufferCreateInfo(mImpl->resources(), (VkBufferCreateInfo*)(local_pCreateInfo));
23752 }
23753 if (local_pAllocator)
23754 {
23755 transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
23756 }
23757 countingStream->rewind();
23758 {
23759 uint64_t cgen_var_1527;
23760 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1527, 1);
23761 countingStream->write((uint64_t*)&cgen_var_1527, 1 * 8);
23762 marshal_VkBufferCreateInfo(countingStream, (VkBufferCreateInfo*)(local_pCreateInfo));
23763 // WARNING PTR CHECK
23764 uint64_t cgen_var_1528 = (uint64_t)(uintptr_t)local_pAllocator;
23765 countingStream->putBe64(cgen_var_1528);
23766 if (local_pAllocator)
23767 {
23768 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
23769 }
23770 uint64_t cgen_var_1529;
23771 countingStream->handleMapping()->mapHandles_VkBuffer_u64(pBuffer, &cgen_var_1529, 1);
23772 countingStream->write((uint64_t*)&cgen_var_1529, 8);
23773 marshal_VkMemoryRequirements(countingStream, (VkMemoryRequirements*)(pMemoryRequirements));
23774 }
23775 uint32_t packetSize_vkCreateBufferWithRequirementsGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23776 countingStream->rewind();
23777 uint32_t opcode_vkCreateBufferWithRequirementsGOOGLE = OP_vkCreateBufferWithRequirementsGOOGLE;
23778 stream->write(&opcode_vkCreateBufferWithRequirementsGOOGLE, sizeof(uint32_t));
23779 stream->write(&packetSize_vkCreateBufferWithRequirementsGOOGLE, sizeof(uint32_t));
23780 uint64_t cgen_var_1530;
23781 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1530, 1);
23782 stream->write((uint64_t*)&cgen_var_1530, 1 * 8);
23783 marshal_VkBufferCreateInfo(stream, (VkBufferCreateInfo*)(local_pCreateInfo));
23784 // WARNING PTR CHECK
23785 uint64_t cgen_var_1531 = (uint64_t)(uintptr_t)local_pAllocator;
23786 stream->putBe64(cgen_var_1531);
23787 if (local_pAllocator)
23788 {
23789 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
23790 }
23791 stream->unsetHandleMapping() /* emit_marshal, is handle, possibly out */;
23792 uint64_t cgen_var_1532;
23793 stream->handleMapping()->mapHandles_VkBuffer_u64(pBuffer, &cgen_var_1532, 1);
23794 stream->write((uint64_t*)&cgen_var_1532, 8);
23795 stream->setHandleMapping(resources->unwrapMapping());
23796 marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
23797 AEMU_SCOPED_TRACE("vkCreateBufferWithRequirementsGOOGLE readParams");
23798 stream->setHandleMapping(resources->createMapping());
23799 uint64_t cgen_var_1533;
23800 stream->read((uint64_t*)&cgen_var_1533, 8);
23801 stream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_1533, (VkBuffer*)pBuffer, 1);
23802 stream->unsetHandleMapping();
23803 unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
23804 if (pMemoryRequirements)
23805 {
23806 transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
23807 }
23808 AEMU_SCOPED_TRACE("vkCreateBufferWithRequirementsGOOGLE returnUnmarshal");
23809 VkResult vkCreateBufferWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
23810 stream->read(&vkCreateBufferWithRequirementsGOOGLE_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070023811 pool->freeAll();
Lingfeng Yang87f11962019-06-27 16:28:53 +000023812 countingStream->clearPool();
23813 stream->clearPool();
Lingfeng Yang87f11962019-06-27 16:28:53 +000023814 mImpl->log("finish vkCreateBufferWithRequirementsGOOGLE");;
23815 return vkCreateBufferWithRequirementsGOOGLE_VkResult_return;
23816}
23817
23818#endif
Lingfeng Yang4c542412020-02-04 18:18:32 -080023819#ifdef VK_GOOGLE_address_space_info
23820VkResult VkEncoder::vkGetMemoryHostAddressInfoGOOGLE(
23821 VkDevice device,
23822 VkDeviceMemory memory,
23823 uint64_t* pAddress,
23824 uint64_t* pSize,
23825 uint64_t* pHostmemId)
23826{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023827 EncoderAutoLock encoderLock(this);
Lingfeng Yang4c542412020-02-04 18:18:32 -080023828 AEMU_SCOPED_TRACE("vkGetMemoryHostAddressInfoGOOGLE encode");
23829 mImpl->log("start vkGetMemoryHostAddressInfoGOOGLE");
23830 auto stream = mImpl->stream();
23831 auto countingStream = mImpl->countingStream();
23832 auto resources = mImpl->resources();
23833 auto pool = mImpl->pool();
23834 stream->setHandleMapping(resources->unwrapMapping());
23835 VkDevice local_device;
23836 VkDeviceMemory local_memory;
23837 local_device = device;
23838 local_memory = memory;
23839 mImpl->resources()->deviceMemoryTransform_tohost((VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
23840 countingStream->rewind();
23841 {
23842 uint64_t cgen_var_1534;
23843 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1534, 1);
23844 countingStream->write((uint64_t*)&cgen_var_1534, 1 * 8);
23845 uint64_t cgen_var_1535;
23846 countingStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_1535, 1);
23847 countingStream->write((uint64_t*)&cgen_var_1535, 1 * 8);
23848 // WARNING PTR CHECK
23849 uint64_t cgen_var_1536 = (uint64_t)(uintptr_t)pAddress;
23850 countingStream->putBe64(cgen_var_1536);
23851 if (pAddress)
23852 {
23853 countingStream->write((uint64_t*)pAddress, sizeof(uint64_t));
23854 }
23855 // WARNING PTR CHECK
23856 uint64_t cgen_var_1537 = (uint64_t)(uintptr_t)pSize;
23857 countingStream->putBe64(cgen_var_1537);
23858 if (pSize)
23859 {
23860 countingStream->write((uint64_t*)pSize, sizeof(uint64_t));
23861 }
23862 // WARNING PTR CHECK
23863 uint64_t cgen_var_1538 = (uint64_t)(uintptr_t)pHostmemId;
23864 countingStream->putBe64(cgen_var_1538);
23865 if (pHostmemId)
23866 {
23867 countingStream->write((uint64_t*)pHostmemId, sizeof(uint64_t));
23868 }
23869 }
23870 uint32_t packetSize_vkGetMemoryHostAddressInfoGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23871 countingStream->rewind();
23872 uint32_t opcode_vkGetMemoryHostAddressInfoGOOGLE = OP_vkGetMemoryHostAddressInfoGOOGLE;
23873 stream->write(&opcode_vkGetMemoryHostAddressInfoGOOGLE, sizeof(uint32_t));
23874 stream->write(&packetSize_vkGetMemoryHostAddressInfoGOOGLE, sizeof(uint32_t));
23875 uint64_t cgen_var_1539;
23876 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1539, 1);
23877 stream->write((uint64_t*)&cgen_var_1539, 1 * 8);
23878 uint64_t cgen_var_1540;
23879 stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_1540, 1);
23880 stream->write((uint64_t*)&cgen_var_1540, 1 * 8);
23881 // WARNING PTR CHECK
23882 uint64_t cgen_var_1541 = (uint64_t)(uintptr_t)pAddress;
23883 stream->putBe64(cgen_var_1541);
23884 if (pAddress)
23885 {
23886 stream->write((uint64_t*)pAddress, sizeof(uint64_t));
23887 }
23888 // WARNING PTR CHECK
23889 uint64_t cgen_var_1542 = (uint64_t)(uintptr_t)pSize;
23890 stream->putBe64(cgen_var_1542);
23891 if (pSize)
23892 {
23893 stream->write((uint64_t*)pSize, sizeof(uint64_t));
23894 }
23895 // WARNING PTR CHECK
23896 uint64_t cgen_var_1543 = (uint64_t)(uintptr_t)pHostmemId;
23897 stream->putBe64(cgen_var_1543);
23898 if (pHostmemId)
23899 {
23900 stream->write((uint64_t*)pHostmemId, sizeof(uint64_t));
23901 }
23902 AEMU_SCOPED_TRACE("vkGetMemoryHostAddressInfoGOOGLE readParams");
23903 // WARNING PTR CHECK
23904 uint64_t* check_pAddress;
23905 check_pAddress = (uint64_t*)(uintptr_t)stream->getBe64();
23906 if (pAddress)
23907 {
23908 if (!(check_pAddress))
23909 {
23910 fprintf(stderr, "fatal: pAddress inconsistent between guest and host\n");
23911 }
23912 stream->read((uint64_t*)pAddress, sizeof(uint64_t));
23913 }
23914 // WARNING PTR CHECK
23915 uint64_t* check_pSize;
23916 check_pSize = (uint64_t*)(uintptr_t)stream->getBe64();
23917 if (pSize)
23918 {
23919 if (!(check_pSize))
23920 {
23921 fprintf(stderr, "fatal: pSize inconsistent between guest and host\n");
23922 }
23923 stream->read((uint64_t*)pSize, sizeof(uint64_t));
23924 }
23925 // WARNING PTR CHECK
23926 uint64_t* check_pHostmemId;
23927 check_pHostmemId = (uint64_t*)(uintptr_t)stream->getBe64();
23928 if (pHostmemId)
23929 {
23930 if (!(check_pHostmemId))
23931 {
23932 fprintf(stderr, "fatal: pHostmemId inconsistent between guest and host\n");
23933 }
23934 stream->read((uint64_t*)pHostmemId, sizeof(uint64_t));
23935 }
23936 AEMU_SCOPED_TRACE("vkGetMemoryHostAddressInfoGOOGLE returnUnmarshal");
23937 VkResult vkGetMemoryHostAddressInfoGOOGLE_VkResult_return = (VkResult)0;
23938 stream->read(&vkGetMemoryHostAddressInfoGOOGLE_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070023939 pool->freeAll();
Lingfeng Yang4c542412020-02-04 18:18:32 -080023940 countingStream->clearPool();
23941 stream->clearPool();
Lingfeng Yang4c542412020-02-04 18:18:32 -080023942 mImpl->log("finish vkGetMemoryHostAddressInfoGOOGLE");;
23943 return vkGetMemoryHostAddressInfoGOOGLE_VkResult_return;
23944}
23945
23946#endif
Lingfeng Yang2f39a1f2020-04-14 19:24:41 -070023947#ifdef VK_GOOGLE_free_memory_sync
23948VkResult VkEncoder::vkFreeMemorySyncGOOGLE(
23949 VkDevice device,
23950 VkDeviceMemory memory,
23951 const VkAllocationCallbacks* pAllocator)
23952{
Lingfeng Yang256f9252020-07-14 14:27:33 -070023953 EncoderAutoLock encoderLock(this);
Lingfeng Yang2f39a1f2020-04-14 19:24:41 -070023954 AEMU_SCOPED_TRACE("vkFreeMemorySyncGOOGLE encode");
23955 mImpl->log("start vkFreeMemorySyncGOOGLE");
23956 auto stream = mImpl->stream();
23957 auto countingStream = mImpl->countingStream();
23958 auto resources = mImpl->resources();
23959 auto pool = mImpl->pool();
23960 stream->setHandleMapping(resources->unwrapMapping());
23961 VkDevice local_device;
23962 VkDeviceMemory local_memory;
23963 VkAllocationCallbacks* local_pAllocator;
23964 local_device = device;
23965 local_memory = memory;
23966 local_pAllocator = nullptr;
23967 if (pAllocator)
23968 {
23969 local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
23970 deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
23971 }
23972 local_pAllocator = nullptr;
23973 mImpl->resources()->deviceMemoryTransform_tohost((VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
23974 countingStream->rewind();
23975 {
23976 uint64_t cgen_var_1547;
23977 countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1547, 1);
23978 countingStream->write((uint64_t*)&cgen_var_1547, 1 * 8);
23979 uint64_t cgen_var_1548;
23980 countingStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_1548, 1);
23981 countingStream->write((uint64_t*)&cgen_var_1548, 1 * 8);
23982 // WARNING PTR CHECK
23983 uint64_t cgen_var_1549 = (uint64_t)(uintptr_t)local_pAllocator;
23984 countingStream->putBe64(cgen_var_1549);
23985 if (local_pAllocator)
23986 {
23987 marshal_VkAllocationCallbacks(countingStream, (VkAllocationCallbacks*)(local_pAllocator));
23988 }
23989 }
23990 uint32_t packetSize_vkFreeMemorySyncGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
23991 countingStream->rewind();
23992 uint32_t opcode_vkFreeMemorySyncGOOGLE = OP_vkFreeMemorySyncGOOGLE;
23993 stream->write(&opcode_vkFreeMemorySyncGOOGLE, sizeof(uint32_t));
23994 stream->write(&packetSize_vkFreeMemorySyncGOOGLE, sizeof(uint32_t));
23995 uint64_t cgen_var_1550;
23996 stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1550, 1);
23997 stream->write((uint64_t*)&cgen_var_1550, 1 * 8);
23998 uint64_t cgen_var_1551;
23999 stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_1551, 1);
24000 stream->write((uint64_t*)&cgen_var_1551, 1 * 8);
24001 // WARNING PTR CHECK
24002 uint64_t cgen_var_1552 = (uint64_t)(uintptr_t)local_pAllocator;
24003 stream->putBe64(cgen_var_1552);
24004 if (local_pAllocator)
24005 {
24006 marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
24007 }
24008 AEMU_SCOPED_TRACE("vkFreeMemorySyncGOOGLE readParams");
24009 AEMU_SCOPED_TRACE("vkFreeMemorySyncGOOGLE returnUnmarshal");
24010 VkResult vkFreeMemorySyncGOOGLE_VkResult_return = (VkResult)0;
24011 stream->read(&vkFreeMemorySyncGOOGLE_VkResult_return, sizeof(VkResult));
Lingfeng Yang256f9252020-07-14 14:27:33 -070024012 resources->destroyMapping()->mapHandles_VkDeviceMemory((VkDeviceMemory*)&memory);
24013 pool->freeAll();
Lingfeng Yang2f39a1f2020-04-14 19:24:41 -070024014 countingStream->clearPool();
24015 stream->clearPool();
Lingfeng Yang2f39a1f2020-04-14 19:24:41 -070024016 mImpl->log("finish vkFreeMemorySyncGOOGLE");;
24017 return vkFreeMemorySyncGOOGLE_VkResult_return;
24018}
24019
24020#endif
Lingfeng Yangf89f75d2020-07-09 17:42:33 -070024021#ifdef VK_GOOGLE_async_queue_submit
24022void VkEncoder::vkQueueHostSyncGOOGLE(
24023 VkQueue queue,
24024 uint32_t needHostSync,
24025 uint32_t sequenceNumber)
24026{
Lingfeng Yang256f9252020-07-14 14:27:33 -070024027 EncoderAutoLock encoderLock(this);
Lingfeng Yangf89f75d2020-07-09 17:42:33 -070024028 AEMU_SCOPED_TRACE("vkQueueHostSyncGOOGLE encode");
24029 mImpl->log("start vkQueueHostSyncGOOGLE");
24030 auto stream = mImpl->stream();
24031 auto countingStream = mImpl->countingStream();
24032 auto resources = mImpl->resources();
24033 auto pool = mImpl->pool();
24034 stream->setHandleMapping(resources->unwrapMapping());
24035 VkQueue local_queue;
24036 uint32_t local_needHostSync;
24037 uint32_t local_sequenceNumber;
24038 local_queue = queue;
24039 local_needHostSync = needHostSync;
24040 local_sequenceNumber = sequenceNumber;
24041 countingStream->rewind();
24042 {
24043 uint64_t cgen_var_1553;
24044 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1553, 1);
24045 countingStream->write((uint64_t*)&cgen_var_1553, 1 * 8);
24046 countingStream->write((uint32_t*)&local_needHostSync, sizeof(uint32_t));
24047 countingStream->write((uint32_t*)&local_sequenceNumber, sizeof(uint32_t));
24048 }
24049 uint32_t packetSize_vkQueueHostSyncGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
24050 countingStream->rewind();
24051 uint32_t opcode_vkQueueHostSyncGOOGLE = OP_vkQueueHostSyncGOOGLE;
24052 stream->write(&opcode_vkQueueHostSyncGOOGLE, sizeof(uint32_t));
24053 stream->write(&packetSize_vkQueueHostSyncGOOGLE, sizeof(uint32_t));
24054 uint64_t cgen_var_1554;
24055 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1554, 1);
24056 stream->write((uint64_t*)&cgen_var_1554, 1 * 8);
24057 stream->write((uint32_t*)&local_needHostSync, sizeof(uint32_t));
24058 stream->write((uint32_t*)&local_sequenceNumber, sizeof(uint32_t));
24059 AEMU_SCOPED_TRACE("vkQueueHostSyncGOOGLE readParams");
24060 AEMU_SCOPED_TRACE("vkQueueHostSyncGOOGLE returnUnmarshal");
Lingfeng Yang256f9252020-07-14 14:27:33 -070024061 pool->freeAll();
24062 countingStream->clearPool();
24063 stream->clearPool();
Lingfeng Yangf89f75d2020-07-09 17:42:33 -070024064 mImpl->log("finish vkQueueHostSyncGOOGLE");;
24065}
24066
24067void VkEncoder::vkQueueSubmitAsyncGOOGLE(
24068 VkQueue queue,
24069 uint32_t submitCount,
24070 const VkSubmitInfo* pSubmits,
24071 VkFence fence)
24072{
Lingfeng Yang256f9252020-07-14 14:27:33 -070024073 EncoderAutoLock encoderLock(this);
Lingfeng Yangf89f75d2020-07-09 17:42:33 -070024074 AEMU_SCOPED_TRACE("vkQueueSubmitAsyncGOOGLE encode");
24075 mImpl->log("start vkQueueSubmitAsyncGOOGLE");
24076 auto stream = mImpl->stream();
24077 auto countingStream = mImpl->countingStream();
24078 auto resources = mImpl->resources();
24079 auto pool = mImpl->pool();
24080 stream->setHandleMapping(resources->unwrapMapping());
24081 VkQueue local_queue;
24082 uint32_t local_submitCount;
24083 VkSubmitInfo* local_pSubmits;
24084 VkFence local_fence;
24085 local_queue = queue;
24086 local_submitCount = submitCount;
24087 local_pSubmits = nullptr;
24088 if (pSubmits)
24089 {
24090 local_pSubmits = (VkSubmitInfo*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo));
24091 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
24092 {
24093 deepcopy_VkSubmitInfo(pool, pSubmits + i, (VkSubmitInfo*)(local_pSubmits + i));
24094 }
24095 }
24096 local_fence = fence;
24097 if (local_pSubmits)
24098 {
24099 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
24100 {
24101 transform_tohost_VkSubmitInfo(mImpl->resources(), (VkSubmitInfo*)(local_pSubmits + i));
24102 }
24103 }
24104 countingStream->rewind();
24105 {
24106 uint64_t cgen_var_1555;
24107 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1555, 1);
24108 countingStream->write((uint64_t*)&cgen_var_1555, 1 * 8);
24109 countingStream->write((uint32_t*)&local_submitCount, sizeof(uint32_t));
24110 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
24111 {
24112 marshal_VkSubmitInfo(countingStream, (VkSubmitInfo*)(local_pSubmits + i));
24113 }
24114 uint64_t cgen_var_1556;
24115 countingStream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_1556, 1);
24116 countingStream->write((uint64_t*)&cgen_var_1556, 1 * 8);
24117 }
24118 uint32_t packetSize_vkQueueSubmitAsyncGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
24119 countingStream->rewind();
24120 uint32_t opcode_vkQueueSubmitAsyncGOOGLE = OP_vkQueueSubmitAsyncGOOGLE;
24121 stream->write(&opcode_vkQueueSubmitAsyncGOOGLE, sizeof(uint32_t));
24122 stream->write(&packetSize_vkQueueSubmitAsyncGOOGLE, sizeof(uint32_t));
24123 uint64_t cgen_var_1557;
24124 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1557, 1);
24125 stream->write((uint64_t*)&cgen_var_1557, 1 * 8);
24126 stream->write((uint32_t*)&local_submitCount, sizeof(uint32_t));
24127 for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
24128 {
24129 marshal_VkSubmitInfo(stream, (VkSubmitInfo*)(local_pSubmits + i));
24130 }
24131 uint64_t cgen_var_1558;
24132 stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_1558, 1);
24133 stream->write((uint64_t*)&cgen_var_1558, 1 * 8);
24134 AEMU_SCOPED_TRACE("vkQueueSubmitAsyncGOOGLE readParams");
24135 AEMU_SCOPED_TRACE("vkQueueSubmitAsyncGOOGLE returnUnmarshal");
24136 stream->flush();
Lingfeng Yang256f9252020-07-14 14:27:33 -070024137 pool->freeAll();
24138 countingStream->clearPool();
24139 stream->clearPool();
Lingfeng Yangf89f75d2020-07-09 17:42:33 -070024140 mImpl->log("finish vkQueueSubmitAsyncGOOGLE");;
24141}
24142
24143void VkEncoder::vkQueueWaitIdleAsyncGOOGLE(
24144 VkQueue queue)
24145{
Lingfeng Yang256f9252020-07-14 14:27:33 -070024146 EncoderAutoLock encoderLock(this);
Lingfeng Yangf89f75d2020-07-09 17:42:33 -070024147 AEMU_SCOPED_TRACE("vkQueueWaitIdleAsyncGOOGLE encode");
24148 mImpl->log("start vkQueueWaitIdleAsyncGOOGLE");
24149 auto stream = mImpl->stream();
24150 auto countingStream = mImpl->countingStream();
24151 auto resources = mImpl->resources();
24152 auto pool = mImpl->pool();
24153 stream->setHandleMapping(resources->unwrapMapping());
24154 VkQueue local_queue;
24155 local_queue = queue;
24156 countingStream->rewind();
24157 {
24158 uint64_t cgen_var_1559;
24159 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1559, 1);
24160 countingStream->write((uint64_t*)&cgen_var_1559, 1 * 8);
24161 }
24162 uint32_t packetSize_vkQueueWaitIdleAsyncGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
24163 countingStream->rewind();
24164 uint32_t opcode_vkQueueWaitIdleAsyncGOOGLE = OP_vkQueueWaitIdleAsyncGOOGLE;
24165 stream->write(&opcode_vkQueueWaitIdleAsyncGOOGLE, sizeof(uint32_t));
24166 stream->write(&packetSize_vkQueueWaitIdleAsyncGOOGLE, sizeof(uint32_t));
24167 uint64_t cgen_var_1560;
24168 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1560, 1);
24169 stream->write((uint64_t*)&cgen_var_1560, 1 * 8);
24170 AEMU_SCOPED_TRACE("vkQueueWaitIdleAsyncGOOGLE readParams");
24171 AEMU_SCOPED_TRACE("vkQueueWaitIdleAsyncGOOGLE returnUnmarshal");
24172 stream->flush();
Lingfeng Yang256f9252020-07-14 14:27:33 -070024173 pool->freeAll();
24174 countingStream->clearPool();
24175 stream->clearPool();
Lingfeng Yangf89f75d2020-07-09 17:42:33 -070024176 mImpl->log("finish vkQueueWaitIdleAsyncGOOGLE");;
24177}
24178
24179void VkEncoder::vkQueueBindSparseAsyncGOOGLE(
24180 VkQueue queue,
24181 uint32_t bindInfoCount,
24182 const VkBindSparseInfo* pBindInfo,
24183 VkFence fence)
24184{
Lingfeng Yang256f9252020-07-14 14:27:33 -070024185 EncoderAutoLock encoderLock(this);
Lingfeng Yangf89f75d2020-07-09 17:42:33 -070024186 AEMU_SCOPED_TRACE("vkQueueBindSparseAsyncGOOGLE encode");
24187 mImpl->log("start vkQueueBindSparseAsyncGOOGLE");
24188 auto stream = mImpl->stream();
24189 auto countingStream = mImpl->countingStream();
24190 auto resources = mImpl->resources();
24191 auto pool = mImpl->pool();
24192 stream->setHandleMapping(resources->unwrapMapping());
24193 VkQueue local_queue;
24194 uint32_t local_bindInfoCount;
24195 VkBindSparseInfo* local_pBindInfo;
24196 VkFence local_fence;
24197 local_queue = queue;
24198 local_bindInfoCount = bindInfoCount;
24199 local_pBindInfo = nullptr;
24200 if (pBindInfo)
24201 {
24202 local_pBindInfo = (VkBindSparseInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindSparseInfo));
24203 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
24204 {
24205 deepcopy_VkBindSparseInfo(pool, pBindInfo + i, (VkBindSparseInfo*)(local_pBindInfo + i));
24206 }
24207 }
24208 local_fence = fence;
24209 if (local_pBindInfo)
24210 {
24211 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
24212 {
24213 transform_tohost_VkBindSparseInfo(mImpl->resources(), (VkBindSparseInfo*)(local_pBindInfo + i));
24214 }
24215 }
24216 countingStream->rewind();
24217 {
24218 uint64_t cgen_var_1561;
24219 countingStream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1561, 1);
24220 countingStream->write((uint64_t*)&cgen_var_1561, 1 * 8);
24221 countingStream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
24222 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
24223 {
24224 marshal_VkBindSparseInfo(countingStream, (VkBindSparseInfo*)(local_pBindInfo + i));
24225 }
24226 uint64_t cgen_var_1562;
24227 countingStream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_1562, 1);
24228 countingStream->write((uint64_t*)&cgen_var_1562, 1 * 8);
24229 }
24230 uint32_t packetSize_vkQueueBindSparseAsyncGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
24231 countingStream->rewind();
24232 uint32_t opcode_vkQueueBindSparseAsyncGOOGLE = OP_vkQueueBindSparseAsyncGOOGLE;
24233 stream->write(&opcode_vkQueueBindSparseAsyncGOOGLE, sizeof(uint32_t));
24234 stream->write(&packetSize_vkQueueBindSparseAsyncGOOGLE, sizeof(uint32_t));
24235 uint64_t cgen_var_1563;
24236 stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1563, 1);
24237 stream->write((uint64_t*)&cgen_var_1563, 1 * 8);
24238 stream->write((uint32_t*)&local_bindInfoCount, sizeof(uint32_t));
24239 for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
24240 {
24241 marshal_VkBindSparseInfo(stream, (VkBindSparseInfo*)(local_pBindInfo + i));
24242 }
24243 uint64_t cgen_var_1564;
24244 stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_1564, 1);
24245 stream->write((uint64_t*)&cgen_var_1564, 1 * 8);
24246 AEMU_SCOPED_TRACE("vkQueueBindSparseAsyncGOOGLE readParams");
24247 AEMU_SCOPED_TRACE("vkQueueBindSparseAsyncGOOGLE returnUnmarshal");
24248 stream->flush();
Lingfeng Yang256f9252020-07-14 14:27:33 -070024249 pool->freeAll();
24250 countingStream->clearPool();
24251 stream->clearPool();
Lingfeng Yangf89f75d2020-07-09 17:42:33 -070024252 mImpl->log("finish vkQueueBindSparseAsyncGOOGLE");;
24253}
24254
24255#endif
Lingfeng Yangf4d77ef2018-11-02 23:21:37 -070024256
Lingfeng Yangb1d90102018-11-29 16:10:36 -080024257} // namespace goldfish_vk